The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

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 Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, mr_july, 14:54, 14/11/2005 [ответить] [смотреть все]
  • +/
    А можно ли в Vim'е указать кодировку файла при открытии прямо в командной строке? Я пробовал разные методы, но ничего у меня не вышло. Так и приходится до сих пор сначала открывать файл, а потом выполнять команду типа "e ++enc=cp-1251". :-(
     
     
  • 2.7, Дмитрий Т, 10:57, 16/11/2005 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    В командной строке vim e enc cp1251 mytext txt В командной строке sh vim --cm... весь текст скрыт [показать] [показать ветку]
     
  • 1.2, ceci_, 01:35, 15/11/2005 [ответить] [смотреть все]  
  • +/
    Otlichnyj script, spasibo :)
     
  • 1.3, Vlad V. Teterya, 01:43, 15/11/2005 [ответить] [смотреть все]  
  • +/
    "<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>
     
     
  • 2.4, stimpack, 10:17, 15/11/2005 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    пробовал почему-то tab не работает. :-(
     
     
  • 3.5, Vlad V. Teterya, 10:55, 15/11/2005 [^] [ответить] [смотреть все]  
  • +/
    нажимаю F10 - появляется менюшка нажимаем Tab - переключается по кругу в менюшк... весь текст скрыт [показать]
     
  • 2.8, Дмитрий Т, 11:03, 16/11/2005 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Ага, этот вариант я видел, притом расширенный с возможностью конвертирования ,... весь текст скрыт [показать] [показать ветку]
     
  • 1.9, sg, 19:25, 16/11/2005 [ответить] [смотреть все]  
  • +/
    Вариант с менюшками. Лично мне нравится больше :-)

    "<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>

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

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

     
     
  • 2.11, Дмитрий Т, 22:05, 01/12/2005 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Shift F8 меняет внутреннюю кодировку vim, поэтому и летит кодировка в строке со... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.12, Константин, 20:36, 03/12/2005 [^] [ответить] [смотреть все]  
  • +/
    Ну если так кординально подходить к вопросу, то в место смены кодировки системы ... весь текст скрыт [показать]
     
  • 1.13, teal, 00:39, 08/12/2005 [ответить] [смотреть все]  
  • +/
    Команда e ++enc=... конечно супер рулит, но у меня есть одна проблемка.
    На моей винде дома (ага, приходится по работе иногда и в винде ковыряться) стоит вим, который нифига не умеет в koi8-r конвертить. Во все конвертит, только не в koi8-r. Причем винда WinXP. Причем на другую машину поставили туже версию вима, для эксперимента -- тот же эффект, не конвертирует. А вот на работе все работат, под той же WinXP. Че за ерунда такая, чего ему не хватает?
    Спасиб.
     
     
  • 2.14, teal, 09:46, 08/12/2005 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Нашел ответ -- iconv dll в корне вима отсутствовала Ну кто бы мог подумать, что... весь текст скрыт [показать] [показать ветку]
     
  • 1.15, Костя, 15:16, 25/07/2006 [ответить] [смотреть все]  
  • +/
    Кто знает как задать набор знаков, который выводится при печати с нажатой Alt?
    (winxp)
     
  • 1.16, kos, 14:46, 03/03/2007 [ответить] [смотреть все]  
  • +/
    Справедливости ради замечу что у меня это работало только на 6м vim'е, 5й нивкакую :)
     
  • 1.17, Дмитрий, 11:12, 13/03/2007 [ответить] [смотреть все]  
  • +/
    Что касается формата файла, то все значительно проще. Vim в состоянии самостоятельно определить ее. В переменной fileformats по умолчанию установлены unix,dos. В моем случае это fileformats=dos,unix,mac. Таким образом Vim сначала ищет CRLF (dos), потом LF (unix) и, в конце-концов, CR (mac). Т.е. для правильного определения dos-формат должен стоять первым. Часто приходится работать с файлами во всех трех форматах. Это отлично работает для меня.
     
  • 1.18, dez, 06:35, 15/05/2007 [ответить] [смотреть все]  
  • +/
    хе работает =)) вери мери гуд ;)
     
  • 1.19, lix, 18:42, 05/09/2007 [ответить] [смотреть все]  
  • +/
    Спасибо!!!
     
  • 1.20, fog, 18:43, 05/09/2007 [ответить] [смотреть все]  
  • +/
    в kubuntu 7.04 - работает!
    Спасибо!!!
     
  • 1.21, dopen, 22:30, 19/11/2008 [ответить] [смотреть все]  
  • +/
    А как с помощью вима (или еще как) массово (из одной директории) сконвертить файлы из Cp1251 в utf-8?
     
     
  • 2.23, SolVolkov, 23:50, 04/03/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    man enconv
     
  • 1.22, Аноним, 15:44, 23/01/2009 [ответить] [смотреть все]  
  • +/
    Блин, спасибо мужики, полезная вешь!
    Добавил в закладки :)
     
  • 1.24, Артем, 19:53, 25/03/2009 [ответить] [смотреть все]  
  • +/
    Подскажите есть ли в vim кодировка iso-8859-5.
    По-документации есть, но включить её я не смог.
    Помогите плз.
     
  • 1.25, AntonGr, 20:37, 26/09/2010 [ответить] [смотреть все]  
  • +/
    Пользуюсь gVim под Windows, задал в конфигурационном файле установку "set fileencodings=utf-8,cp1251,cp866". Создал в Far файл с кодировкой cp866, при открытии его в gVim, выскакивают кракозябры. Если в ручную сменить кодировку ":e ++enc=cpp866", то отображается нормально. Подскажите, в чем дело?
     

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





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