|
|
|
Содержание подраздела:
Перевод "Best of Vim Tips".
Лучшие подсказки по Vim.
------------------------------------------------------------------------------
Составитель David Rayner (zzapper) 15 лет Vi + 3 года Vim и все еще учится.
Перевел 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 последовательные согласные
/\(fred\).*\(joe\).*\2.*\1
/^\([^,]*,\)\{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
?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/
:s/__date__/\=strftime("%c")/ : вставить дату
:%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2:
:%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:
:g/loc\|function/s/\d/\=submatch(0)+6/
:%s#txtdev\zs\d#\=submatch(0)+1#g
:h /\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 : увеличение чисел
: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/-2,/sid/+3s/sally/alley/gIC
----------------------------------------
----------------------------------------
*
% : найти соответствующую открывающую/закрывающую скобку {}[]()
. : повторить последнее изменение
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 чтоб перемещаться по списку)
----------------------------------------
:nmap ,s :source $VIM/_vimrc
:nmap ,v :e $VIM/_vimrc
----------------------------------------
:vmap sb "zdi<b><C-R>z</b><ESC> : добавить <b></b> вокруг ВИЗУАЛЬНО выбранного текста
:vmap st "zdi<?= <C-R>z ?><ESC> : добавить <?= ?> вокруг ВИЗУАЛЬНО выбранного текста
----------------------------------------
: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 , : список всех аббревиатур, начинающихся с ,
set wak=no : :h winaltkeys
<CR> : возврат каретки для маппинга
<ESC> : Escape
<LEADER> : обычно \
<BAR> : |
<BACKSPACE> : backspace
:nmap <leader>c :hi Normal guibg=#<c-r>=expand("<cword>")<cr><cr>
----------------------------------------
: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 -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
:set hidden : позволяет изменять буфер без сохранения текущего буфера
----------------------------------------
map <C-J> <C-W>j<C-W>_
map <C-K> <C-W>k<C-W>_
----------------------------------------
qq
твои сложные последоватеьлности команд
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 : копировать выделенное в буфер обмена
----------------------------------------
:set incsearch : переход к искомому слову во время печати этого слова
:set wildignore=*.o,*.obj,*.bak,*.exe : автоподстановка файлов по tab игнорирует эти файлы
:set shiftwidth=3 : для табов
:set vb t_vb=". : без звука
:set browsedir=buffer : GUI открыть файл использует текущий каталог
----------------------------------------
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
----------------------------------------
"a5yy
10j
"A5yy
----------------------------------------
[I : показывает строки, совпадающие со словом под курсором (super)
----------------------------------------
:redir @* : перенаправить команды в буфер обмена
:redir END : конец перенаправления
:redir >> out.txt : перенаправить в файл
"*yy : скопировать в буфер обмена
"*p : вставить из буфера обмена
:'a,'by* : скопировать область в буфер обмена
:%y* : скопировать весь буфер в буфер обмена
:nmap <leader>p :let @* = substitute(@*,'[^[:print:]]','','g')<cr>"*p
----------------------------------------
gq} : форматировать параграф
ggVGgq : форматировать весь файл
Vgq : текущую строку
: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
gvim -u NONE -U NONE -N
gvim -c 'normal ggdG"*p' c:/aaa/xp
gvim -c 's/^/\=@*/|hardcopy!|q!'
----------------------------------------
gvim -d file1 file2 : vimdiff (сравнение файлов)
dp : "перенести" отличие под курсором в другой файл
do : "получить" отличие под курсором из другого файла
----------------------------------------
в регулярных выражениях вы должны предварять косой чертой + (найти 1 или более)
в регулярных выражениях вы должны предварять косой чертой | (или)
в регулярных выражениях вы должны предварять косой чертой ( (группа)
в регулярных выражениях вы должны предварять косой чертой { (количество)
/fred\+/ : совпадает с fred/freddy но не с free
/\(fred\)\{2,3}/ : иллюстрируется, что было написано выше
----------------------------------------
/codes\(\n\|\s\)*where : обычный regexp
/\vcodes(\n|\s)*where : очень магический
----------------------------------------
<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 : список функций
:helptags /vim/vim63/doc : скомпилить все *.txt файлы помощи в /doc
:help add-local-help
----------------------------------------
map <f9> :w<CR>:!c:/php/php.exe %<CR>
map <f2> :w<CR>:!perl -c %<CR>
----------------------------------------
:new | r!perl
:new! x.out | r!perl
----------------------------------------
:%s/nubian/<C-V><C-M>&/g
:%s/nubian/<C-Q><C-M>&/g
:%s/nubian/^M&/g
:%s/nubian/\r&/g
----------------------------------------
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> : вставить имя файла в текущем каталоге
----------------------------------------
:'<,'>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)
----------------------------------------
<C-U> : удалить все, что было введено в этом режиме
<C-W> : удалить последнее слово
<HOME><END> : начало/конец строки
<C-LEFTARROW><C-RIGHTARROW> : переход по словам назад/вперед
<C-X><C-E>,<C-X><C-Y> : скрол в insert mode
----------------------------------------
:e main_<tab> : по табу
gf : открыть файл под курсором (normal mode)
main_<C-X><C-F> : подставить имя файла в текст (insert mode)
----------------------------------------
:runtime! syntax/2html.vim : преобразовать текстовый файл в html
:h 2html
----------------------------------------
:grep some_keyword *.c : получить список всех с-файлов, содержащих some_keyword
:cn : перейти к следующему вхождению
----------------------------------------
:set syntax=perl
:set syntax off
: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>
----------------------------------------
:autocmd BufReadPre *.doc set ro
:autocmd BufReadPre *.doc set hlsearch!
:autocmd BufReadPost *.doc %!antiword "%"
----------------------------------------
Более полную информацию по этой теме можно получить на новом сайте net4me.net
|
|