
net4me.net
Linux технологии, сети и электроника
Архив. Старые статьи.
Текстовый редактор linux - VIM
дата статьи где-то 2004-2007гг.
Linux технологии, сети и электроника
Архив. Старые статьи.
Текстовый редактор linux - VIM
дата статьи где-то 2004-2007гг.
Так как сам работаю с текстом только в vim, то опыта набралось немало.
Вот только память иногда меня все-таки подводит. =)
Поэтому сам для себя решил сделать несколько подсказок.
Ну и заодно рассказать самое основное.
Вводная часть у нас короткая, потому что про начало vim итак уже много документации.
vim test.txt и нажимаем i - и просто пишем.
u - отмена (назад в history)
:u - тоже отмена. U - тоже. Этих отмен как грязи! потом почитаете в манах.
:redo - повторить (вперед в history) оно же Ctrl+r
:wq - Сохранить и выйти
:w - просто сохранить данный файл.
:w ПУТЬ/ИМЯ - сохранить копию как.
:q! - не сохранять и выйти.
[[ - вверх файла
]] - вниз файла
Ну и кнопка Esc (выход из режима) у меня так же стерта, как и TAB =))Esc i - пишем
Esc v - выделяем
Esc : - командуем
Esc / - ищем
Для подсказок по командам есть кнопка TAB. Т.е. :TAB
и дальше TAB
TAB
TAB
до просветления =))):12345
- переходим на строку с номером 12345:set number - показать номера строк
:set nonumber - скрыть нумерацию строк
Ну и на :set TAB
тоже много что покажет.v
и влево или вправо стрелками.Shift+v
вся строка целиком.Ctrl+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
- то же самое, но горизонтально.Ctrl+w Ctrl+w
Ctrl+w и стрелка
на какое окно перемещаться. (про hjkl
я тут не говорю.)Ctrl+p
(то же самое делает и Ctrl+n
)v
дальше выделяем кусок.gu
если надо нижний регистр, или gU
если надо верхний регистр.%
- перейти к парной скобке.
#======================================
#
# Edit by Ben-Ja http://www.net4me.net
# On Tue 15 Dec 2009 04:19:49 PM MSK
#
#======================================
:!wc -l %
Что я сделал? Прально! Запустил внешнюю команду по отношению к данному файлу.:read !for x in `seq 0 10`; do echo $x; done
Вуаля! от 0 до 10 аккуратный столбец. И есть даже время написать об этом сюда. =)Перевод "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 "%"
----------------------------------------