vim команды, поиск, подстановка, замена, сочетания клавиш, примеры, описание на русском языке


Перевод "Best of Vim Tips".
Лучшие подсказки по Vim.
------------------------------------------------------------------------------
Составитель David Rayner (zzapper) 15 лет Vi + 3 года Vim и все еще учится.
# zzapper's Tips Page http://www.rayninfo.co.uk/tips/>

Перевел Maksim Kim. http://maksakim.h12.ru

Некоторые фрагменты данного текста были мной не переведены и жестко убиты в
процессе. Если они вам будут нужны - обращайтесь к первоисточнику.
Данный текст выложен без согласия автора - не спрашивал я у него, но думаю он
будет не в обиде.

Отдельный, пока маленький спасиб Дмитрию Опенкову, за маленький поиск багов.
------------------------------------------------------------------------------
# поиск
/joe/e                      : курсор устанавливается в конец найденного
/joe/e+1                    : курсор устанавливается в конец найденного + 1 символ
/joe/s-2                    : курсор устанавливается в начало найденного - 2 символа
/^joe.*fred.*bill/          : обычный поиск
/^[A-J]\+/                  : найти строки, начинающиеся с одного или более A-J
/begin\_.*end               : поиск чего-нить многострочного. (begin на одной строке,
                            : end может быть на другой).
/fred\_s*joe/i              : любые пробельные символы, включая возврат каретки.
/fred\|joe                  : найти FRED или JOE
/\([^0-9]\|^\)%.*%          : найти содержимое между %, в строке не начинающейся с цифр и %
                            : не первый символ.
/.*fred\&.*joe              : найти FRED и JOE в любом порядке следования!
/\<fred\>/i                 : найти fred но не alfred или frederick
/\<\d\d\d\d\>               : найти числа, состоящие только из 4 цифр
/\D\d\d\d\d\D               : найти числа, состоящие только из 4 цифр
/\<\d\{4}\>                 : тоже самое



# поиск пустых строк
/^\n\{3}                    : найти 3 пустых строки
# указать, что ты НЕ ищещь (гласные) 
/\c\v([^aeiou]&\a){4}       : искать 4 последовательные согласные
# использование запомненных подстановок в regexp-поиске
/\(fred\).*\(joe\).*\2.*\1
# повторение Regexp'а (а не того, что он найдет)
/^\([^,]*,\)\{8}
# визуальный поиск
:vmap // y/<C-R>"<CR>       : найти визуально выделенный текст
:vmap <silent> //    y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR> : со специальными символами


# многострочный поиск \_ значит - включая возврат каретки
/<!--\_p\{-}-->                   : поиск многострочного комментария
/fred\_s*joe/i                    : любые пробелы, включая возврат каретки
/bugs\(\_.\)*bunny                : bugs затем bunny в любом месте файла
:h \_                             : помощь
# поиск объявлений процедур/функций под курсором
:nmap gx yiw/^\(sub\<bar>function\)\s\+<C-R>"<CR>
# многофайловый поиск
:bufdo /searchstr
:argdo /searchstr


# как найти URL без обратной косой черты
?http://www.vim.org/        : поиск НАЗАД!!! правда клева?!
----------------------------------------
# подстановки
:%s/fred/joe/igc            : общая команда подстановки
:%s/\r//g                   : удалить DOS'овские возвраты каретки ^M
:%s/\r/\r/g                 : превратить DOS'овские возвраты каретки ^M в настоящие
:%s=  *$==                  : удалить пробелы после строк
:%s= \+$==                  : тоже самое
:%s#\s*\r\?$##              : удалить замыкающие пробелы и DOS'кие возвраты кареток
:%s#\s*\r*$##               : таже фигня
# удаление пустых строк
:%s/^\n\{3}//               : удалить блоки из 3-х пустых строк
:%s/^\n\+/\r/               : сжать пустые строки
# ЕСЛИ ВЫ ТОЛЬКО ХОТИТЕ ЗНАТЬ ОДНУ ВЕЩЬ 
:'a,'bg/fred/s/dick/joe/igc : ОЧЕНЬ ПОЛЕЗНО


