" vim: fdm=marker "{{{ Клавиши Leader и LocalLeader let mapleader="\" let maplocalleader="," " Таймауты для ввода комбинаций, использующих клавиши Leader и LocalLeader set timeout timeoutlen=5000 ttimeoutlen=100 "}}} " https://github.com/tpope/vim-pathogen call pathogen#infect() " https://github.com/junegunn/vim-plug " Менеджер плагинов " call plug#begin('~/.vim/plugged') " https://github.com/skywind3000/asyncrun.vim " Запуск асинхронных команд " Plug 'skywind3000/asyncrun.vim' " https://github.com/lyokha/vim-xkbswitch " Автоматическое переключение раскладки клавиатуры в режиме вставки " Plug 'lyokha/vim-xkbswitch' " https://github.com/itchyny/lightline.vim " Настраиваемая строка состояния " " https://github.com/taohexxx/lightline-buffer " Строка с названиями буферов " Plug 'itchyny/lightline.vim' | Plug 'taohexxx/lightline-buffer' " https://github.com/oblitum/rainbow " Разноцветные скобки " Plug 'oblitum/rainbow' " https://github.com/ntpeters/vim-better-whitespace " Подсветка лишних пробельных символов " Plug 'ntpeters/vim-better-whitespace' " https://github.com/wincent/terminus " Улучшенная поддержка терминала " Plug 'wincent/terminus' " https://www.vim.org/scripts/script.php?script_id=231 " Tab для логической разметки, Space для выравнивания " Plug 'dpc/vim-smarttabs' " https://github.com/ctrlpvim/ctrlp.vim " Поиск файлов и буферов " Plug 'ctrlpvim/ctrlp.vim' " https://github.com/easymotion/vim-easymotion " Быстрая навигация " Plug 'easymotion/vim-easymotion' " https://github.com/haya14busa/incsearch.vim " Поиск " Plug 'haya14busa/incsearch.vim' | Plug 'haya14busa/incsearch-easymotion.vim' " https://github.com/moll/vim-bbye " Удаление буферов с сохранением расположения окон " Plug 'moll/vim-bbye' " https://github.com/sstallion/vim-wildignore " Чтение масок файлов из файлов wildignore и suffixes " Plug 'sstallion/vim-wildignore' " https://github.com/tpope/vim-fugitive " Git " " Plug 'tpope/vim-fugitive' " https://github.com/airblade/vim-gitgutter " Отличия от Git в левой колонке " Plug 'airblade/vim-gitgutter' " https://github.com/neomake/neomake " Проверка синтаксиса в фоновом режиме " Plug 'neomake/neomake' " https://github.com/stephpy/vim-yaml " YAML " Plug 'stephpy/vim-yaml' " https://github.com/plasticboy/vim-markdown " Markdown " Plug 'plasticboy/vim-markdown' "https://github.com/habamax/vim-asciidoctor " AsciiDoctor " Plug 'habamax/vim-asciidoctor' " https://github.com/SirVer/ultisnips " Вставка фрагментов кода " Plug 'sirver/ultisnips' " https://github.com/honza/vim-snippets " Библиотека фрагментов кода " Plug 'honza/vim-snippets' " https://github.com/aklt/plantuml-syntax " Plantuml " Plug 'aklt/plantuml-syntax' " https://github.com/dhruvasagar/vim-table-mode " Создание таблиц " Plug 'dhruvasagar/vim-table-mode' " https://github.com/junegunn/vim-easy-align " Выравнивание строк " Plug 'junegunn/vim-easy-align' " https://github.com/henry4k/vim-fontzoom " Изменение размера шрифта " Plug 'henry4k/vim-fontzoom' " https://dmitryfrank.com/projects/vimprj " Опции для отдельных проектов " Plug 'elnull/vim-dfutil' | Plug 'elnull/vimprj' " https://github.com/vhdirk/vim-cmake " CMake " Plug 'vhdirk/vim-cmake' " Перечисление плагинов заканчивается здесь " call plug#end() "{{{ Базовые настройки " Включена подсветка синтаксиса " syntax on filetype plugin indent on " Отключен режим совместимости " set nocompatible " Проверка изменения файла другой программой " set autoread " Автоматическая запись перед make, внешними командами и т.п. " set autowrite " Показывать парные скобки " set showmatch " Размер табуляции " set tabstop=4 " Размер сдвига при нажатии на клавиши << и >> " set shiftwidth=4 " Количество пробелов, на которое будет заменена табуляция " set softtabstop=4 " Не заменять на пробелы " set noexpandtab " Визуальный перенос строк " set wrap " Визуальный перенос строк по словам, а не по буквам " set linebreak " Визуальный перенос строки с учётом отступов " set breakindent " Подсветка выражения, которое ищется в тексте " set hlsearch " Переход на найденный текст в процессе набора строки " set incsearch " Не останавливать поиск при достижении конца файла " set wrapscan " Игнорировать регистр букв при поиске, если в шаблоне нет заглавных букв " set smartcase " Копирует отступ от предыдущей строки " set autoindent " Автоматическая расстановка отступов " set smartindent " По умолчанию не сворачивать " set nofoldenable " Сворачивание согласно синтаксису " set foldmethod=syntax " Кодировка внутри Vim " set encoding=utf-8 " Кодировка терминала " set termencoding=utf-8 " Кодировка для сохраняемого файла " set fileencoding=utf-8 " Список предполагаемых кодировок в порядке предпочтения " set fileencodings=utf8,koi8r,cp1251,cp866,latin1,ucs-2le " Включаем мышку даже в текстовом режиме " " (без этого символы табуляции раскладываются в кучу пробелов) " set mouse=a " Модель поведения правой кнопки мыши " set mousemodel=popup " Тип переноса строк " set fileformat=unix " В графическом режиме: убрать меню " set guioptions-=m " В графическом режиме: убрать панель инструментов " set guioptions-=T " В графическом режиме: убрать прокрутку справа " set guioptions-=r " В графическом режиме: убрать прокрутку слева " set guioptions-=L " В графическом режиме: отключить графические вкладки " set guioptions-=e " Шрифт в графическом режиме " set guifont=PragmataPro\ 10 " Количество отображаемых строк над/под курсором " set scrolloff=6 " Количество отображаемых колонок слева/справа от курсора " set sidescrolloff=5 " Нумерация строк включена " set number " Нумерация строк абсолютная " set nornu " Использовать меню в статусной строке " set wildmenu " Клавиша для переключения между пунктами меню " set wildcharm= " Всегда отображать статусную строку для каждого окна " set laststatus=2 " Отображение набираемой в данный момент команды в правом нижнем углу экрана " set showcmd " Пробельные символы " set listchars=tab:>·,trail:~,extends:>,precedes:<,space:␣ " Включение отображения пробельных символов " set list " Копирование выравнивания от предыдущей строки " set copyindent "}}} "{{{ Раскладки клавиатуры let g:XkbSwitchEnabled = 1 let g:XkbSwitchNLayout = 'us' let g:XkbSwitchIMappings = ['ru'] let g:XkbSwitchIMappingsTr = { \ 'ru': \ {'<': 'qwertyuiop[]asdfghjkl;''zxcvbnm,.`/'. \ 'QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>?~@#$^&|', \ '>': 'йцукенгшщзхъфывапролджэячсмитьбюё.'. \ 'ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,Ё"№;:?/'} \ } let g:XkbSwitchSkipIMappings = { \ 'c' : ['.', '>', ':', '{', '/*', '/*'], \ 'cpp' : ['.', '>', ':', '{', '/*', '/*'], \ 'markdown' : ['[', ']', '{', '}', "'", '"', '`', '~'] \ } "}}} "{{{ Цветовая схема kolor https://github.com/zeis/vim-kolor/ " Enable italic. Default: 1 let g:kolor_italic=0 " Enable bold. Default: 1 let g:kolor_bold=1 " Enable underline. Default: 0 let g:kolor_underlined=0 " Gray 'MatchParen' color. Default: 0 let g:kolor_alternative_matchparen=0 " White foreground 'MatchParen' color that might work better with some terminals. Default: 0 let g:kolor_inverted_matchparen=0 colorscheme kolor highlight SpecialKey guifg=#585858 guibg=NONE gui=none highlight NonText guifg=#585858 guibg=#2e2d2b gui=none if &t_Co > 255 highlight SpecialKey ctermfg=240 ctermbg=none cterm=none highlight NonText ctermfg=240 ctermbg=235 cterm=none endif " Разноцветные скобки для определённых типов файлов autocmd FileType bash,python,vim,html,c,cpp,objc,objcpp call rainbow#load() "}}} "{{{ Подсветка лишних пробельных символов let g:better_whitespace_enabled=1 let g:strip_whitelines_at_eof=1 let g:strip_whitespace_on_save=0 autocmd FileType javascript,c,cpp,java,html,ruby,vim,python EnableStripWhitespaceOnSave "}}} "{{{1 Статусная строка " Всегда отображать статусную строку для каждого окна " set laststatus=2 " Всегда отображать перечень буферов " set showtabline=2 " \ [ 'fugitive', 'readonly', 'filename', 'modified' ] ], " \ 'fugitive': '%{exists("*fugitive#head")?fugitive#head():""}', " \ 'fugitive': '(exists("*fugitive#head") && ""!=fugitive#head())', " Lightline let g:lightline = { \ 'colorscheme': 'wombat', \ 'active': { \ 'left': [ [ 'filetype' ], \ [ 'mode', 'paste' ], \ [ 'readonly', 'filename', 'modified' ] ], \ 'right': [ [ 'character', 'lineinfo', 'percent' ], [ 'fileformat', 'fileencoding' ], [ 'neomake_errors', 'neomake_warnings' ] ] \ }, \ 'tabline': { \ 'left': [ [ 'bufferinfo' ], \ [ 'separator' ], \ [ 'bufferbefore', 'buffercurrent', 'bufferafter' ], ], \ 'right': [ [ 'close' ], ], \ 'separator': { 'left': '|', 'right': '|' }, \ }, \ 'component': { \ 'readonly': '%{&filetype=="help"?"":&readonly?"⭤":""}', \ 'modified': '%{&filetype=="help"?"":&modified?"+":&modifiable?"":"-"}', \ 'character': '%04B', \ 'separator': '|', \ }, \ 'component_function': { \ 'mode': 'LightlineMode', \ 'bufferinfo': 'lightline#buffer#bufferinfo', \ }, \ 'component_visible_condition': { \ 'readonly': '(&filetype!="help"&& &readonly)', \ 'modified': '(&filetype!="help"&&(&modified||!&modifiable))', \ 'neomake_errors': '(exists(":Neomake") && ((get(neomake#statusline#QflistCounts(), "E", 0) + get(neomake#statusline#LoclistCounts(), "E", 0)) > 0)', \ 'neomake_warnings': '(exists(":Neomake") && ((get(neomake#statusline#QflistCounts(), "W", 0) + get(neomake#statusline#LoclistCounts(), "W", 0)) > 0)', \ 'character': '1' \ }, \ 'component_expand': { \ 'buffercurrent': 'lightline#buffer#buffercurrent', \ 'bufferbefore': 'lightline#buffer#bufferbefore', \ 'bufferafter': 'lightline#buffer#bufferafter', \ 'neomake_errors': 'LightLineNeomakeErrors', \ 'neomake_warnings': 'LightLineNeomakeWarnings', \ }, \ 'component_type': { \ 'buffercurrent': 'tabsel', \ 'bufferbefore': 'raw', \ 'bufferafter': 'raw', \ }, \ 'separator': { 'left': '', 'right': '' }, \ 'subseparator': { 'left': '|', 'right': '|' }, \ 'tabline_separator': { 'left': '', 'right': '' }, \ 'tabline_subseparator': { 'left': '|', 'right': '|' }, \ } function! LightlineMode() return expand('%:t') ==# '__Tagbar__' ? 'Tagbar': \ expand('%:t') ==# 'ControlP' ? 'CtrlP' : \ &filetype ==# 'unite' ? 'Unite' : \ &filetype ==# 'vimfiler' ? 'VimFiler' : \ &filetype ==# 'vimshell' ? 'VimShell' : \ winwidth(0) > 60 ? lightline#mode()[0:2] : '' endfunction function! LightLineNeomakeErrors() if !exists(":Neomake") || ((get(neomake#statusline#QflistCounts(), "E", 0) + get(neomake#statusline#LoclistCounts(), "E", 0)) == 0) return '' endif return 'E:'.(get(neomake#statusline#LoclistCounts(), 'E', 0) + get(neomake#statusline#QflistCounts(), 'E', 0)) endfunction function! LightLineNeomakeWarnings() if !exists(":Neomake") || ((get(neomake#statusline#QflistCounts(), "W", 0) + get(neomake#statusline#LoclistCounts(), "W", 0)) == 0) return '' endif return 'W:'.(get(neomake#statusline#LoclistCounts(), 'W', 0) + get(neomake#statusline#QflistCounts(), 'W', 0)) endfunction "1}}} "{{{ Настройка CtrlP let g:ctrlp_custom_ignore = { \ 'dir': '\v[\/](\.(git|hg|svn)|\_site)$', \ 'file': '\v\.(exe|so|dll|class|png|jpg|jpeg)$', \ 'link': 'some_bad_symbolic_links', \ } let g:ctrlp_follow_symlinks = 1 if executable('ag') " Use ag over grep set grepprg=ag\ --nogroup\ --nocolor " Use ag in CtrlP for listing files. Lightning fast and respects .gitignore let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""' " ag is fast enough that CtrlP doesn't need to cache let g:ctrlp_use_caching = 0 endif " Use a leader instead of the actual named binding nmap p :CtrlP " Easy bindings for its various modes nmap bb :CtrlPBuffer nmap bm :CtrlPMixed nmap bs :CtrlPMRU" "1}}} "{{{1 Перемещение по буферам nmap bc :Bdelete nmap bn :bnext! nmap bp :bprev! " map b to navigate through tabs for c in range('1', '9') exec "nmap b".c." :b!".c."" endfor "1}}} " Переход к последней позиции при открытии файла " if has("autocmd") au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal g'\"" | endif endif " Открыть файл настроек " nmap vie :e $MYVIMRC " Перезагрузить файл настроек " nmap vis :so $MYVIMRC augroup reload_vimrc autocmd! autocmd BufWritePost $MYVIMRC nested source $MYVIMRC augroup END "{{{ Neomake " Запускать после записи или чтения файла if exists(":Neomake") call neomake#configure#automake('rw', 1000) endif function! LocationNext() try lnext catch try | lfirst | catch | endtry endtry endfunction " e для перехода к следующей ошибке или предупреждению " nnoremap ee :call LocationNext() let g:neomake_make_maker = { \ 'exe': 'make', \ 'args': ['-j', 'auto'], \ 'errorformat': '%f:%l:%c: %m', \ } "}}} " Отмена автоматического комментирования кода при вставке из буфера " autocmd FileType * setlocal formatoptions-=cro " Запрет TAB для markdown " autocmd FileType markdown set expandtab autocmd FileType cmake setlocal ts=2 sts=2 sw=2 et "{{{ Проверка орфографии для русского и английского setlocal spell spelllang=ru,en set spellsuggest=9 function! ChangeSpellLang() if &spelllang == "ru,en" setlocal spell spelllang=en echo "spelllang: en" elseif &spelllang == "en" setlocal spell spelllang=ru echo "spelllang: ru" elseif &spelllang == "ru" setlocal nospell spelllang= echo "spelllang: off" else setlocal spell spelllang=ru,en echo "spelllang: ru,en" endif endfunc " Выбор набора языков для проверки орфографии " map :call ChangeSpellLang() imap :call ChangeSpellLang() " Выбор альтернатив для исправления " imap s map z= "}}} "{{{ Переключение варианта нумерации строк function! ChangeNumbering() if &number if &rnu set nornu else set nonumber endif else set number set rnu endif endfunc map # :call ChangeNumbering() "}}} "{{{ Меню для выбора кодировки файла menu Encoding.Open\ as\ KOI8-R :e ++enc=koi8-r menu Encoding.Open\ as\ CP1251 :e ++enc=cp1251 menu Encoding.Open\ as\ CP866 :e ++enc=cp866 menu Encoding.Open\ as\ LATIN1 :e ++enc=latin1 menu Encoding.Open\ as\ UCS-2LE :e ++enc=ucs-2le menu Encoding.Open\ as\ UTF-8 :e ++enc=utf-8 menu Encoding.Convert\ to\ UTF-8 :set fenc=utf-8 map :emenu Encoding. "}}} "{{{ Easymotion " Не включать команды по умолчанию " let g:EasyMotion_do_mapping = 0 " Умный регистр " let g:EasyMotion_smartcase = 1 " ec{char} для перехода к {char} " map ec (easymotion-bd-f) nmap ec (easymotion-overwin-f) " s{char}{char} для перехода к {char}{char} " nmap s (easymotion-overwin-f2) " Переход к строке " map eg (easymotion-bd-jk) nmap eg (easymotion-overwin-line) " Переход к слову " map ew (easymotion-bd-w) nmap ew (easymotion-overwin-w) " Навигация по строкам " map el (easymotion-lineforward) map ej (easymotion-j) map ek (easymotion-k) map eh (easymotion-linebackward) " Повторить последний переход map er (easymotion-repeat) " Замена стандартного поиска по тексту " map / (easymotion-sn) " omap / (easymotion-tn) " These `n` & `N` mappings are options. You do not have to map `n` & `N` to EasyMotion. " Without these mappings, `n` & `N` works fine. (These mappings just provide " different highlight method and have some other features ) " map n (easymotion-next) " map N (easymotion-prev) "}}} "{{{ Incsearch map / (incsearch-forward) map ? (incsearch-backward) map g/ (incsearch-stay) map z/ (incsearch-easymotion-/) map z? (incsearch-easymotion-?) map zg/ (incsearch-easymotion-stay) "}}} "{{{ UltiSnips let g:UltiSnipsExpandTrigger="" let g:UltiSnipsJumpForwardTrigger="" let g:UltiSnipsJumpBackwardTrigger="" let g:UltiSnipsEditSplit="vertical" "}}} "{{{ Table Mode let g:table_mode_corner='|' let g:table_mode_corner_corner='+' let g:table_mode_header_fillchar='=' "}}} "{{{ Easy align " Start interactive EasyAlign in visual mode (e.g. vipga) xmap ga (EasyAlign) " Start interactive EasyAlign for a motion/text object (e.g. gaip) nmap ga (EasyAlign) "}}} "{{{ AsciiDoctor " What to use for HTML, default `asciidoctor`. let g:asciidoctor_executable = 'asciidoctor' " What extensions to use for HTML, default `[]`. let g:asciidoctor_extensions = ['asciidoctor-diagram'] " What to use for PDF, default `asciidoctor-pdf`. let g:asciidoctor_pdf_executable = 'asciidoctor-pdf' " What extensions to use for PDF, default `[]`. let g:asciidoctor_pdf_extensions = ['asciidoctor-diagram'] " What to use for DOCX, default `pandoc`. " The DOCX 'compilation' process is to generate `docbook` using " `g:asciidoctor-executable` and then to generate DOCX out of `docbook` " using `pandoc`. let g:asciidoctor_pandoc_executable = 'pandoc' " List of filetypes to highlight, default `[]` let g:asciidoctor_fenced_languages = ['python', 'c', 'javascript', 'sh', 'tex'] " Function to create buffer local mappings fun! AsciidoctorMappings() nnoremap oo :AsciidoctorOpenRAW nnoremap op :AsciidoctorOpenPDF nnoremap oh :AsciidoctorOpenHTML nnoremap ox :AsciidoctorOpenDOCX nnoremap ch :Asciidoctor2HTML nnoremap cp :Asciidoctor2PDF nnoremap cx :Asciidoctor2DOCX endfun " Call AsciidoctorMappings for all `*.adoc` and `*.asciidoc` files augroup asciidoctor au! au BufEnter *.adoc,*.asciidoc call AsciidoctorMappings() augroup END "}}} call vimprj#init() "{{{ Чтение настроек для текущего компьютера из каталога $HOME/.vim/hosts let s:host_vimrc = $HOME . '/.vim/hosts/' . hostname() . '.vimrc' if filereadable(s:host_vimrc) execute 'source ' . s:host_vimrc endif "}}}