Файл налаштування vim -. Vimrc (для Linux та Windows)
Продовжу збереження самих цікавих своїх конфігураційних файлів. Сьогодні прийшла черга файлу конфігурації для редактора vim -. Vimrc. Досить багато часу йому приділив, збираючи налаштування й розділяючи їх застосування для різних ОС (Windows і Linux). А чи буде він завершено остаточно - навіть і не знаю ![]()
Найкраще російськомовне керівництво (з прикладами) з налаштування Vim з зустрілися мені в інтернеті: Черговий HowTo по Vim .
"Настройка зовнішнього вигляду І БАЗОВІ НАЛАШТУВАННЯ РЕДАКТОРА set nocompatible" відключити режим сумісності з класичним Vi syntax on "включити підсвічування синтаксем filetype plugin indent on" визначати підсвічування на основі коду файлу set scrolloff = 3 "скільки рядків внизу і вгорі екрану показувати при скролінгу set background = dark "встановити колір фону colorscheme af" колірна схема за замовчуванням (при введенні в режимі команд з табуляції є автодоповнення імен схем) set wrap "перенос довгих рядків set lbr" переносити цілі слова set hidden "не вивантажувати буфер коли переключається на іншу set mouse = a "включає підтримку миші при роботі в терміналі (без GUI) set mousehide" приховувати миша під час введення тексту set showcmd "показувати незавершені команди в статусбаре (автодоповнення вводу) set matchpairs +=<:>" показувати збігаються дужки для HTML-тегів set showmatch "показувати першу парну дужку після введення другої set autoread" перечитувати змінені файли автоматично set t_Co = 256 "використовувати більше квітів у терміналі set confirm" використовувати діалоги замість повідомлень про помилки "" Автоматично перечитувати конфігурацію VIM після збереження autocmd! bufwritepost $ MYVIMRC source $ MYVIMRC "" Формат рядка стану set statusline =% F% m% r% h% w \ [FORM, ENC =% (& ff },%{& amp; encoding) \] \ [TYPE =% Y] \ [ASCII = \% 03.3b] \ [HEX = \% 02.2B] \ [POS =% 04l,% 04v] [% p%%] \ [LEN =% L] set laststatus = 2 "завжди показувати рядок стану" "підсвічувати таби і прогалини в кінці рядка set list" включити підсвічування set listchars = tab:> -, trail: - "встановити символи, якими буде здійснюватися підсвічування" "Стрибати на останню позицію при відкритті буфера autocmd! bufreadpost * call LastPosition () function! LastPosition () if line ("'\" ") & & line ("' \ "")<= line ('$') normal! `" endif endfunction set backspace = indent, eol, start "backspace обробляє відступи, кінці рядків set sessionoptions = curdir, buffers, tabpages" опції сесій - перейти в поточній директорії, використовувати буфери і таби set noswapfile "не використовувати своп-файл (у нього скидаються відкриті буфери ) set browsedir = current set visualbell "замість писку Біпер показувати це на екрані" При вставці фрагмента зберігає відступи set pastetoggle = "НАСТРОЙКИ ПОШУКУ set ignorecase" ics - пошук без урахування регістру символів set smartcase "- якщо шукане вираження містить символи у верхньому регістрі - шукає з урахуванням регістра, інакше - без урахування set hls "підсвічування результатів пошуку set incsearch" пошук фрагмента у міру його набору "НАСТРОЙКИ згортання блоків КОДА (фолдінг) set foldenable" включити фолдінг set foldmethod = syntax "визначати блоки на основі синтаксису файлу set foldcolumn = 3 "показати смугу для управління згортанням set foldlevel = 1" Перший рівень вкладеності відкрито, решта закриті let perl_folding = 1 "правильне згортання класів і функцій Perl let php_folding = 1" правильне згортання класів і функцій PHP set foldopen = all "автоматичне відкриття згорток при заході в них "НАСТРОЙКИ Відступ set shiftwidth = 4" розмір відступів set tabstop = 3 "ширина табуляції set softtabstop = 3" ширина 'м'якого' таба set autoindent "ai - включити автоотступи set cindent" ci - відступи в стилі З set expandtab " Перетворити табуляцію в прогалини set smartindent "Розумні відступи (наприклад, автоотступ після ()" Для зазначених типів файлів відключає заміну табів пробілами і змінює ширину відступу au FileType crontab, fstab, make set noexpandtab tabstop = 8 shiftwidth = 8 "Налаштування роботи з файлами" Кодування редактора за замовчуванням (при відкриванні всі файли приводяться до цієї кодуванні) if has ('win32') set encoding = cp1251 else set encoding = utf-8 set termencoding = utf-8 endif set ffs = unix, dos, mac "формат файлу за замовчуванням (впливає на закінчення рядків) - буде перебиратися в зазначеному порядку set fencs = utf-8, cp1251, koi8-r, cp866 "варіанти кодування файлу за умовчанням (всі файли за замовчуванням зберігаються в цьому кодуванні)" "Застосовувати типи файлів filetype on filetype plugin on filetype indent on "" Якщо зберігається файл є файлом скрипта - зробити його виконуваним "" au BufWritePost * if getline (1) = ~ "^#!.*/ bin / "| silent! chmod a + x% | endif "" При відкритті файлу задавати для нього відповідний 'компілятор' autocmd! BufEnter *. pl compiler perl "налаштування змінних ЗВУЧАННЯ if has ('win32') let $ VIMRUNTIME = $ HOME. '\ Programs \ Vim \ vim72' source $ VIMRUNTIME / mswin.vim else let $ VIMRUNTIME = $ HOME. '/. vim' endif "Настройка зовнішнього вигляду" "Встановлення шрифту (для Windows і Linux) if has ('gui') if has ('win32') set guifont = Lucida_Console : h10: cRUSSIAN:: else set guifont = Terminus \ 10 endif endif "" розгортає вікно редактора на весь екран if has ('gui') set guioptions-= T "відключити меню в GUI au GUIEnter *: set lines = 99999 columns = 99999 endif "НАСТРОЙКИ РЕЗЕРВНІ КОПІЮВАННЯ set backup" включити збереження резервних копій autocmd! bufwritepre * call BackupDir () "зробимо резервну копію перед записом буффера на диск" "Зберігати розумні резервні копії щоденно function! BackupDir ()" визначимо каталог для збереження резервної копії if has ('win32') let l: backupdir = $ VIMRUNTIME. ' \ backup 'else let l: backupdir = $ VIMRUNTIME.' / backup / '. \ substitute (expand ('%: p: h '),'^'.$ HOME,' ~ ','') endif "якщо каталог не існує, створимо його рекурсивно if! isdirectory (l: backupdir) call mkdir (l: backupdir, 'p', 0700) endif "перевизначимо каталог для резервних копій let & backupdir = l: backupdir" перевизначимо розширення файлу резервної копії let & backupext = strftime ('~% Y-% m-% d ~') endfunction "НАСТРОЙКИ перемикання розкладок клавіатури" "Взято у konishchevdmitry set keymap = russian-jcukenwin" налаштовуємо перемикання розкладок клавіатури по <C-^> set iminsert = 0 "розкладка за замовчуванням - англійська function! MyKeyMapHighlight () if & iminsert == 0 "при англійській розкладці статусний рядок поточного вікна буде сірого кольору hi StatusLine ctermfg = Gray guifg = Gray else" а при російській - зеленого. Hi StatusLine ctermfg = DarkGreen guifg = DarkGreen endif endfunction call MyKeyMapHighlight () "при старті Vim встановлювати колір статусної рядка au WinEnter *: call MyKeyMapHighlight ()" при зміні вікна оновлювати інформацію про розкладках cmap <silent> <CF> <C-^> "використовувати Ctrl + F для перемикання розкладок imap <silent > <CF> <C-^> X <Esc>: call MyKeyMapHighlight () <CR> a <CH> nmap <silent> <CF> a <C-^> <Esc>: call MyKeyMapHighlight () <CR> vmap <silent> <CF> <Esc> a <C-^> <Esc>: call MyKeyMapHighlight () <CR> gv "ВКЛЮЧЕННЯ АВТОДОПЛНЕНІЯ ВВЕДЕННЯ (omnifunct) autocmd FileType python set omnifunc = pythoncomplete # Complete autocmd FileType tt2html set omnifunc = htmlcomplete # CompleteTags autocmd FileType javascript set omnifunc = javascriptcomplete # CompleteJS autocmd FileType html set omnifunc = htmlcomplete # CompleteTags autocmd FileType css set omnifunc = csscomplete # CompleteCSS autocmd FileType xml set omnifunc = xmlcomplete # CompleteTags autocmd FileType php set omnifunc = phpcomplete # CompletePHP autocmd FileType c set omnifunc = ccomplete # Complete "налаштування гарячих клавіш" F2 - зберегти файл nmap <F2>: w <cr> vmap <F2> <esc>: w <cr> i imap <F2> <esc>: w <cr> i "F5 - перегляд списку буферів nmap <F5> <Esc>: buffers <cr> vmap <F5> <esc>: buffers <cr> imap <F5> <esc> <esc>: buffers <cr>" F6 - попередній буфер map <F6>: bp <cr> vmap <F6> <esc>: bp <cr> i imap <F6> <esc>: bp <cr> i "F7 - наступний буфер map <F7>: bn <cr> vmap <F7> <esc>: bn <cr> i imap <F7> <esc>: bn <cr> i "F9 - збереження файлу і запуск компіляції (make) map <F9>: w <cr>: make <cr> vmap <F9> <esc>: w <cr>: make <cr> i imap <F9> <esc>: w <cr>: make <cr> i "F10 - увімкнути-вимкнути браузер структури документа (TagList) map < F10>: TlistToggle <cr> vmap <F10> <esc>: TlistToggle <cr> imap <F10> <esc>: TlistToggle <cr> "F11 - увімкнути-вимкнути нумерацію рядків imap <F11> <Esc>: set <Space > nu! <CR> a nmap <F11>: set <Space> nu! <CR> "F12 - оглядач файлів (: Ex для стандартного оглядача, плагін NERDTree -" дерево каталогів) map <F12>: NERDTreeToggle <cr> vmap <F12> <esc>: NERDTreeToggle <cr> i imap <F12> <esc>: NERDTreeToggle <cr> i "" Зміна табів (вкладок) map <S-tab>: tabprevious <cr> nmap <S-tab>: tabprevious <cr> imap <S-tab> <ESC>: tabprevious <cr> i map <C-tab>: tabnext <cr> nmap <C-tab>: tabnext <cr> imap <C-tab> <ESC> : tabnext <cr> i nmap <Ct>: tabnew <cr> imap <Ct> <ESC>: tabnew <cr> nmap <Cw>: tabclose <cr> imap <Cw> <ESC>: tabclose <cr> "" Переключення кодувань файлу 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> "C (trl) + d - дублювання поточного рядка imap <Cd > <esc> yypi "Ctrl-пробіл для автодоповнення inoremap <C-space> <Cx> <Co>" Ce - коментувати / розкоментувати (за допомогою NERD_Comment) map <Ce>, ci nmap <Ce>, ci imap <Ce> <ESC>, cii "" Вирізати-копіювати-вставити через Ctrl vnoremap <CX> "+ x" CTRL-X - вирізати vnoremap <CC> "+ y" CTRL-C - копіювати map <CV> "+ gP" CTRL- V вставити під курсором "" Скасувати-повернути через Ctrl noremap <CZ> u "скасування дії inoremap <CZ> <CO> u noremap <CY> <CR>" повернути скасовану тому inoremap <CY> <CO> <CR>
Сподіваюся, комусь так згодиться!

Замість:
027. "« Стрибати на останню позицію при відкритті буфера
028.autocmd! bufreadpost * call LastPosition ()
029. function! LastPosition ()
030. if line ("'\" ») & & line («' \ »")<= line ('$')
031. normal! `"
032. endif
033. endfunction
куди розумніше робити:
au BufWinLeave *.* silent mkview
au BufWinEnter *.* silent loadview
В останньому випадку і стан фолдінг зберігається.
Перевірив на gvim 7.2 для windows - не працює, при відкритті файлу курсор завжди знаходиться на першому символі першого рядка. loadview часом не на своп Віма зав'язана? Він у мене відключений.
Спробую ще під лінухой будинку.