DotFiles/Editors/Vim

Материал из ALT Linux Wiki
Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


Настройка Vim

Почтоцитирование

Применение команды set tw применительно к vim из-под mutt рассмотрено здесь.

Отключить автоперенос в vim можно командой set paste, включить назад -- set nopaste; у меня переключение повешено на F5 вот так (~/.vimrc):

set pastetoggle=<F5>

При необходимости вручную сформатировать строку автоматически ;) можно сказать <esc>gql, абзац -- <esc>gq}.

Аналогично, при необходимости вручную сформатировать N подряд идущих абзацев, можно сказать <esc>gqN}. Другими словами, обычно вводится <esc>gq<команда_перехода>: <esc>gq1G для форматирования строк от текущей позиции до первой строки, <esc>gq15j -- для форматирования пятнадцати строк от текущей позиции вниз и т.п.

langmap

vim умеет замечательную (хоть и не вполне идеальную) функцию, позволяющую задать соответствие, например, русских буковок латинице, на которую опираются команды (вроде dd5}P).

Для ГОСТовской раскладки:

set langmap=ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕHГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ;`qwertyuiop[]asdfghjkl;'zxcvbnm,.~QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>

Переключение раскладки

Добавьте в ~/.vimrc:

map <F10> ^[:set termencoding=8bit-koi8-u^M:set encoding=utf-8
map <F11> ^[:set termencoding=8bit-koi8-u^M:set encoding=8bit-cp1251
map <F12> ^[:set termencoding=8bit-koi8-u^M:set encoding=8bit-koi8-u

(^[ и ^M набираются как <esc>^V<esc> и <esc>^V<enter>, соответственно; или см. этот файл)

Вариант номер 2: Добавьте в ~/.vimrc:

set encoding=koi8-r
set termencoding=koi8-r

map <F8> :execute RotateEnc()<CR>

" some funcs

let b:encindex=0
function! RotateEnc()
        let y = -1
        while y == -1
                let encstring = "#8bit-cp1251#8bit-cp866#utf-8#koi8-r#"
                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 ":set encoding=".str
                endif
        endwhile
endfunction

set statusline=%<%f%h%m%r%=enc=%{&encoding}\ %b\ 0x%B\ %l,%c%V\ %P
set laststatus=2

<F8> позволяет переключать раскладки по кругу. В статусной строке отображается дополнительная информация: кодировка и код текущего символа в десятичном и шестнадцатиричном виде.

Если вышеприведённые методы не работают (например, у меня в vim-7.x так не проходит), попробуйте вместо ":set encoding=..." использовать ":e ++enc=... %:p". Например, для второго способа сделайте замену:

-                        return ":set encoding=".str
+                        return ":e ++enc=".str " %:p"

Возможно вы также захотите изменить следующую строку:

-set statusline=%<%f%h%m%r%=enc=%{&encoding}\ %b\ 0x%B\ %l,%c%V\ %P
+set statusline=%<%f%h%m%r%=enc=%{&fileencoding}\ %b\ 0x%B\ %l,%c%V\ %P

"Табы" и редактирование

В седьмой версии Vim появились "табы" как, например, в firefox. Это удобнее "окон", потому как буфер, открытый в табе не "спрятан".

Подробнее об этом можно прочитать в :help tabpage, вот пара "удобств":

По умолчанию открывается только 10 табов, остальные буфера появляются как "спрятанные" окна. Устраняем ограничение:

:set tabpagemax=99

Переключение между табами по Alt-Left/Right:

nmap <M-Right> gt
nmap <M-Left> gT

И то же самое для insert mode:

imap <M-Right> <C-O>gt
imap <M-Left> <C-O>gT

Vim Status Line

Для более информативной статусной строчки (избыточность можно убрать по своему вкусу) можно сделать в командном режиме Vim (после Esc, если в режиме редактирования):

:set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [HEX=\%02.2B]\ [POS=%04l,%04v][%p%%]\ [LEN=%L] :set laststatus=2

ну или добавить (без ":") в свой .vimrc:

cat >> ~/.vimrc << EOF set statusline=%F%m%r%h%w\\ [FORMAT=%{&ff}]\\ [TYPE=%Y]\\ [ASCII=\\%03.3b]\\ [HEX=\%02.2B]\\ [POS=%04l,%04v][%p%%]\\ [LEN=%L] set laststatus=2 EOF

mike@ пока остановился на таком варианте:

hi User1 term=underline cterm=bold ctermfg=Cyan ctermbg=Blue guifg=#40ffff guibg=#0000aa set statusline=%1*%F%m%r%h%w%=%(%c%V\ %l/%L\ %P%) set laststatus=2

Ссылки

Ссылки

vi/vim

> [john@alt-devel dbmail]$ git commit
> Error detected while processing /home/john/.vimrc:
> line 4:
> E319: Sorry, the command is not available in this version: menu
> Encoding.koi8-r :e ++enc=koi8-r<CR>

export EDITOR=vim

По умолчанию используется vi из vim-minimal, который мало что умеет. Впрочем, ~/.vimrc имеет смысл писать так, чтобы /bin/vi всё-таки работал -- для этого команды, отсутствующие в минимальной версии vim, необходимо засунуть внутрь блоков "if 1"..."endif".

(vsu@)

Примеры конфигурации (~/.vimrc)

Переключение отображения файла в другую кодировку

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>

Жмём F8 и выбираем кодировку

Сохранение файла в другой кодировке

:set fenc=koi8-r
:w

или сразу

:w ++enc=koi8-r