The OpenNET Project
 
Поиск (ключи):  ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
ССЫЛКИ НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

vim и файлы с текстом в русских кодировках (vim rus text codepage)


<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: vim, rus, text, codepage,  (найти похожие документы)
From: Телегин Дмитрий <dmitry-t@yandex.ru.> Newsgroups: email Date: Mon, 15 Nov 2005 14:31:37 +0000 (UTC) Subject: vim и файлы с текстом в русских кодировках Когда я стал искать способы просмотра русских файлов с помощью vim, то мне посоветовали скрипт который можно увидеть в статье называеющейся: "Привязка к клавише переключения кодировки текста в vim". Поскольку после экспериментов и расширения скрипта получилось очень удобно, выкладываю кусок своего .vimrc со следующими возможностями: <F7> меняет по очереди формат концов строк (dos - <CR> <NL>, unix - <NL>, mac - <CR>) <F8> переоткрывает файл в разных кодировках через :e ++enc=кодировка <Shift+F8> тоже что и <F8>, но предварительно меняет внутреннюю кодировку vim на равную кодировке файла. Это нужно когда vim умничает и команда :e ++enc=кодировка для него не указ. Минус этого метода в том что когда внутренняя кодировка равна 8bit-cp866, то vim некоторые русские буквы неверно показывает, но именно показывает поскольку если конвертировать то ничего не портится (сравнить можно с результатом работы <F8>). <Ctrl+F8> меняет кодировку файла, то есть после его сохранения он будет конвертирован В fileencodings задан наиболее удобный на мой взгляд вариант автораспознавания кодировок. Статусная строка позволяет контролировать происходящее. Показывает и формат файла и кодировки, заодно в нормальном режиме показывает код текущего символа в десятичном и шестнадцатиричном виде. Перебираемые по кругу кодировки: koi8-r cp1251 8bit-cp866 utf-8 ucs-2le. где ucs-2le - MS Windows unicode encoding (можно например посмотреть содержимое вордовского файла, правда мотать неудобно из-за длинных строк) Строки: set encoding=utf-8 set termencoding=utf-8 можно раскоментировать и указать свою кодировку, но у меня и без них всё вполне работает. Опробация проводилась в ru_RU.UTF-8. Поскольку текущюю кодировку termencoding статусная строка не показывает, то её можно посмотреть командой :set termencoding "set encoding=utf-8 "set termencoding=utf-8 set fileencodings=utf-8,cp1251,cp866,koi8-r " <F7> File fileformat (dos - <CR> <NL>, unix - <NL>, mac - <CR>) map <F7> :execute RotateFileFormat()<CR> vmap <F7> <C-C><F7> imap <F7> <C-O><F7> let b:fformatindex=0 function! RotateFileFormat() let y = -1 while y == -1 let encstring = "#unix#dos#mac#" let x = match(encstring,"#",b:fformatindex) let y = match(encstring,"#",x+1) let b:fformatindex = x+1 if y == -1 let b:fformatindex = 0 else let str = strpart(encstring,x+1,y-x-1) return ":set fileformat=".str endif endwhile endfunction " <F8> File encoding for open " ucs-2le - MS Windows unicode encoding map <F8> :execute RotateEnc()<CR> vmap <F8> <C-C><F8> imap <F8> <C-O><F8> let b:encindex=0 function! RotateEnc() let y = -1 while y == -1 let encstring = "#koi8-r#cp1251#8bit-cp866#utf-8#ucs-2le#" let x = match(encstring,"#",b:encindex) let y = match(encstring,"#",x+1) let b:encindex = x+1 if y == -1 let b:encindex = 0 else let str = strpart(encstring,x+1,y-x-1) return ":e ++enc=".str endif endwhile endfunction " <Shift+F8> Force file encoding for open (encoding = fileencoding) map <S-F8> :execute ForceRotateEnc()<CR> vmap <S-F8> <C-C><S-F8> imap <S-F8> <C-O><S-F8> let b:encindex=0 function! ForceRotateEnc() let y = -1 while y == -1 let encstring = "#koi8-r#cp1251#8bit-cp866#utf-8#ucs-2le#" let x = match(encstring,"#",b:encindex) let y = match(encstring,"#",x+1) let b:encindex = x+1 if y == -1 let b:encindex = 0 else let str = strpart(encstring,x+1,y-x-1) :execute "set encoding=".str return ":e ++enc=".str endif endwhile endfunction " <Ctrl+F8> File encoding for save (convert) map <C-F8> :execute RotateFEnc()<CR> vmap <C-F8> <C-C><C-F8> imap <C-F8> <C-O><C-F8> let b:fencindex=0 function! RotateFEnc() let y = -1 while y == -1 let encstring = "#koi8-r#cp1251#8bit-cp866#utf-8#ucs-2le#" let x = match(encstring,"#",b:fencindex) let y = match(encstring,"#",x+1) let b:fencindex = x+1 if y == -1 let b:fencindex = 0 else let str = strpart(encstring,x+1,y-x-1) return ":set fenc=".str endif endwhile endfunction set statusline=%<%f%h%m%r%=format=%{&fileformat}\ file=%{&fileencoding}\ enc=%{&encoding}\ %b\ 0x%B\ %l,%c%V\ %P set laststatus=2

