" ~/.vimrc " "############################################################################### " {{{ НАСТРОЙКИ VIM "############################################################################### " {{{-------------------------- Общие настройки -------------------------------- " let &runtimepath.=',$SHELLRC/etc/vim/vim' set nocompatible " Несовместимость настроек с Vi set history=500 " Настройка истории set t_Co=256 " 256-цветный режим set nohidden " Выгружать буферы при переключении set novisualbell " Отключение визуального оповещения set t_vb= " Отключение визуального оповещения set tabpagemax=99 " Предел открытия вкладок set winminheight=0 " Минимальная высота окна set winminwidth=0 " Минимальная ширина окна set winaltkeys=menu " Включение Win/Alt set autochdir " Переходить в каталог файла set viewdir=$HOME/.shellrc/var/vim/view " Директория файлов состояний буферов " При выходе запоминать состояние файла au BufWinLeave * if bufname("") =~ "..*" | mkview | endif " Восстановление состояния function RestoreState() if getline(1) != "" if bufname("") =~ "..*" " !empty(expand("")) silent loadview endif endif endfunction " au BufWinEnter * call RestoreState() au BufWinEnter * set cursorline " Vimwiki тормозит au BufWinEnter *.wiki set nocursorline " Отключение zip let g:loaded_zipPlugin = 1 let g:loaded_zip = 1 " Режим терминала {{{ nmap ,s :split term://bash " }}} " }}}--------------------------------------------------------------------------- " {{{-------------------------- Работа с файловой системой---------------------- set autoread " Перечитывать файл при изменении set browsedir=current " Открывать в Ex директорию файла set wildignore=*.bak,*.~ " Не показывать временные файлы в меню " }}}--------------------------------------------------------------------------- " {{{-------------------------- Языки и кодировки ------------------------------ set helplang=ru,en " Языки справки set encoding=utf8 " Кодировка set termencoding=utf-8 " Кодировка текста по умолчанию " }}}--------------------------------------------------------------------------- " {{{-------------------------- Настройка мыши и клавиатуры -------------------- "set mouse=a " Мышь в текстовом режиме set ruler " Всегда показывать положение курсора set mousehide " Скрывать указатель мыши при наборе set scrolljump=7 " Вверх в режиме редактирования set scrolloff=7 " Вниз в режиме редактирования " Смена указателя в зависимости от режима let &t_SI = "\]50;CursorShape=1\x7" let &t_EI = "\]50;CursorShape=0\x7" if &term =~ "xterm\\|rxvt\\|xterm-256color" let &t_SI = "\033]12;orange\007" let &t_EI = "\033]12;darkgrey\007" autocmd VimLeave * :!echo -ne "\033]12;darkgrey\007" endif set backspace=indent,eol,start whichwrap+=<,>,[,] " }}}--------------------------------------------------------------------------- " {{{-------------------------- Редактирование текста -------------------------- syntax on " Подсветка синтаксиса filetype on " Определение типа файла filetype plugin on " Определение типа файла set nu " Нумерация строк set iminsert=0 " Раскладка по умолчанию - английская "match ErrorMsg '\%>80v.\+' " Подсветка выхода за 80-й символ " }}}--------------------------------------------------------------------------- " {{{-------------------------- Настройка табуляции ---------------------------- set tabstop=8 " Размер табуляции set softtabstop=8 " Табуляция set shiftwidth=8 " Размер сдвига блоков ( << , >> ) set listchars=tab:>.,trail:+,extends:#,nbsp:. " Показывать табуляцию и висящие пробелы " }}}--------------------------------------------------------------------------- " {{{-------------------------- Настройка отступов ----------------------------- set autoindent " Автоматическая расстановка отступов set smartindent " Умная расстановка отступов set cindent " Умная расстановка отступов set cin " Расстановка отступов в стиле С " }}}--------------------------------------------------------------------------- " {{{-------------------------- Настройка автодополнения ----------------------- set wildmenu " Меню при автодополнении команд set completeopt=menu " Показывать меню автодополнения set undolevels=1000 " Размер истории для отмены set wrap " Включаем перенос строк set linebreak " Перенос строк по словам, а не по буквам set complete="" " Автозавершение слов set complete+=. " Из текущего буфера set complete+=k " Из словаря set complete+=b " Из других открытых буферов set complete+=t " Из тегов " Автодополнение из файла с синтаксисом autocmd FileType * exec('set dict+='.$VIMRUNTIME.'/syntax/'.getbufvar("%","current_syntax").'.vim') " }}}--------------------------------------------------------------------------- " {{{-------------------------- Скрытие блоков кода ---------------------------- set foldcolumn=1 " Видимая колонка фолдинга " set foldmethod=syntax " Скрытие блоков текста " }}}--------------------------------------------------------------------------- " {{{-------------------------- Настройки поиска ------------------------------- set incsearch " Поиск по набору текста set hlsearch " Подсветка результатов поиска set wrapscan " Не останавливать поиск при достижении конца файла set ignorecase " Игнорировать регистр букв при поиске set smartcase " Учитывать регистр, если есть заглавные буквы " }}}--------------------------------------------------------------------------- " {{{-------------------------- Настройка резервного копирования --------------- set dir^=~/.shellrc/var/vim/swp/ " Директория сохранения swap-файлов set backup " Cоздавать .bak файлы set backupdir=~/.shellrc/var/vim/backup " Директория хранения бэкапов " Бэкапы в поддиректории function! BackupDir() " Каталог для сохранения резервной копии let l:backupdir=$HOME.'/.shellrc/var/vim/backup/'. \substitute(expand('%:p:h'), '^'.$HOME, '~', '') " Каталог не существует, создадим его рекурсивно if !isdirectory(l:backupdir) call mkdir(l:backupdir, 'p', 0700) endif " Каталог для резервных копий let &backupdir=l:backupdir " Расширение файла резервной копии let &backupext=strftime('.%d-%m-%Y.%T~') endfunction autocmd! bufwritepre * call BackupDir()" " }}}--------------------------------------------------------------------------- " {{{-------------------------- Настройка отмены действий ---------------------- set undodir=$SHELLRC/var/vim/undo set undofile set undolevels=1000 set undoreload=10000" " }}}--------------------------------------------------------------------------- " }}}########################################################################### " {{{ НАСТРОЙКИ ЦВЕТА " ############################################################################## " set background=dark " colo wombat_converted " Цветовая схема set background=light colo PaperColor " Грамматические ошибки " hi clear SpellBad " hi SpellBad cterm=bold ctermfg=160 ctermbg=NONE " Ошибки в заглавных буквах " hi clear SpellCap " hi SpellCap cterm=bold ctermfg=110 ctermbg=NONE " Стилистические ошибки " hi clear SpellLocal " hi SpellLocal cterm=bold ctermfg=120 ctermbg=NONE " hi Todo ctermfg=black ctermbg=221 " Метки TODO " hi MatchParen ctermfg=47 ctermbg=NONE " Парные скобки " hi Pmenu ctermfg=black ctermbg=lightgreen " Дополнение - Фон " hi PmenuSel ctermfg=black ctermbg=darkgreen " Дополнение - Элемент " hi CursorLine ctermfg=NONE ctermbg=234 cterm=NONE " Подсветка строки " set cursorline " hi Folded ctermfg=black ctermbg=gray " Скрытие блоков " hi FoldColumn ctermfg=black ctermbg=black " Скрытие блоков " hi Error ctermfg=NONE ctermbg=1 " Ошибки " hi ErrorMsg ctermfg=grey ctermbg=red " Сообщение об ошибке " hi TabLineFill ctermfg=black ctermbg=black " Строка вкладок " hi TabLineSel ctermfg=lightgreen ctermbg=NONE " Текущая вкладка " hi TabLine ctermfg=yellow ctermbg=NONE " Остальные вкладки " hi Comment ctermfg=darkgray " Цвет комментариев " hi Search ctermfg=black ctermbg=209 " Цвет найденного " hi SignColor ctermbg=64 ctermfg=lightyellow guibg=grey guifg=RoyalBlue3 " }}}########################################################################### " {{{ СТРОКА СОСТОЯНИЯ " ############################################################################## set title " set titlestring=\ %t\ (%{expand('%:p:h')}) set showcmd " Показывать размер выделенной области set ch=1 " Количество строк set cmdheight=1 " Коммандная строка в одну линию set laststatus=2 " Всегда отображать статусную строку " Функция отображения конструкции языка function! SyntaxItem() if synIDattr(synID(line("."),col("."),1),"name") == "" return " --- " else return synIDattr(synID(line("."),col("."),1),"name") endfunction set statusline=%#Question# " Цвет set statusline+=%t%m%r%h%w " Имя файла " set statusline+=%{strlen(GitBranch())?'@'.GitBranch().'.git':''} " Ветка Git set statusline+=%= " Выравн. справа " set statusline+=%#Function# " Цвет " set statusline+=%{functionator#GetName()} " Функция " set statusline+=%#Question# " Цвет " set statusline+=\ [ЛЕКСЕМА:\ %{SyntaxItem()}] " Лексема " set statusline+=%#WarningMsg# " Цвет set statusline+=%#Function# " Цвет set statusline+=\ [%{strlen(&ft)?&ft:'none'} " Тип файла set statusline+=\/\%{(&fenc==\"\"?&enc:&fenc)} " Кодировка " set statusline+=%#String# " Цвет set statusline+=\|%L:%03l,%03v\ %p%%] " Строка/столбец " }}}########################################################################### " {{{ ДОПОЛНИТЕЛЬНЫЕ ФУНКЦИИ " ############################################################################## " Автоматически делать файл исполняемым function ModeChange() if getline(1) =~ "^#!/" silent !chmod a+x endif endfunction au BufWritePost * call ModeChange() " Отображение декларации функции function GetDeclaration() if strlen(glob("~/.vim/+scripts/declarations/".&ft)) echo system("~/.vim/+scripts/declarations/".&ft." '".expand("")."' ".expand("%")) endif " elseif &ft == 'perl' " echo system("echo -n $(perldoc -i -f " " \ .expand("") " \ . " | head -1 | sed -r 's/^[[:space:]]+//g')") " endif endfunction nmap fd :call GetDeclaration() " }}}########################################################################### " {{{ КОМБИНАЦИИ КЛАВИШ " ############################################################################## " , как let mapleader="," nmap \ , " Открытие/закрытие блоков текста nnoremap za vnoremap za " Удаление конечных пробелов map S :%s/\s\+$//:let @/='' " Удаление дубликатов строк map D :%s/^\(.*\)\(\n\1\)\+$/\1/ " Выделение недавно редактированного текста nmap gV `[v`] " Отключение подсветки найденного nmap ,/ :nohlsearch " Перемещение курсора в режиме вставки imap imap imap imap " Показ строк, содержащих слово под курсором nmap g [I:let nr=input("> ")exe "normal " . nr . "[\t" " История комманд cmap " Omnicompletion imap " Открытие буфера с ошибками map co :copen " URxvt Home/End map! [7;7^ map [7;7^ map [8;8^ map! [8;8^ " Копирование от курсора до конца строки nmap Y y$ " Открытие руководства nmap imap vmap nmap fm " Сохранение файла nmap :up vmap :upi imap :upi " Включение режима вклейки set pastetoggle= "nmap `` Goto_next_sign " Проверка орфографии set wcm= menu Spell.ru :setlocal spell:setlocal spelllang=:setlocal spelllang=ru menu Spell.el :setlocal spell:setlocal spelllang=:setlocal spelllang=el menu Spell.en :setlocal spell:setlocal spelllang=:setlocal spelllang=en menu Spell.ru,en,el :setlocal spell:setlocal spelllang=:setlocal spelllang=ru,en,el menu Spell.off :setlocal nospell map :emenu Spell. " Навигация по ошибкам "nmap :cnzv:cc "vmap :cnzv:cc "imap :cnzv:cc "nmap :cpzv:cc "vmap :cpzv:cc "imap :cpzv:cc " Компиляция/запуск интерпретатора nmap :make vmap :make imap :make nmap :copen imap :copen imap :copen " Выполнение файла с параметрами nmap :call Run("") vmap :call Run("") imap :call Run("") function Run(...) if getline(1) =~ "^#!/" execute "!%:p" a:1 else execute "!\'".getcwd()."/%<\'" a:1 endif endfunction nmap :echo system("robodoc &"):echo "MAKING DOCUMENTATION" imap :echo system("robodoc &"):echo "MAKING DOCUMENTATION" vmap :echo system("robodoc &"):echo "MAKING DOCUMENTATION" " < & > - отступы для блоков текста vmap < >gv " Открытие новой вкладки " nmap :tabnew " imap :tabnew " vmap :tabnew " Редактирование командной строки как в Emacs cnoremap cnoremap " cnoremap cnoremap cnoremap cnoremap b cnoremap cnoremap f cnoremap cnoremap " Редактирование окружений (cib/dap/...) {{{ " Редактирование СЛЕДУЮЩЕГО окружения" nnoremap cinb f(ci( nnoremap canb f(ca( nnoremap cinB f{ci{ nnoremap canB f{ca{ nnoremap cin( f(ci( nnoremap can( f(ca( nnoremap cin{ f{ci{ nnoremap can{ f{ca{ nnoremap cin) f(ci( nnoremap can) f(ca( nnoremap cin} f{ci{ nnoremap can} f{ca{ nnoremap cin[ f[ci[ nnoremap can[ f[ca[ nnoremap cin] f[ci[ nnoremap can] f[ca[ nnoremap cin< f f f f f f f F F F F F F let g:vimwiki_html_header_numbering = 2 " Нумерация заголовков HTML со второго уровня let g:vimwiki_html_header_numbering_sym = '.' " Нумерация оканчивается точкой let g:vimwiki_user_htmls = 'ЖЖ/Календарь/today.html,ЖЖ/Календарь/timeline.html,ЖЖ/Календарь/statistic_words.html,ЖЖ/Календарь/statistic_tags.html,ЖЖ/Календарь/Карты/Челябинск.html,ЖЖ/Календарь/Карты/Дегтярск.html,ЖЖ/Календарь/Карты/Карабаш.html,ЖЖ/Календарь/Карты/Екатеринбург.html' let g:vimwiki_hl_cb_checked = 1 " Подсвечивать выполненные задания как комментарии let g:vimwiki_valid_html_tags = 'b,i,s,u,sub,sup,kbd,br,hr,embed,type,src,width,height,quality,object,param,p,cite' let g:vimwiki_file_exts = 'pdf,txt,doc,rtf,xls,php,zip,rar,7z,html,gz,mp3,ogg' "}}} " MRU"{{{ nmap m :MRU let MRU_File = $HOME . '/.shellrc/var/vim/mru/vim_mru_files' let MRU_Max_Entries = 150 let MRU_Exclude_Files = '^/tmp/.*\|^/var/tmp/.*\|.*COMMIT_EDITMSG.*\|viper.*' "}}} " Quickhl {{{ nmap qq (quickhl-toggle) vmap qq (quickhl-toggle) nmap qr (quickhl-reset) vmap qr (quickhl-reset) "}}} " CommentToggle"{{{ nmap CommentToggle imap CommentToggle vmap CommentToggle "}}} " Calendar"{{{ let g:calendar_navi_label = 'Пред,Тек,След' let g:calendar_mruler = 'Январь,Февраль,Март,Апрель,Май,Июнь,Июль,Август,Сентябрь' \.',Октябрь,Ноябрь,Декабрь' let g:calendar_wruler = 'Вс Пн Вт Ср Чт Пт Сб' let g:calendar_monday = 1 "}}} " Tasklist"{{{ let g:tlWindowPosition = 1 " Открывать окно снизу экрана let g:tlTokenList = ['TODO','FIXME','DONE','INPROGRESS','XXX','DEBUG','TMP','BUGS', 'knownBug'] "}}} " Timestamp {{{ let g:timestamp_regexp = '\v\C%(<%(Last %([cC]hanged?|modified)|Modified|Измен(е|ё)н)\s*:\s+)@<=.{2,3} \d{2} .{3} \d{4} \d{2}:\d{2}:\d{2}.*$|TIMESTAMP' " %c seems to be different on different systems. Use a full form instead. let g:timestamp_rep = '%a %d %b %Y %H:%M:%S' "}}} "Pummode"{{{ " Выбор вариантов дополнения курсорными клавишами call pummode#map('i', '', 0, 'j', '') call pummode#map('i', '', 0, 'k', '') call pummode#map('i', '', 0, '', '') "}}} "Yankring {{{ let g:yankring_history_file=".shellrc/var/vim/yankring/history" let g:yankring_min_element_length = 5 let g:yankring_map_dot = 0 let g:yankring_ignore_operator = 'g~ gu gU ! = gq g? > < zf g@ @:' let g:yankring_clipboard_monitor = 0 map y :YRShow "}}} "Errormarker {{{ let g:errormarker_errorgroup = "Error" let g:errormarker_warninggroup = "Todo" let g:errormarker_errortext = "⚫" let g:errormarker_warningtext = "⚑" "}}} " vim-sdcv {{{ let g:sdcv_save = 1 let g:sdcv_cmd = "sdcv -n --data-dir ~/.shellrc/etc/soft/sdcv/dictionaries/ " nmap fw ,qq:call Dict(expand("")) vmap fw ,qqgv:call Dict(@*) " }}} " javascript-libraries-syntax {{{ let g:used_javascript_libs = 'jquery' " }}} " neomake {{{ " When writing a buffer (no delay). call neomake#configure#automake('w') " let g:neomake_open_list = 2 " }}} " fff.vim {{{ let g:fff#split = "30vnew" let g:fff#split_direction = "nosplitbelow nosplitright" " }}} " }}}###########################################################################