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