<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Ajax режим | Смотреть все | RSS ]
 
  • vim и файлы с текстом в русских кодировк, mr_july, 14:54, 14/11/2005 [ответить] (1)
  • +/
    А можно ли в Vim'е указать кодировку файла при открытии прямо в командной строке? Я пробовал разные методы, но ничего у меня не вышло. Так и приходится до сих пор сначала открывать файл, а потом выполнять команду типа "e ++enc=cp-1251". :-(

     
  • В командной строке vim e enc cp1251 mytext txt В ком..., Дмитрий Т, 10:57, 16/11/2005 [ответить] (7)
  • +/
    текст скрыт [посмотреть] [смотреть все]

  • vim и файлы с текстом в русских кодировк, ceci_, 01:35, 15/11/2005 [ответить] (2) 
  • +/
    Otlichnyj script, spasibo :)

  • vim и файлы с текстом в русских кодировк, Vlad V. Teterya, 01:43, 15/11/2005 [ответить] (3) 
  • +/
    "<F10> - вызов меню выбора колировки
    " переключение в меню с помощью Tab
    " Меню выбора кодировки
    set wildmenu
    set wcm=<Tab>
    menu Encoding.koi8-u :e ++enc=8bit-koi8-u<CR>
    menu Encoding.windows-1251 :e ++enc=8bit-cp1251<CR>
    menu Encoding.ibm-866 :e ++enc=8bit-ibm866<CR>
    menu Encoding.utf-8 :e ++enc=2byte-utf-8 <CR>
    map <F10> :emenu Encoding.<TAB>

     
  • пробовал почему-то tab не работает - ..., stimpack, 10:17, 15/11/2005 [ответить] (4) 
  • +/
    текст скрыт [посмотреть] [смотреть все]

     
  • нажимаю F10 - появляется менюшка нажимаем Tab - перекл..., Vlad V. Teterya, 10:55, 15/11/2005 [ответить] (5) 
  • +/
    текст скрыт [посмотреть] [смотреть все]

  • Ага, этот вариант я видел, притом расширенный с возмож..., Дмитрий Т, 11:03, 16/11/2005 [ответить] (8) 
  • +/
    текст скрыт [посмотреть] [смотреть все]

  • vim и файлы с текстом в русских кодировк, sg, 19:25, 16/11/2005 [ответить] (9) 
  • +/
    Вариант с менюшками. Лично мне нравится больше :-)

    "<F7> EOL format (dos <CR><NL>,unix <NL>,mac <CR>)
    set  wildmenu
    set  wcm=<Tab>
    menu EOL.unix :set fileformat=unix<CR>
    menu EOL.dos  :set fileformat=dos<CR>
    menu EOL.mac  :set fileformat=mac<CR>
    map  <F7> :emenu EOL.<Tab>

    "<F8> Change encoding
    set  wildmenu
    set  wcm=<Tab>
    menu Enc.cp1251     :e ++enc=cp1251<CR>
    menu Enc.koi8-r     :e ++enc=koi8-r<CR>
    menu Enc.cp866      :e ++enc=ibm866<CR>
    menu Enc.utf-8      :e ++enc=utf-8<CR>
    menu Enc.ucs-2le    :e ++enc=ucs-2le<CR>
    map  <F8> :emenu Enc.<Tab>

    "<Shift+F8> Convert file encoding
    set  wildmenu
    set  wcm=<Tab>
    menu FEnc.cp1251    :set fenc=cp1251<CR>
    menu FEnc.koi8-r    :set fenc=koi8-r<CR>
    menu FEnc.cp866     :set fenc=ibm866<CR>
    menu FEnc.utf-8     :set fenc=utf-8<CR>
    menu FEnc.ucs-2le   :set fenc=ucs-2le<CR>
    map  <S-F8> :emenu FEnc.<Tab>


  • vim и файлы с текстом в русских кодировк, Костя, 14:56, 23/11/2005 [ответить] (10) 
  • +/
    При переключении Shift+ F8
    (set encoding=8bit-cp855) досовский файл нормально показывается, но летит кодировка в строке сообщений, т.е. кракозяблы появляются там

    Как это можно исправить?


     
  • Shift F8 меняет внутреннюю кодировку vim, поэтому и ле..., Дмитрий Т, 22:05, 01/12/2005 [ответить] (11) 
  • +/
    текст скрыт [посмотреть] [смотреть все]

     
  • Ну если так кординально подходить к вопросу, то в место..., Константин, 20:36, 03/12/2005 [ответить] (12) 
  • +/
    текст скрыт [посмотреть] [смотреть все]

  • Тематический каталог: vim и файлы с текс, teal, 00:39, 08/12/2005 [ответить] (13) 
  • +/
    Команда e ++enc=... конечно супер рулит, но у меня есть одна проблемка.
    На моей винде дома (ага, приходится по работе иногда и в винде ковыряться) стоит вим, который нифига не умеет в koi8-r конвертить. Во все конвертит, только не в koi8-r. Причем винда WinXP. Причем на другую машину поставили туже версию вима, для эксперимента -- тот же эффект, не конвертирует. А вот на работе все работат, под той же WinXP. Че за ерунда такая, чего ему не хватает?
    Спасиб.

     
  • Нашел ответ -- iconv dll в корне вима отсутствовала Ну..., teal, 09:46, 08/12/2005 [ответить] (14) 
  • +/
    текст скрыт [посмотреть] [смотреть все]

  • vim и файлы с текстом в русских кодировк, Костя, 15:16, 25/07/2006 [ответить] (15) 
  • +/
    Кто знает как задать набор знаков, который выводится при печати с нажатой Alt?
    (winxp)

  • vim и файлы с текстом в русских кодировк, kos, 14:46, 03/03/2007 [ответить] (16) 
  • +/
    Справедливости ради замечу что у меня это работало только на 6м vim'е, 5й нивкакую :)

  • vim и файлы с текстом в русских кодировк, Дмитрий, 11:12, 13/03/2007 [ответить] (17) 
  • +/
    Что касается формата файла, то все значительно проще. Vim в состоянии самостоятельно определить ее. В переменной fileformats по умолчанию установлены unix,dos. В моем случае это fileformats=dos,unix,mac. Таким образом Vim сначала ищет CRLF (dos), потом LF (unix) и, в конце-концов, CR (mac). Т.е. для правильного определения dos-формат должен стоять первым. Часто приходится работать с файлами во всех трех форматах. Это отлично работает для меня.

  • vim и файлы с текстом в русских кодировк, dez, 06:35, 15/05/2007 [ответить] (18) 
  • +/
    хе работает =)) вери мери гуд ;)

  • vim и файлы с текстом в русских кодировк, lix, 18:42, 05/09/2007 [ответить] (19) 
  • +/
    Спасибо!!!

  • vim и файлы с текстом в русских кодировк, fog, 18:43, 05/09/2007 [ответить] (20
  • +/
    в kubuntu 7.04 - работает!
    Спасибо!!!

  • Массово сконвертить файлы в другую кодир, dopen, 22:30, 19/11/2008 [ответить] (21
  • +/
    А как с помощью вима (или еще как) массово (из одной директории) сконвертить файлы из Cp1251 в utf-8?

     
  • Массово сконвертить файлы в другую кодир, SolVolkov, 23:50, 04/03/2009 [ответить] (23
  • +/
    man enconv

  • Блин, спасибо мужики, полезная вешь Добавил в закладки..., Аноним, 15:44, 23/01/2009 [ответить] (22
  • +/
    текст скрыт [посмотреть] [смотреть все]

  • iso-8859-5, Артем, 19:53, 25/03/2009 [ответить] (24
  • +/
    Подскажите есть ли в vim кодировка iso-8859-5.
    По-документации есть, но включить её я не смог.
    Помогите плз.


    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:



    Подпишись на Linux Format и получи один из 3 ценных призов!

    Началась подписка на журнал Linux Format на 2010 год. Спешите оформить подписку на единственный в России ежемесячный журнал о Linux!

    Все, оформившие подписку на печатную версию журнала, получают диск с архивом журнала Linux Format за 2005-2009г. в подарок. Также в подарок вы получаете именную электронную версию в формате PDF. Теперь вы можете приступить к чтению журнала сразу в момент выхода свежего номера, не дожидаясь, пока вам доставят бумажную версию.

    Кроме того, все, оформившие подписку на первую половину или весь 2010 год в интернет-магазине ГНУ/Линуксцентра, автоматически становятся участниками розыгрыша ценных призов:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2010 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    RUNNet TopList