LinuxForum.Fans
Тема

Vi Improved

Автор: drag0n 37 сообщений 32906 просмотров 📌 закреплена
21.02.2010 18:12 #96

Раньше, на старом форуме, в этом разделе была тема, посвященная использованию редактора Vim - vim tips and tricks, вопросы пользователей и т.п. Предлагаю в этой теме заниматься тем же самым.
Для затравки выкладываю свой конфиг .vimrc:

text

" просматриваем ман-страницы в отдельном окне vim'a с подсвечиванием и т.п.
" Эта директива должна быть в начале файла .vimrc, иначе она перезапишет
" остальные настройки.
"-------------------------------------------------------------------------
" :Man man
"-------------------------------------------------------------------------
" Local mappings:
" CTRL-] Jump to the manual page for the word under the cursor.
" CTRL-T Jump back to the previous manual page.
"
:runtime! ftplugin/man.vim

set nobackup "не создавать файлы с резервной копией" set history=50 "сохранять 50 строк в истории командной строки set ruler "постоянно показывать позицию курсора set showcmd "показывать незавершенные команды set incsearch "показывать первое совпадение при наборе шаблона set nohlsearch "подсветка найденного set mouse=a "используем мышку set autoindent set smartindent set ai "при начале новой строки, отступ копируется из предыдущей set ignorecase "игнорируем регистр символов при поиске set background=dark "фон терминала - темный set ttyfast "коннект с терминалом быстрый set visualbell "мигаем вместо писка set showmatch "показываем соответствующие скобки set shortmess+=tToOI "убираем заставку при старте set rulerformat=%{strftime(\"%H:%M\ \")}%(%l,%c\ %p%%%) "формат строки состояния set wrap "не разрывать строку set linebreak "разрываем строку только между словами set tabstop=4 "размер табуляции set shiftwidth=4 "число пробелов, используемых при автоотступе set expandtab "Заменяем табуляции пробелами (use :retab dude) set t_Co=256 "включаем поддержку 256 цветов set wildmenu "красивое автодополнение set wcm=<Tab> "? set makeprg=make "программа для сборки - make set whichwrap=<,>,[,],h,l "не останавливаться курсору на конце строки set autowrite "автоматом записывать изменения в файл при переходе "к другому файлу set encoding=utf8 set termencoding=utf8 "Кодировка вывода на терминал set fileencodings=utf8,cp1251,koi8r "Возможные кодировки файлов set showcmd showmode "показывать незавершенные команды set splitbelow "новое окно появляется снизу set autochdir "текущий каталог всегда совпадает с содержимым активного окна set stal=2 "постоянно выводим строку с табами set tpm=100 "максимальное количество открытых табов set wak=yes "используем ALT как обычно, а не для вызова пункта мени set ar "перечитываем файл, если он изменился извне set dir=~/.vim/swapfiles "каталог для сохранения своп-файлов set noex "не читаем файл конфигурации из текущей директории set ssop+=resize "сохраняем в сессии размер окон Vim'а set complete+="" "настраиваем complete options set complete+=. set complete+=w set complete+=b set complete+=u set complete+=i set complete+=t set completeopt=menuone,longest "показываем меню автодополнения, если есть только одно автодополнение set list "Отображаем табуляции и начальные пробелы set listchars=tab:⋅⋅,trail:⋅,nbsp:⋅

colorscheme baycomb

if has ("gui_running") "если запущен GUI интерфейс: "распахиваем окно на весь экран "set lines=99999 columns=99999 "убираем меню и тулбар set guioptions-=m set guioptions-=T "убираем скроллбары set guioptions-=r set guioptions-=l "используем консольные диалоги вместо графических set guioptions+=c "антиалиасинг для шревтоф set antialias "прячем курсор set mousehide "Так не выводятся ненужные escape последовательности в :shell set noguipty

colorscheme darkspectrum "используем эту цветовую схему endif

"Don't use Ex mode, use Q for formatting map Q gq

syntax on "включаем подсветку синтаксиса

filetype plugin indent on "включаем автообнаружение типа файла

autocmd FileType text setlocal textwidth=80 "устанавливаем ширину в 80 знаков для текстовых файлов au FileType c,cc,cpp,h,hpp au BufWinEnter * let w:m1=matchadd('ErrorMsg', '\%>80v.\+', -1) "Подсвечиваем 81 символ и т.д.