# дублирование колонок
:%s= [^ ]\+$=&&=            : дублировать последнюю колонку
:%s= \f\+$=&&=              : тоже самое
:%s= \S\+$=&&               : тоже самое
# память
:s/\(.*\):\(.*\)/\2 : \1/   : поменять местами поля, разделенные :
:%s/^\(.*\)\n\1/\1$/        : удалить одинаковые строки
# не жадный поиск \{-}
:%s/^.\{-}pdf/new.pdf/      : удалить только до первого pdf
# использование многострочной подстановки
:%s/<!--\_.\{-}-->//        : удалить многострочный комментарий
:help /\{-}                 : помощь по не жадному поиску


# подстановка, используя регистр
:s/fred/<c-r>a/g            : заменить "fred" содержимым регистра "a"
:s/fred/\=@a/g              : лучшая альтернатива - регистр не показывается
# множество команд на одной строке
:%s/\f\+\.gif\>/\r&\r/g | v/\.gif$/d | %s/gif/jpg/
# вызов VIM функции

:s/__date__/\=strftime("%c")/ : вставить дату
# работа с колонками. заменить любую str1 в col3
:%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2:
# поменять местами 1 и последнюю колонки (4 колонки)
:%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:
# увеличить любые числа на 6 на определенных строках
:g/loc\|function/s/\d/\=submatch(0)+6/
# а лучше так
:%s#txtdev\zs\d#\=submatch(0)+1#g
:h /\zs
# найти заменяемый текст, запомнить, затем использовать \zs, чтобы упростить подстановку

:%s/"\([^.]\+\).*\zsxx/\1/
----------------------------------------
# глобальная комманда просмотра
:g/fred.*joe.*dick/         : показать все строки с fred,joe и dick
:g/\<fred\>/                : показать все строки с fred но не с freddy
:g/<pattern>/z#.5           : показать с контекстом
:g/<pattern>/z#.5|echo "=========="  : показать красиво
:g/^\s*$/d                  : удалить все пустые строки
:g/fred/,/joe/d             : не зависит от строк (очень мощная фигня)
:g/{/ ,/}/- s/\n\+/\r/g     : удалить пустые строки, но только между {...}
:v/./.,/./-1join            : сжать пустые строки
:g/^$/,/./-j                : сжать пустые строки
:g/<input\|<form/p          : использование \| (или)
:g/^/pu _                   : вставить после каждой строки пустую (pu = put)
:g/^/m0                     : обратить файл (m = move)
:g/fred/t$                  : копировать строки, содержащие fred в EOF
:g/stage/t'a                : копировать строки, содержащие stage в маркер a
:%norm jdd                  : удалить каждую следующую строку

# увеличение чисел

:.,$g/^\d/exe "norm! \<c-a>": увеличение чисел
:'a,'bg/\d\+/norm! ^A       : увеличение чисел
# сохранение глобальных результатов (должны использовать APPEND)
:g/fred/y A                 : добавить все строки с fred в регистр a
:'a,'b g/^Error/ . w >> errors.txt
# сдублировать каждую строку в файле и каждый дубликат окружить ''

:g/./yank|put|-1s/'/"/g|s/.*/Print '&'/
----------------------------------------

# глобальные команды объединенные с подстановкой (мощное редктирование)
:'a,'bg/fred/s/joe/susan/gic :  можно использовать память, чтоб продлить поиск подстановок (муть какая-то)
:g/fred/,/joe/s/fred/joe/gic :  не базирующееся на строках (???) (ultra)
----------------------------------------
# найти fred до начала поиска joe
:/fred/;/joe/-2,/sid/+3s/sally/alley/gIC
----------------------------------------
# Совершенно необходимое
----------------------------------------
* # g* g#           : найти слово под курсором (<cword>) (вперед/назад)

