DotFiles/Editors/Vim: различия между версиями
(Import from freesource.info) |
Ilis (обсуждение | вклад) |
||
(не показано 5 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
{{MovedFromFreesourceInfo|AltLinux/DotFiles/Editors/Vim}} | {{MovedFromFreesourceInfo|AltLinux/DotFiles/Editors/Vim}} | ||
'''Настройка Vim''' | |||
== Почтоцитирование == | |||
Применение команды <tt>set tw</tt> применительно к vim из-под mutt рассмотрено [[ListRules/MUAsetup/Mutt |здесь]]. | |||
* | Отключить автоперенос в vim можно командой <tt>set paste</tt>, включить назад -- <tt>set nopaste</tt>; у меня переключение повешено на <tt>F5</tt> вот так (<tt>~/.vimrc</tt>): | ||
<pre>set pastetoggle=<F5></pre> | |||
При необходимости вручную сформатировать строку автоматически ;) можно сказать <tt><esc>gql</tt>, абзац -- <tt><esc>gq}</tt>. | |||
Аналогично, при необходимости вручную сформатировать <tt>N</tt> подряд идущих абзацев, можно сказать <tt><esc>gqN}</tt>. Другими словами, обычно вводится <tt><esc>gq<команда_перехода></tt>: <tt><esc>gq1G</tt> для форматирования строк от текущей позиции до первой строки, <tt><esc>gq15j</tt> -- для форматирования пятнадцати строк от текущей позиции вниз и т.п. | |||
== langmap == | |||
vim умеет замечательную (хоть и не вполне идеальную) функцию, позволяющую задать соответствие, например, русских буковок латинице, на которую опираются команды (вроде <tt>dd5}P</tt>). | |||
Для ГОСТовской раскладки: | |||
<pre>set langmap=ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕHГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ;`qwertyuiop[]asdfghjkl;'zxcvbnm,.~QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<></pre> | |||
== Переключение раскладки == | |||
Добавьте в <tt>~/.vimrc</tt>: | |||
<pre>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</pre> | |||
(^[ и ^M набираются как <esc>^V<esc> и <esc>^V<enter>, соответственно; или см. [http://fly.osdn.org.ua/~mike/docs/charsets.vimrc этот файл]) | |||
Вариант номер 2: | |||
Добавьте в <tt>~/.vimrc</tt>: | |||
<pre>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</pre> | |||
<F8> позволяет переключать раскладки по кругу. В статусной строке отображается дополнительная информация: кодировка и код текущего символа в десятичном и шестнадцатиричном виде. | |||
Если вышеприведённые методы не работают (например, у меня в vim-7.x так не проходит), попробуйте вместо ":set encoding=..." использовать ":e ++enc=... %:p". Например, для второго способа сделайте замену: | |||
<pre>- return ":set encoding=".str | |||
+ return ":e ++enc=".str " %:p"</pre> | |||
Возможно вы также захотите изменить следующую строку: | |||
<pre>-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</pre> | |||
== «Табы» и редактирование == | |||
В седьмой версии Vim появились «табы» как, например, в firefox. Это удобнее «окон», потому как буфер, открытый в табе не «спрятан». | |||
Подробнее об этом можно прочитать в <tt>:help tabpage</tt>, вот пара «удобств»: | |||
По умолчанию открывается только 10 табов, остальные буфера появляются как «спрятанные» окна. Устраняем ограничение: | |||
<pre>:set tabpagemax=99</pre> | |||
Переключение между табами по Alt-Left/Right: | |||
<pre>nmap <M-Right> gt | |||
nmap <M-Left> gT</pre> | |||
И то же самое для insert mode: | |||
<pre>imap <M-Right> <C-O>gt | |||
imap <M-Left> <C-O>gT</pre> | |||
== Vim Status Line == | |||
Для более информативной статусной строчки (избыточность можно убрать по своему вкусу) можно сделать в командном режиме Vim (после Esc, если в режиме редактирования): | |||
<tt>:set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [HEX=\%02.2B]\ [POS=%04l,%04v][%p%%]\ [LEN=%L] </tt> | |||
<tt>:set laststatus=2</tt> | |||
ну или добавить (без ":") в свой <tt>.vimrc</tt>: | |||
<tt>cat >> ~/.vimrc << EOF</tt> | |||
<tt>set statusline=%F%m%r%h%w\\ [FORMAT=%{&ff}]\\ [TYPE=%Y]\\ [ASCII=\\%03.3b]\\ [HEX=\%02.2B]\\ [POS=%04l,%04v][%p%%]\\ [LEN=%L]</tt> | |||
<tt>set laststatus=2</tt> | |||
<tt>EOF</tt> | |||
mike@ пока остановился на таком варианте: | |||
<tt>hi User1 term=underline cterm=bold ctermfg=Cyan ctermbg=Blue guifg=#40ffff guibg=#0000aa</tt> | |||
<tt>set statusline=%1*%F%m%r%h%w%=%(%c%V\ %l/%L\ %P%)</tt> | |||
<tt>set laststatus=2</tt> | |||
=== Ссылки === | === Ссылки === | ||
* [http://freesource.info/wiki | * [http://www.linux.com/feature/120126 http://www.linux.com/feature/120126] | ||
* <tt>:help statusline</tt> | |||
== Ссылки == | |||
* [http://freesource.info/wiki/Stat'i/KratkoOboVsjom/VIM Кратко о vim] | |||
* [http://durdn.com/blog/2008/11/26/vim-mind-share-soaring-roundup-of-10-vim-articles-recent-and-older-gems/ Подборка из десяти статей о vim] | |||
* [http://vim.wikia.com/wiki/Vim_Tips_Wiki Vim Tips Wiki] | |||
* [http://jmcpherson.org/editing.html Полезный cheat sheet] для уже немного владеющих редактором | |||
== vi/vim == | |||
> [john@alt-devel dbmail]$ git commit<br /> | |||
> Error detected while processing /home/john/.vimrc:<br /> | |||
> line 4:<br /> | |||
> E319: Sorry, the command is not available in this version: menu<br /> | |||
> [[DotFiles/Editors/Encoding.koi8|Encoding.koi8]]-r :e ++enc=koi8-r<CR> | |||
export EDITOR=vim | export EDITOR=vim |
Текущая версия от 17:11, 1 декабря 2008
Настройка 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
Ссылки
- http://www.linux.com/feature/120126
- :help statusline
Ссылки
- Кратко о vim
- Подборка из десяти статей о vim
- Vim Tips Wiki
- Полезный cheat sheet для уже немного владеющих редактором
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