"При редактировании файла всегда переходить на последнюю известную "позицию курсора. Если позиция ошибочная - не переходим. autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal! g`\"" | \ endif

" используем удобное omnicompletion " http://vim.wikia.com/wiki/C%2B%2B_code_completion "set tags+=~/.vim/tags/cpp " Где лежат списки для автозаполнения "set tags+=~/.vim/tags/qt4 set tags+=~/.vim/tags/csystags

let OmniCpp_NamespaceSearch = 1 " Еще какие-то опции let OmniCpp_GlobalScopeSearch = 1 let OmniCpp_ShowAccess = 1 let OmniCpp_MayCompleteDot = 1 let OmniCpp_MayCompleteArrow = 1 let OmniCpp_MayCompleteScope = 1 let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]

autocmd CursorMovedI * if pumvisible() == 0|pclose|endif " Автоматически открывать и закрывать autocmd InsertLeave * if pumvisible() == 0|pclose|endif " всплывающие меню и предыдущие окна

" Несколько удобных биндингов для С\С++ au FileType c,cc,cpp,h,hpp inoremap { {<CR>}<Esc>O au FileType c,cc,cpp,h,hpp inoremap #m int main(int argc, char * argv[]) {<CR>return 0;<CR>}<CR><Esc>2kO au FileType c,cc,cpp,h,hpp inoremap #d #define au FileType c,cc,cpp,h,hpp inoremap #e #endif /* */<Esc>hhi au FileType c,cc,cpp,h,hpp inoremap #" #include ""<Esc>i au FileType c,cc,cpp,h,hpp inoremap #< #include <><Esc>i au FileType c,cc,cpp,h,hpp inoremap #f /* FIXME: */<Esc>hhi au FileType c,cc,cpp,h,hpp inoremap #t /*TODO: */<Esc>hhi au FileType c,cc,cpp,h,hpp inoremap ;; <END>;<CR> au FileType c,cc,cpp,h,hpp inoremap " ""<Left> au FileType c,cc,cpp,h,hpp inoremap ' ''<Left> au FileType c,cc,cpp,h,hpp inoremap ( ()<Left> " Like as NetBeans au FileType c,cc,cpp,h,hpp inoremap (; ();<CR> au FileType c,cc,cpp,h,hpp inoremap ({ () {<CR>}<Esc>O au FileType c,cc,cpp,h,hpp inoremap [ []<Left> au FileType c,cc,cpp,h,hpp inoremap /* /* */<Esc>3ha " Биндинги для LaTeX au FileType tex inoremap %- %---------------------------------------------------------------------------<CR> au FileType tex inoremap %= %===========================================================================<CR> au FileType tex inoremap { {}<Left> au FileType tex inoremap \bei \begin{itemize}<CR> au FileType tex inoremap \ei \end{itemize}<CR> au FileType tex inoremap \bee \begin{enumerate}<CR> au FileType tex inoremap \ee \end{enumerate}<CR> au FileType tex inoremap \it \item

let &errorformat="%f:%l:%c: %t%*[^:]:%m,%f:%l: %t%*[^:]:%m," . &errorformat " формат строки с ошибкой для gcc

" Некоторые настройки для плагина TagList let g:Tlist_Show_One_File=1 " показывать информацию только по одному файлу let g:Tlist_GainFocus_On_ToggleOpen=1 " получать фокус при открытии let g:Tlist_Compact_Format=1 let g:Tlist_Close_On_Select=1 " закрывать окно после выбора тега let g:Tlist_Auto_Highlight_Tag=1 " подсвечивать тег, на котором сейчас находимся

"----------------------------------------------------------------------------------------------" " KEY BINDINGS " "----------------------------------------------------------------------------------------------"

" Close sth without saving map <Esc><Esc> :q!<CR>

" Auto adding by Tab (use Shift-TAB unstead) imap <Tab> <C-N>

" make ctags map <C-c>c :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>

" Открытие\закрытие новой вкладки imap <C-t> <Esc>:tabnew<CR>a nmap <C-t> :tabnew<CR>

" сохранить сессию в указанный файл map <C-k> :mksession! ~/.vim/lastSession.vim<CR> " восстановить ее из файла map <C-l> :source ~/.vim/lastSession.vim<CR>

" Так получим более полную информацию map <C-g> g<C-g>

" показать\спрятать номера строк imap <C-c>n <Esc>:set<Space>nu!<CR>a nmap <C-c>n :set<Space>nu!<CR>

" Выводим красиво оформленную man-страницу прямо в Vim " в отдельном окне (см. начало этого файла) nmap <S-k> :exe ":Man " expand("<cword>")<CR>

" Запуск проверки правописания menu Spl.next ]s menu Spl.prev [s menu Spl.word_good zg menu Spl.word_wrong zw menu Spl.word_ignore zG imap <C-c>s <Esc>:setlocal spell spelllang=ru,en<CR>a nmap <C-c>s :setlocal spell spelllang=ru,en<CR> imap <C-c>ss <Esc>:setlocal spell spelllang=<CR>a nmap <C-c>ss :setlocal spell spelllang=<CR> map <C-c>sm :emenu Spl.<TAB>

" добавим 'шапку' в начало файла au FileType c,cc,cpp,h,hpp map <C-c>h :exe "normal! i/* File: ".bufname("%")<CR>:exe "read !LC_TIME='us' date +\"* Created: \\%d \\%b, \\%Y\""<CR>:exe "normal oLicense: GNU GPLv3 "<CR>:exe "normal! oAuthor: h0rr0rr_drag0n "<CR>:exe "normal! oDescription: "<CR>:exe "normal! o/"<CR>kA

" Compile program using Makefile au FileType c,cc,cpp,h,hpp,s imap <C-c>m <Esc>:make!<CR>a au FileType c,cc,cpp,h,hpp,s nmap <C-c>m :make!<CR> " Use LaTeX to compile LaTeX sources au FileType tex map <C-c>m :!pdflatex -shell-escape "%"<CR>

" List of errors imap <C-c>l <Esc>:copen<CR> nmap <C-c>l :copen<CR>

" Запуск дебаггера imap <C-c>d <Esc>:!~/.vim/gdb.sh<CR> nmap <C-c>d :!~/.vim/gdb.sh<CR>

" Work with vim-projects nmap <silent> <C-c>p <Plug>ToggleProject

" work with taglist imap <C-c>t <Esc>:TlistToggle<CR>:TlistUpdate<CR> nmap <C-c>t :TlistToggle<CR>:TlistUpdate<CR>

" Create new project menu NewProj.C++ :!cp -r ~/.vim/mproj/c++/* .<CR>:e ./src/main.cpp<CR> menu NewProj.C :!cp -r ~/.vim/mproj/c/* .<CR>:e ./main.c<CR> menu NewProj.LaTeX :!cp -r ~/.vim/mproj/latex/* .<CR>:e ./report.tex<CR> map <C-c>np :emenu NewProj.<TAB>

Также рекомендую блог о Vim'е на велинуксе: http://welinux.ru/blog/45, думаю каждый найдет там немало интересного.

23.02.2010 11:17 #1060

Подсказки по VIM

text
# поиск
/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 "%" ----------------------------------------

23.02.2010 23:44 #1547

2 Полезные вещи
Выбор кодировки по F8

text
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set wildmenu
set wcm=<Tab>
menu Encoding.CP1251   :e ++enc=cp1251<CR>
menu Encoding.CP866    :e ++enc=cp866<CR>
menu Encoding.KOI8-U   :e ++enc=koi8-u<CR>
menu Encoding.UTF-8    :e ++enc=utf-8<CR>
map <F8> :emenu Encoding.<TAB>

Показать/Скрыть нумерацию по ^n

text
imap <C-n> <Esc>:set<Space>nu!<CR>a
nmap <C-n> :set<Space>nu!<CR>
08.03.2010 18:11 #10568
text

" Устанавливаем красивую цветовую схему
colorscheme desert256

" Включить подсветку синтакса syntax on

" Включить определение типа файла filetype on

" Включить загрузку плагинов для специфичного типа файлов filetype plugin on

" Включаем нумерацию строк set nu

" Выключаем авторасстановку комментариев au FileType * setl fo-=cro

" Включить автоматическую расстановку отступов set autoindent set smartindent

" Размер отступов и табуляции set shiftwidth=4 set tabstop=8 set softtabstop=4

" Использовать смесь пробелов и табуляций set noexpandtab

" Отключаем создание файлов бекапа и свопа set nobackup set nowritebackup set noswapfile

" Открыть/закрыть окно файлового обозревателя NERDTree imap <F9> <ESC>:NERDTreeToggle<CR> nmap <F9> :NERDTreeToggle<CR>

" Значение палитры цветов set t_Co=256

" Подсветка текущего файла (над курсором) let NERDTreeHighlightCursorline=1

" Перейти к следующему буферу нажатием CTRL-L (вправо) nnoremap <C-L> :bn!<CR>

" Перейти к предыдущему буферу нажатием CTRL-H (влево) nnoremap <C-H> :bp!<CR>

" Перейти к окну выше nnoremap <C-K> :wincmd k<CR>

" Перейти к окну ниже nnoremap <C-J> :wincmd j<CR>

" Запустить make вызывается нажатием F5 set makeprg=cd\ build\ &&\ make\ install imap <F5> <ESC>:wa<CR>:make<CR>:copen<CR> nmap <F5> :wa<CR>:make<CR>:copen<CR>

" Убрать окно ошибок (если таковые есть) нажатием F8 imap <F8> <ESC>:cclose<CR> nmap <F8> :cclose<CR>

" Перейти к следующей ошибке imap <F7> <ESC>:cnext<CR> nmap <F7> :cnext<CR>

" Перейти к предыдущей ошибке imap <F6> <ESC>:cprev<CR> nmap <F6> :cprev<CR>

" Команда запуска (вызывается нажатием F12) imap <F12> <ESC>:! ./demo<CR> nmap <F12> :! ./demo<CR>

Ну в общем заточено для программиста. Для комфортной работы советую установить плагины NERDTree и minibufexplorer.

23.04.2010 03:53 #31490

Редактор Vim позволяет настраивать отображение специальных символов. Для этого необходимо внести в конфигурационный файл ~/.vimrc следующие строки.

text

" установить режим отображения спец-символов
  set list
" установить спец-символы
  set listchars=eol:<символ_конца_строки>,tab:<начальный_символ_табуляции><последующие_символы_табуляции>,trail:<сивол_пробела_в_конце_строки>,nbsp:<символ_неразрывного_пробела>

Таким образом можно настроить отображение следующих спец-символов: конец строки, табуляция, пробел в конце строки, неразрывный пробел.

Я использовал следующие значения:

- eol:↲ (21b2);
- tab:→→ (2192);
- trail:· (00b7);
- nbsp:↔ (2194).

Для того, чтобы иметь возможность вводить указанные мной выше символы Юникода необходимо в режиме вставки нажать Ctrl + v, затем u и затем ввести шестнадцатиричный код (я указал его в скобках).

Вот что в конечном итоге вышло.



Оригинал поста здесь.

23.04.2010 04:35 #31492

Выбор подсветки синтаксиса по <F7>

text
set wildmenu
set wcm=<Tab>
menu Syntax.Pascal  :set syntax=pascal<CR>
menu Syntax.Ruby    :set syntax=ruby<CR>
menu Syntax.Vim    :set syntax=vim<CR>
menu Syntax.Bash    :set syntax=sh<CR>
map <F7> :emenu Syntax.<TAB>

Принцип ясен.

25.12.2010 10:58 #110348

подскажите,а как настроить подсветку синтаксиса,автодополнение для С++ в консольном Виме,именно в консоле а не эмуляторе консоле?
установил одну тему, тема - хороша, но когда перехожу в консоль(ctr+alt +F1) - темы нет а есть какоето безобразие(серый фон и т.д.)
да и бог с ней,с этой темой,мне нужночтобы была подсветка и автодополнение

25.12.2010 12:26 #110356
Чей_туфля? написал:
мне нужночтобы была подсветка и автодополнение

а сама консоль-то случаем не чёрно-белая?
что пишет env?
и попробуйте
[console]echo -e "\x1b[31;1mRED\x1b[32mGREEN\x1b[0m"[/console]
Да, ещё дайте ~/.vimrc, там часто стоит проверка терминала, и включение на монохром (при некоторых условиях).

25.12.2010 12:34 #110357

да, а писать надо грамотно:

(пробел - следующее слово с ошибкой, интер - варианты/добавить)

text
map    <Space>        ]s
map <Enter>        z=

if version >= 700 " По умолчанию проверка орфографии выключена. setlocal spell spelllang= setlocal nospell function ChangeSpellLang() if &spelllang =~ "en_us" setlocal spell spelllang=ru echo "spelllang: ru" elseif &spelllang =~ "ru" setlocal spell spelllang= setlocal nospell echo "spelllang: off" else setlocal spell spelllang=en_us echo "spelllang: en" endif endfunc

" map spell on/off for English/Russian map <S-F12> :call ChangeSpellLang()<CR> endif

25.12.2010 13:20 · отредактировано #110365
Чей_туфля? написал:
и автодополнение

что с автодополнением?
CTRL+N след. совпадение
CTRL+P прошлое совпадение

CTRL+X
F имя файла
L строка
D макрос
I текущий или вкл. файл
K слово из словаря
T слово из тезауруса
] таг
V командная строка Vim

У меня вообще как в MSVC - контекстное меню.

Что ещё нужно?

PS:
:h completion

12.01.2011 14:42 #116106

Начал переезжать на vim. От непривычки нужна одна маленькая функция и я ее ни как не могу найти. Нужно прокручивать построчно текст ( как в шеле CTRL+SHIFT+UP(DOWN) ). Можно конечно прокручивать скроллом мыши, но это ж vim smile хочется клавиатурный аналог. Помогите найти, или написать скрипт, а то я еще не вникал в vimscript. буду благодарен.

12.01.2011 14:56 · отредактировано #116109
BreatheInTheVoid написал:
Начал переезжать на vim. От непривычки нужна одна маленькая функция и я ее ни как не могу найти. Нужно прокручивать построчно текст ( как в шеле CTRL+SHIFT+UP(DOWN) ). Можно конечно прокручивать скроллом мыши, но это ж vim smile хочется клавиатурный аналог. Помогите найти, или написать скрипт, а то я еще не вникал в vimscript. буду благодарен.

Прокрутка
^f Прокрутка экрана вперед на полное окно. Откры- вается новое окно с текстом, расположенным ниже текущего окна
^d Прокрутка текста вниз на пол-окна. Открываются строки, расположенные ниже текущего окна
^b Прокрутка экрана назад на полное окно. Откры- вается новое окно с текстом, расположенным выше текущего окна
^d Прокрутка текста вверх на пол-окна. Открываются строки, расположенные выше текущего окна

оно?

а так:
http://vimdoc.sourceforge.net/htmldoc/scroll.html
и
http://rsusu1.rnd.runnet.ru/unix/ucomm/vi.html

12.01.2011 16:34 · отредактировано #116170

Нет, про это я знаю)) Нужна прокрутка окна на одну строку. Но спасибо за доки, с ними я придумал как легко написать плагин))

*edited

Даже плагин никакой не нужен, справился хоткеями. Для меня полезное дополнение к листаниям на экран и пол-экрана))
Может кому пригодится

" Single string scrolling
" Ctrl + j(Ctrl + Down) - One string down
" Ctrl + k(Ctrl + Up) - One string up
nmap <C-J> Lj
nmap <C-K> Hk
nmap <C-Down> Lj
nmap <C-Up> Hk


Попутный вопрос: Как кто справляется с копи\пастом в глобальный клипборд? Например чтобы выделил в визуальном режиме текст
и смог вставить в gedit например.

20.01.2011 00:43 #118769
BreatheInTheVoid написал:
От непривычки нужна одна маленькая функция и я ее ни как не могу найти. Нужно прокручивать построчно текст ( как в шеле CTRL+SHIFT+UP(DOWN) ).

Ctrl + e
Ctrl + y

Это, нет?

20.01.2011 10:04 #118814
BreatheInTheVoid написал:
Попутный вопрос: Как кто справляется с копи\пастом в глобальный клипборд? Например чтобы выделил в визуальном режиме текст
и смог вставить в gedit например.

как известно, в vim'е есть куча буферов обмена, a,b,c,d,e... Глобальный тоже есть, * (звёздочка). Вот только работает он далеко не всегда, зависит от того, с какими опциями собран VIM. Попробуйте. Если (как это часто бывает), звёздочка не работает, используйте файлы для обмена с другими редакторами.

Например mcedit умеет сохранять блок в файл ~/.mc/cedit/cooledit.clip командой C-Ins.

12.04.2011 09:20 · отредактировано #150819

вот текстовые файлы http://drbatty.ru/files/vim.rux/
надо скачать и читать в vim'е. Это русский перевод help'а.

PS: кодировка KOI8-R
++enc=koi8-r
ЕМНИП

10.01.2014 14:26 · отредактировано #359031

не могу(не знаю как называется) найти в vim'е опцию
когда жмакаешь {
то автоматом через строчку появляется }
а посередине вставляется #code

то есть нажал {

и получается что то вроде

text
operator {
   #code
}

адд
inoremap { {}<Left>
inoremap {<CR> {<CR>}<Esc>O
inoremap {{ {
inoremap {} {}

11.01.2014 17:39 #359547

возник вопрос.

как заставить vim применять подсветку синтаксиса сразу же после нажатия :w ?
ибо приходится делать выход и вход, напрягает.

в nano к примеру после нажатий Ctrl+o сразу разукрашивает

Войдите или зарегистрируйтесь, чтобы ответить.