%                   : найти соответствующую открывающую/закрывающую скобку {}[]()
.                   : повторить последнее изменение
matchit.vim         : % теперь ищет соответствующие открывающие/закрывающие тэги <tr><td><script> <?php и т.д.

<C-N><C-P>          : завершение слова в режиме insert
<C-X><C-L>          : завершение строки SUPER полезно
/<C-R><C-W>         : вытащить <cword>(слово под курсором) в поисковую или командную строку
/<C-R><C-A>         : вытащить <CWORD> в поисковую или командную строку
:set ignorecase     : практически всегда необходима
:syntax on          : включение подсветки синтаксиса
:h regexp<C-D>      : нажми control-D и получи список всех тем помощи, содержащих
                      регулярные выражения (жми TAB чтоб перемещаться по списку)
----------------------------------------


# сделать простым обновление/перезагрузку _vimrc
:nmap ,s :source $VIM/_vimrc
:nmap ,v :e $VIM/_vimrc
----------------------------------------
# визуальный режим (просто добавить другие HTML тэги)
:vmap sb "zdi<b><C-R>z</b><ESC>  : добавить <b></b> вокруг ВИЗУАЛЬНО выбранного текста
:vmap st "zdi<?= <C-R>z ?><ESC>  : добавить <?=   ?> вокруг ВИЗУАЛЬНО выбранного текста
----------------------------------------


# Exploring - не буду переводить ;)
:Exp(lore)                      : file explorer заметьте заглавную E
:Sex(plore)                     : file explorer в разделенном окне
:ls                             : список буферов
:cd ..                          : перейти в родительский каталог
:args                           : список файлов
:lcd %:p:h                      : перейти в каталог текущего файла
:autocmd BufEnter * lcd %:p:h   : переходить в каталог текущего файла автоматически (положить в _vimrc)
----------------------------------------
# смена регистра букв
guu                             : перевести строку в нижний регистр
gUU                             : перевести строку в верхний регистр
Vu                              : перевести строку в нижний регистр
VU                              : перевести строку в верхний регистр
g~~                             : поменять регистр строки
vEU                             : перевести слово в верхний регистр
vE~                             : поменять регистр слова
ggguG                           : перевести весь файл в нижний регистр
# перевести в верхний регистр первую букву предложения 
:%s/[.!?]\_s\+\a/\U&\E/g
----------------------------------------
gf                              : открыть файл, имя которого под курсором (SUPER)
ga                              : показать hex,ascii значение символа под курсором
ggVGg?                          : применить rot13 ко всему файлу
ggg?G                           : применить rot13 ко всему файлу (быстрее для больших файлов)
<C-A>,<C-X>                     : увеличить, уменьшить число под курсором
<C-R>=5*5                       : вставить число 25 в текст (мини-калькулятор)
----------------------------------------


