net4me.net

Linux технологии, сети и электроника

Архив. Старые статьи.
Текстовый редактор linux - VIM
дата статьи где-то 2004-2007гг.

Archive Vim

Текстовый редактор linux - VIM

VIM examples. Примеры и подсказки в работе с редактором vim

vim Так как сам работаю с текстом только в vim, то опыта набралось немало.
Вот только память иногда меня все-таки подводит. =)

Поэтому сам для себя решил сделать несколько подсказок.
Ну и заодно рассказать самое основное.
Вводная часть у нас короткая, потому что про начало vim итак уже много документации.

--------------------------------------------------

Основные действия в трех словах:

vim test.txt и нажимаем i - и просто пишем.
u - отмена (назад в history)
:u - тоже отмена. U - тоже. Этих отмен как грязи! потом почитаете в манах.
:redo - повторить (вперед в history) оно же Ctrl+r
:wq - Сохранить и выйти
:w - просто сохранить данный файл.
:w ПУТЬ/ИМЯ - сохранить копию как.
:q! - не сохранять и выйти.
[[ - вверх файла
]] - вниз файла
Ну и кнопка Esc (выход из режима) у меня так же стерта, как и TAB =))

Режимы:

В vim для разных действий есть свои отдельные режимы работы. (и это круто!)
Если открыли файл, это ещё не значит что мы его уже редактируем. Режим редактирования надо ещё включить.
Для тех, кто не понял, проще так:
Esc i - пишем
Esc v - выделяем
Esc : - командуем
Esc / - ищем
Для подсказок по командам есть кнопка TAB. Т.е. :TAB и дальше TAB TAB TAB до просветления =)))
Если сказано, что ошибка в строке с таким-то номером, то: :12345 - переходим на строку с номером 12345
:set number - показать номера строк
:set nonumber - скрыть нумерацию строк
Ну и на :set TAB тоже много что покажет.
--------------------------------------------------

Выделение текста:

Ну тут всё понятно.
v и влево или вправо стрелками.
или Shift+v вся строка целиком.
или Ctrl+v прямоугольник. часть текста.
--------------------------------------------------

Копирование и вставка текста:

Ну нажали мы v и выделили кусок. И что дальше?
y - скопировать
Shift+p - вставить.
ну и просто p - тоже вставить. Только мне P почему-то удобнее.
d - удалить (т.е. вырезать)
x - удалить.
--------------------------------------------------

Поиск и замена. Перейти на строку:

/ФРАЗА - поиск фразы во всем документе.
n - следующее найденное (вниз) N - предыдущее (вверх)
Замена во всем файле:
:% s /ЧТО_МЕНЯЕМ/НА_ЧТО_МЕНЯЕМ/g
в данном примере, % значит что весь файл. g значит что заменить надо не только первое совпадение, а все совпадения.
Если надо заменить не всё, а только часть текста, то выделяем кусок как показано выше и жмем ":" после этого включается командный режим и нам уже предлагают формулу для выделенного куска :'<,'> нам остается только дописать, что мы хотим с этим куском сделать.
А мы хотели поменять нецензурное слово на хорошее =)
:'<,'>s/windows/linux/g
* Дополнение: в следующий раз после того как поставили двоеточие, мы просто нажмем кнопку вверх и найдем нашу команду.
Правила замены такие же как и в любых регекспах.
Выделил я несколько строк, нажал двоеточие и написал s /$/<br>/ и конец каждой строки превратился в <br>.
^ - начало строки
$ - конец строки и так далее. (тут не статья про регулярные выражения.)
--------------------------------------------------

Окна и перемещение между окнами:

:vne ИМЯ_ФАЙЛА - поделить вертикально окно и открыть файл ИМЯ_ФАЙЛА во второй половине.
:new ИМЯ_ФАЙЛА - то же самое, но горизонтально.
:vs - один и тот же файл на 2 окна вертикально.
:sp - то же самое, но горизонтально.
перемещение между окнами vim - Ctrl+w Ctrl+w
или Ctrl+w и стрелка на какое окно перемещаться. (про hjkl я тут не говорю.)
--------------------------------------------------

Вводная часть на этом закончена. Дальше пойдут тонкости:

--------------------------------------------------

Автоматическое дополнение текста:

Вот это очень удобно.
Прям в режиме INSERT начинаем писать какое-то слово и нажимаем Ctrl+p (то же самое делает и Ctrl+n)
В итоге получаем список слов в этом документе начинающихся также.
Выбираем какое нужно и продолжаем работать.
--------------------------------------------------

Смена регистра выделеных символов:

v дальше выделяем кусок.
Потом gu если надо нижний регистр, или gU если надо верхний регистр.
--------------------------------------------------

Перемещение по тексту:

Стрелки. Да. Кнопки со стрелками. Их я чуствую (еще с Агата 7), а hjkl - нет.
Бывает очень удобно, если скобки в разных концах большого файла.
% - перейти к парной скобке.
--------------------------------------------------


#======================================
#
# Edit by Ben-Ja http://www.net4me.net
#    On Tue 15 Dec 2009 04:19:49 PM MSK
#
#======================================

Используем внешние команды при редактировании файла:

И вот мне захотелось узнать, сколько всего строк в файле. И я почему-то забыл посмотреть на статусную строку.
:!wc -l %
Что я сделал? Прально! Запустил внешнюю команду по отношению к данному файлу.
А вот еще интересный пример удобства:
Мне нужен вертикальный столбец цифр (массив делаю). И что, я буду сидеть и больше 100 раз вводить цифры?!
Хрена там! Ставлю курсор туда, куда надо вставить столбец с цифрами и даю команду:
:read !for x in `seq 0 10`; do echo $x; done
Вуаля! от 0 до 10 аккуратный столбец. И есть даже время написать об этом сюда. =)
Можно даже повесить это действие на кнопку.


Продолжение следует. =)

:wq





Перевод "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 без обратной косой черты
?                           : поиск НАЗАД!!! правда клева?!
----------------------------------------
# подстановки
:%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/^\
\{3}//                      : удалить блоки из 3-х пустых строк
:%s/^\
\+/\r/                      : сжать пустые строки
# ЕСЛИ ВЫ ТОЛЬКО ХОТИТЕ ЗНАТЬ ОДНУ ВЕЩЬ 
:'a,'bg/fred/s/dick/joe/igc : ОЧЕНЬ ПОЛЕЗНО


# дублирование колонок
:%s= [^ ]\+$=&&=            : дублировать последнюю колонку
:%s= \f\+$=&&=              : тоже самое
:%s= \S\+$=&&               : тоже самое
# память
:s/\(.*\):\(.*\)/\2 : \1/   : поменять местами поля, разделенные :
:%s/^\(.*\)\
\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/\
\+/\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\(\
\|\s\)*where               : обычный regexp
/\vcodes(\
|\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 "%"
----------------------------------------

Это лишь малая часть безграничных возможностей редактора vim. Добро пожаловать в бесконечный мир vim!

В связи с недееспособностью github и его держателей, выкладываю сюда свой vimrc:
https://net4me.net/old/vimrc
Для себя самого и всех желающих и интересующихся.
Да прибудет с вами сила vim!