portrait

Поиск



[software] [catdoc] [tcl] [geography] [old things]

Немного о настройке Vim

Редактирование текста в разных кодировках

Vim 6.x понимает тексты в разных кодировках. Кодировку можно указать при открытии файла (команды :edit и :split) с помощью опции ++enc=имя файл, где имя - любое имя кодировки известное вашему системному iconv.

Простейший способ сделать перекодировку на лету - повесить команды перегрузки текущего файла как файла с разными кодировками на какие-нибудь кнопки. Вот так:

map <F2> :e ++enc=cp1251 %<CR>
map <F3> :e ++enc=utf-8 %<CR>
map <F4> :e ++enc=ibm866 %<CR>
map <F5> :e ++enc=koi8-r %<CR>
Иногда хочется чего-то более красивого, например, не запоминать пять клавиш, а запомнить одну, и чтобы выскакивала менюшка. Это тоже делается:
set wildmenu
set wcm=<Tab>
menu Encoding.koi8-r   :e ++enc=koi8-r<CR>
menu Encoding.windows-1251 :e ++enc=cp1251<CR>
menu Encoding.ibm-866      :e ++enc=ibm866<CR>
menu Encoding.utf-8                :e ++enc=utf-8 <CR>
map <F8> :emenu Encoding.<TAB>
Если вы поместите эти строчки в ваш .vimrc то в gvim появится новое меню Encoding, а при нажании клавиши F8 меню будет выскакивать над командной строкой, в том числе и в текстовом режиме.

Автоматическое подхватывание правильного шрифта gvim в зависимости от локали

Следующий фрагмент взят из .vimrc Артема Чуприны.
" SetGuiFont()
"   Выставляет опцию 'guifont' согласно текущему состоянию локали или
"   переменной RESOURCE_NAME
function! SetGuiFont ()
    if has('x11') && has('gui_running')
        let resource_name = $RESOURCE_NAME
        if resource_name == ''
            if &encoding == 'koi8-r'
                let resource_name = 'KOI'
            elseif &encoding == '8bit-cp1251'
                let resource_name = 'WIN'
            elseif &encoding == 'utf-8'
                let resource_name = 'UTF'
            elseif &encoding == 'iso-8859-5'
                let resource_name = 'ISO'
            elseif &encoding == 'latin1'
                let resource_name = 'LAT'
            endif
        endif
        let v:errmsg = ''
        silent! new +r\ !xrdb\ -query
        exe 'silent! /^' . resource_name . '\*font:'
        if v:errmsg == ''
            s/\s*$//
            let fontname = matchstr(getline('.'), '\S\+$')
            if fontname != ''
                let &guifont = fontname
            endif
        endif
        q!
    endif
endfunction
Для того чтобы функция находила правильный шрифт требуется поместить в .Xdefaults следующие ресурсы (или им подобные)::

==== 8< [!xrdb -q | egrep '^[a-z][a-z][a-z]*font:'] ====
iso*font:   -rfx-fixed-medium-r-normal--14-*-*-*-*-*-iso8859-5
koi*font:   -rfx-fixed-medium-r-normal--14-*-*-*-*-*-koi8-r
lat*font:   -misc-fixed-medium-r-normal--14-*-*-*-*-*-iso8859-1
utf*font:   -misc-fixed-medium-r-normal--14-*-*-*-*-*-iso10646-1
win*font:   -rfx-fixed-medium-r-normal--14-*-*-*-*-*-microsoft-cp1251
==== >8 [!xrdb -q | egrep '^[a-z][a-z][a-z]*font:'] ====