# делает все подсказки ненужными
:h 42            : также http://www.google.com/search?q=42
:h holy-grail
:h!
----------------------------------------
# о маркерах и передвижениях
'.               : перейти к строке последнего изменения (SUPER)
`.               : перейти к месту последнего изменения
g;               : переход по всем последним изменениям (старые в начале) (появилось в vim6.3)
g,               : изменено направление перехода (появилось в vim6.3)
:changes
:h changelist    : помощь по тому, что выше
:ju(mps)         : список перемещений
:help jump-motions
:history         : список всех  твоих команд
:his c           : история командной строки
:his s           : история поиска
q/               : окно поиска в истории ;)
q:               : окно истории командной строки
:<C-F>           : окно истории
----------------------------------------
# аббревиатуры и маппинг
:map   <f7>   :'a,'bw! c:/aaa/x
:map   <f8>   :r c:/aaa/x
:map   <f11>  :.w! c:/aaa/xr<CR>

:map   <f12>  :r c:/aaa/xr<CR>
:ab php          : список аббревиатур, начинающихся с php
:map ,           : список всех аббревиатур, начинающихся с ,
# разрешает использовать F10 для маппинга (win32)
set wak=no       : :h winaltkeys
# для использования в маппингах
<CR>             : возврат каретки для маппинга
<ESC>            : Escape


<LEADER>         : обычно \
<BAR>            : |
<BACKSPACE>      : backspace
#показать цвет RGB под курсором, напр. #445588
:nmap <leader>c :hi Normal guibg=#<c-r>=expand("<cword>")<cr><cr>

----------------------------------------
# использование регистров в маппинге (можно предварительно загрузить в _vimrc)
:let @m=":'a,'bs/"
:let @s=":%!sort -u"
----------------------------------------
# список регистров
:reg             : показать содержимое всех регистров
:reg a           : показать содержимое индивидуального регистра
"1p....          : получить содержимое числовых регистров один за другим (?)
:let @y='yy@"'   : предварительная загрузка регистров (положите в _vimrc)
----------------------------------------


# полезные трюки
"ayy@a           : выполнить "команду Vim" в текстовом файле
yy@"             : то же самое, используя безымянный регистр
u@.              : выполнить команду, введенную только что
----------------------------------------
# получить вывод из других команд (необходимы внешние программы)
:r!ls.exe        : читает вывод команды ls
!!date           : то же самое(только заменяет/фильтрует текущую строку)
# сортировка при помощи внешней sort
:%!sort -u       : использование внешней программы для фильтрации содержимого
:'a,'b!sort -u   : использование внешней программы для фильтрации содержимого
!1} sort -u      : сортировка параграфа (обрати внимание: режим normal!!)
----------------------------------------
# управление множеством файлов

:bn              : перейти к следующему буферу
:bp              : перейте к предыдущему буферу
:wn              : сохранить файл и перейти к следующему (super)
:wp              : сохранить файл и перейти к предыдущему
:bd              : удалить файл из списка буферов (super)
:bun             : выгрузить буфер (удалить окно но не из списка буферов)
:badd file.c     : файл из списка буферов
:b 3             : перейти к буферу 3
:b main          : перейти к буферу с main в имени, например, main.c (ultra)
:sav php.html    : сохранить текущий файл как php.html
:sav! %<.bak     : сохранить текущий файл с другим расширением
:sav! %:r.cfm    : сохранить текущий файл с другим расширением
:e!              : вернуться к немодифицированному файлу
:w c:/aaa/%      : сохранить файл где хошь
:e #             : редактировать альернативный файл
:sp fred.txt     : открыть fred.txt в разделенном окне
:sball,:sb       : все буфера в разделенных окнах (super)
:scrollbind      : в каждом разделенном окне
:map   <F5> :ls<CR>:e # : нажатие F5 выдает список всех буферов, просто напишите номер
:set hidden      : позволяет изменять буфер без сохранения текущего буфера
----------------------------------------
# быстрый переход между разделенными окнами
map <C-J> <C-W>j<C-W>_
map <C-K> <C-W>k<C-W>_
----------------------------------------


# запись макросов (ЛУЧШИЕ ПОДСКАЗКИ ИЗ ВСЕХ)
qq  # записать в q
твои сложные последоватеьлности команд
q   # конец записи
@q выполнить макрос
@@ повторить последний выполненный макрос
5@@ повторить 5 раз
# редактирование регистра/макроса
"qp                               : показать содержимое регистра q (режим normal)
<ctrl-R>q                         : показать содержимое регистра q (режим insert)
# вызов макроса для Визуального блока
1) определи макрос
qq:s/ to/ from/g^Mq
2) выдели визуальный блок
V}
3) нажми : и появится следующая фигня
:'<,'>

4) закончи следующим образом
:'<,'>norm @q
----------------------------------------
# Визуальный режим
v                               : войти в визуальный режим
V                               : выделить всю строку
<C-V>                           : войти в ВИЗУАЛЬНЫЙ БЛОЧНЫЙ режим
gv                              : выделить последнее выделенное
o                               : переместиться в другой конец визуальной области
"*y                             : копировать выделенное в буфер обмена
----------------------------------------
# _vimrc основы
:set incsearch : переход к искомому слову во время печати этого слова
:set wildignore=*.o,*.obj,*.bak,*.exe : автоподстановка файлов по tab игнорирует эти файлы
:set shiftwidth=3                     : для табов
:set vb t_vb=".                       : без звука
:set browsedir=buffer                 : GUI открыть файл использует текущий каталог
----------------------------------------
# FTP из VIM

cmap ,r  :Nread ftp://209.51.134.122/public_html/index.html
cmap ,w  :Nwrite ftp://209.51.134.122/public_html/index.html
gvim ftp://209.51.134.122/public_html/index.html
----------------------------------------
# добавление в регистры (использовать БОЛЬШИЕ БУКВЫ)
# запомнить 5 строк в "a" затем добавить дальнейшие 5 строк
"a5yy
10j
"A5yy
----------------------------------------
[I     : показывает строки, совпадающие со словом под курсором (super)
----------------------------------------
# перенаправление & буфер обмена *
:redir @*                    : перенаправить команды в буфер обмена
:redir END                   : конец перенаправления
:redir >> out.txt            : перенаправить в файл


# Работа с буфером обмена
"*yy                         : скопировать в буфер обмена
"*p                          : вставить из буфера обмена
# копировать в буфер обмена (режим ex)
:'a,'by*                     : скопировать область в буфер обмена
:%y*                         : скопировать весь буфер в буфер обмена
# фильтрация не печатных символов из буфера обмена
# полезно при вставке из некоторых gui приложений
:nmap <leader>p :let @* = substitute(@*,'[^[:print:]]','','g')<cr>"*p
----------------------------------------


# форматирование текста
gq}                          : форматировать параграф
ggVGgq                       : форматировать весь файл
Vgq                          : текущую строку
# сделать строки длиной 70 символов, если возможно, ограничить ;
:s/.\{,69\};\s*\|.\{,69\}\s\+/&\r/g
----------------------------------------
# выполнение команд для множества файлов
:argdo %s/foo/bar/e          : выполнить на всех файлах в :args
:bufdo %s/foo/bar/e
:windo %s/foo/bar/e
:argdo exe '%!sort'|w!       : включая внешнюю команду
:bufdo /foo/
----------------------------------------
# трюки коммандной строки
gvim -h                    : помощь
ls | gvim -                : редактировать поток!!
cat xx | gvim - -c "v/^\d\d\|^[3-9]/d " : фильтровать поток
gvim -o file1 file2        : открыть в разделенных окнах


# выполнить одну команду после открытия файла
gvim.exe -c "/main" joe.c  : открыть joe.c и перейти к "main"
# выполнить несколько команд над одним файлом
vim -c "%s/ABC/DEF/ge | update" file1.c
# выполнить несколько команд над группой файлов
vim -c "argdo %s/ABC/DEF/ge | update" *.c


# удалить блоки текста из нескольких файлов
vim -c "argdo /begin/+1,/end/-1g/^/d | update" *.c
#загрузить VIM без _vimrc и плагинов (чистый VIM)
gvim -u NONE -U NONE -N
# получить содержимое буфера обмена
gvim -c 'normal ggdG"*p' c:/aaa/xp
# напечатать буфер обмена на принтере по умолчанию

gvim -c 's/^/\=@*/|hardcopy!|q!'
----------------------------------------
# GVIM нахождение различий (офигительно)
gvim -d file1 file2        : vimdiff (сравнение файлов)
dp                         : "перенести" отличие под курсором в другой файл
do                         : "получить" отличие под курсором из другого файла
----------------------------------------
# ловушки Vim
в регулярных выражениях вы должны предварять косой чертой + (найти 1 или более)
в регулярных выражениях вы должны предварять косой чертой | (или)
в регулярных выражениях вы должны предварять косой чертой ( (группа)
в регулярных выражениях вы должны предварять косой чертой { (количество)
/fred\+/                   : совпадает с fred/freddy но не с free
/\(fred\)\{2,3}/           : иллюстрируется, что было написано выше
----------------------------------------

# \v или очень магическое (обычно) уменьшения косых черт :)

/codes\(\n\|\s\)*where  : обычный regexp
/\vcodes(\n|\s)*where   : очень магический
----------------------------------------
# вытягивание объектов в командную/поисковую строку (SUPER)
<C-R><C-W> : слово под курсором в командную/поисковую строку
<C-R><C-A> : по виду то же самое, чем отличается не понял
<C-R>-                  : вставить последний удаленный текст (меньше строки)
<C-R>[0-9a-z]           : вставить сожержимое именованного регистра

<C-R>%                  : вставиь имя файла
----------------------------------------

# работа с регистрами
:let @a=@_              : очистить регистр a
:let @a=""              : очистить регистр a
:let @*=@a              : копировать регистр в буфер обмена
map   <f11> "qyy:let @q=@q."zzz"
----------------------------------------
# помощь по помощи
:h quickref             : VIM Quick Reference Sheet (ultra)
:h tips                 : собственные подсказки Vim
:h visual<C-D><tab>     : получить список всех разделов помощи
                        : потом используйте tab, чтоб перемещаться
:h ctrl<C-D>            : помощь по всем комбинациям клавиш, использующих control
:h :r                   : помощь по командам расширенного режима
:h /\r                  : что значит \r в регулярном выражении (значит <CR> возврат каретки)
:h \\zs                 : двойная обратная косая черта, чтоб найти \zs в помощи
:h i_CTRL-R             : помощь по <C-R> в режиме insert
:h c_CTRL-R             : помощь по <C-R> в режиме command
:h v_CTRL-V             : помощь по режиму visual
:h tutor                : VIM Tutor - обучалка по нашему


<C-[>, <C-T>            : передвигаться назад и вперед в истории помощи
gvim -h                 : помощь по командной строке VIM
----------------------------------------
# где какие опции были установлены
:scriptnames            : список всех загруженных плагинов
:function               : список функций
# создать свою собственную помощь в VIM
:helptags /vim/vim63/doc  : скомпилить все *.txt файлы помощи в /doc
:help add-local-help
----------------------------------------
# запуск файла во внешней программе (напр. php)
map   <f9>   :w<CR>:!c:/php/php.exe %<CR>

map   <f2>   :w<CR>:!perl -c %<CR>
----------------------------------------
# захват вывода текущего скрипта в отдельный буфер
:new | r!perl #                   : открывает новый буфер, читает из другого
:new! x.out | r!perl #            : то же, только с именованными файлами

----------------------------------------
# вставить возврат каретки DOS
:%s/nubian/<C-V><C-M>&/g
:%s/nubian/<C-Q><C-M>&/g
:%s/nubian/^M&/g
:%s/nubian/\r&/g
----------------------------------------
# автоматически удалять окончания строк - Dos-return'ы, пробельные символы
autocmd BufRead * silent! %s/[\r \t]\+$//
autocmd BufEnter *.php :%s/[ \t\r]\+$//e
----------------------------------------
# выполнить действия над конкретным файлом или файлами конкретного типа

autocmd VimEnter c:/intranet/note011.txt normal! ggVGg?
autocmd FileType *.pl exec('set fileformats=unix')
----------------------------------------
# получить последнюю введенную команду для копирования/вставки в текст
i<c-r>:
# получить последнюю команду поиска для копирования/вставки в текст
i<c-r>/
----------------------------------------
# больше подстановок
<C-X><C-F>                        : вставить имя файла в текущем каталоге
----------------------------------------


# замена в выделеной части текста
# выделить текст как обычно (:h visual) затем написать :s/Emacs/Vim/ etc
:'<,'>s/Emacs/Vim/g               : ПОМНИ не нужно писать '<.'>
gv                                : перевыделить последний выделенный текст(ULTRA)
----------------------------------------
# вставка номера строки в файл
:g/^/exec "s/^/".strpart(line(".")."    ", 0, 4)
:%s/^/\=strpart(line(".")."     ", 0, 5)
:%s/^/\=line('.'). ' '

----------------------------------------
# нумерация строк по вимовски =)
:set number                       : показать номера строк
:map <F12> :set number!<CR>       : показать номера строк или спрятать (туды-сюды)
:%s/^/\=strpart(line('.')."        ",0,&ts)
----------------------------------------
# редактирование в Insert mode (типа на самом деле полезно)

<C-U>                             : удалить все, что было введено в этом режиме
<C-W>                             : удалить последнее слово
<HOME><END>                       : начало/конец строки
<C-LEFTARROW><C-RIGHTARROW>       : переход по словам назад/вперед
<C-X><C-E>,<C-X><C-Y>             : скрол в insert mode
----------------------------------------


# подстановки имен файлов (например main_c.c)
:e main_<tab>                     : по табу
gf                                : открыть файл под курсором (normal mode)
main_<C-X><C-F>                   : подставить имя файла в текст (insert mode)
----------------------------------------
# преобразовать текстовый файл в HTML
:runtime! syntax/2html.vim        : преобразовать текстовый файл в html
:h 2html
----------------------------------------
# в VIM есть встроенный grep
:grep some_keyword *.c            : получить список всех с-файлов, содержащих some_keyword
:cn                               : перейти к следующему вхождению
----------------------------------------
# заставить делать подсветку для файла без расширения .pl

:set syntax=perl
# отключить подсветку синтаксиса
:set syntax off
# поменять цветовую схему (любой файл в ~vim/vim??/colors)
:colorscheme blue
----------------------------------------
:set noma (non modifiable)        : запрет изменения файла
:set ro (Read Only)               : делает файл только для чтения
----------------------------------------
# сессии (открывает пачку файлов)
gvim file1.c file2.c lib/lib.h lib/lib2.h : загрузить файлы для "сессии"
:mksession                        : создать файл сессии (по умолчанию Session.vim)
:q
gvim -S Session.vim               : загрузить все файлы из сессии
----------------------------------------
#тэги (переход по процедурам и функциям)
taglist.vim                       : популярный плагин
:Tlist                            : показать тэги (список функций)

<C-]>                             : перейти к функции под курсором
----------------------------------------

# отобразить "невидимые символы"
:set list
:h listchars
----------------------------------------
# имена файлов
:h filename-modifiers             : помощь
:w %                              : записать в текущий файл
:w %:r.cfm                        : поменять расширение файла на .cfm
:!echo %:p                        : вывести полное имя файла
:!echo %:p:h                      : вывести путь к файлу
<C-R>%                            : вставить имя файла (insert mode)
"%p                               : вставить имя файла (normal mode)
/<C-R>%                           : искать имя файла в тексте
----------------------------------------
# удаление без затирания содержимого буфера по умолчанию

"_d                               : то, что ты всегда ХОТЕЛ
"_dw                              : удалить слово (используется чОрная дыра)
----------------------------------------
# посчитать слова

g<C-G>
----------------------------------------
# пример установки своего подсвечивания синтаксиса
:syn match DoubleSpace "  "
:hi def DoubleSpace guibg=#e0e0e0
----------------------------------------
# настройка кнопок в зависимости от типа файла

:autocmd bufenter *.tex map <F1> :!latex %<CR>

:autocmd bufenter *.tex map <F2> :!xdvi -hush %<.dvi&<CR>
----------------------------------------
# чтение документов Ms-Word, нужен antiword

:autocmd BufReadPre *.doc set ro
:autocmd BufReadPre *.doc set hlsearch!
:autocmd BufReadPost *.doc %!antiword "%"
----------------------------------------