Dotfiles.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

943 lines
33 KiB

" ~/.vimrc
"
" vim: foldmethod=marker
"
"###############################################################################
" {{{ НАСТРОЙКИ 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 " Директория файлов состояний буферов
set modeline " Настройка modeline
set modelineexpr " Настройка modeline
set lazyredraw " Перерисовывать экран только выполнения макроса
silent set suffixesadd " Включать расширения при переходе к файлу по gf
" При выходе запоминать состояние файла
au BufWinLeave * if bufname("") =~ "..*" | mkview | endif
au BufWinEnter * call RestoreState()
au BufWinEnter * set cursorline
" Отключение zip
let g:loaded_zipPlugin = 1
let g:loaded_zip = 1
" Enable quickfix filtering
packadd cfilter
" }}}---------------------------------------------------------------------------
" {{{-------------------------- Работа с файловой системой----------------------
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 = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]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 " Раскладка по умолчанию - английская
set virtualedit=all " Перемещение курсора по всему экрану
"match ErrorMsg '\%>80v.\+' " Подсветка выхода за 80-й символ
match ErrorMsg /\s\+\%#\@<!$\| \+\ze\t/ " Подсветка висящих пробелов
" }}}---------------------------------------------------------------------------
" {{{-------------------------- Настройка табуляции ----------------------------
set tabstop=8 " Размер табуляции
set softtabstop=8 " Табуляция
set shiftwidth=8 " Размер сдвига блоков ( << , >> )
" Показывать табуляцию и висящие пробелы (:set list)
set listchars=tab:▸·,space,nbsp:␣,trail:+,eol,precedes,extends
" }}}---------------------------------------------------------------------------
" {{{-------------------------- Настройка отступов -----------------------------
filetype plugin indent on
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 inccommand=nosplit " Поиск и замена по ходу набора
set hlsearch " Подсветка результатов поиска
set wrapscan " Не останавливать поиск при достижении конца файла
set ignorecase " Игнорировать регистр букв при поиске
set smartcase " Учитывать регистр, если есть заглавные буквы
set wildignorecase " Не учитывать регистр при дополнении команд
" }}}---------------------------------------------------------------------------
" {{{-------------------------- Настройка резервного копирования ---------------
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 termguicolors
set background=light
colo PaperColor_Edit
" Грамматические ошибки
" 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=238 ctermbg=160 " Ошибки
hi ErrorMsg ctermfg=255 ctermbg=160 " Сообщение об ошибке
" hi TabLineFill ctermfg=black ctermbg=black " Строка вкладок
" hi TabLineSel ctermfg=lightgreen ctermbg=NONE " Текущая вкладка
" hi TabLine ctermfg=yellow ctermbg=NONE " Остальные вкладки
" hi Search ctermfg=black ctermbg=209 " Цвет найденного
" hi SignColor ctermbg=64 ctermfg=lightyellow guibg=grey guifg=RoyalBlue3
" Более заметные комментарии
hi Comment ctermbg=225 ctermfg=16
" OLOLO-отладка
autocmd BufEnter * syntax match OloloDebugging /^.*@@@@.*$/ containedin=ALL
hi OloloDebugging ctermbg=34 ctermfg=231
" }}}###########################################################################
" {{{ СТРОКА СОСТОЯНИЯ
" ##############################################################################
set title
" set titlestring=\ %t\ (%{expand('%:p:h')})
set showcmd " Показывать размер выделенной области
set ch=1 " Количество строк
set cmdheight=1 " Коммандная строка в одну линию
set laststatus=2 " Всегда отображать статусную строку
" set statusline=%#Question# " Цвет
" set statusline+=%t%m%r%h%w " Имя файла
" set statusline+=%= " Выравн. справа
" set statusline+=%#Function# " Цвет
" set statusline+=\ [%{strlen(&ft)?&ft:'none'} " Тип файла
" set statusline+=\/\%{(&fenc==\"\"?&enc:&fenc)} " Кодировка
" set statusline+=\|%L:%03l,%03v\ %p%%] " Строка/столбец
" }}}###########################################################################
" {{{ КОМБИНАЦИИ КЛАВИШ
" ##############################################################################
" , как <leader>
let mapleader=","
nmap \ ,
" Автоматическое перемещение по длинным параграфам построчно
nnoremap <expr> k (v:count == 0 ? 'gk' : 'k')
nnoremap <expr> j (v:count == 0 ? 'gj' : 'j')
" Открытие/закрытие блоков текста
nnoremap <Space> za
vnoremap <Space> za
" Удаление конечных пробелов
map <leader>S :%s/\s\+$//<cr>:let @/=''<CR>
" Удаление дубликатов строк
map <leader>D :%s/^\(.*\)\(\n\1\)\+$/\1/<CR>
" Выделение недавно редактированного текста
nmap gV `[v`]
" Отключение подсветки найденного
nmap <silent> ,/ :nohlsearch<CR>
" Перемещение курсора в режиме вставки
" imap <C-h> <left>
" imap <C-j> <down>
" imap <C-k> <up>
" imap <C-l> <right>
" Показ строк, содержащих слово под курсором
nmap <leader>g [I:let nr=input("> ")<Bar>exe "normal " . nr . "[\t"<CR>
" История комманд
cmap <C-P> <Up>
" Omnicompletion
imap <S-Tab> <C-X><C-O>
" Открытие буфера с ошибками
map <leader>co :copen<CR>
map <leader>l :lopen<CR>
" URxvt Home/End
map! <Esc>[7;7^ <C-Home>
map <Esc>[7;7^ <C-Home>
map <Esc>[8;8^ <C-End>
map! <Esc>[8;8^ <C-End>
" Копирование от курсора до конца строки
nmap Y y$
" Открытие руководства
nmap <F1> <S-K><cr>
imap <F1> <esc><S-K><cr>
vmap <F1> <esc><S-K><cr>
nmap fm <F1>
" Сохранение файла
nmap <F2> :up<cr><Right>
vmap <F2> <esc>:up<cr>i<Right>
imap <F2> <esc>:up<cr>i<Right>
" Включение режима вклейки
set pastetoggle=<F6>
"nmap `` <Plug>Goto_next_sign
" Проверка орфографии
set wcm=<Tab>
menu Spell.ru :setlocal spell<CR>:setlocal spelllang=<CR>:setlocal spelllang=ru<CR>
menu Spell.el :setlocal spell<CR>:setlocal spelllang=<CR>:setlocal spelllang=el<CR>
menu Spell.en :setlocal spell<CR>:setlocal spelllang=<CR>:setlocal spelllang=en<CR>
menu Spell.ru,en,el :setlocal spell<CR>:setlocal spelllang=<CR>:setlocal spelllang=ru,en,el<CR>
menu Spell.off :setlocal nospell<CR>
map <F6> :emenu Spell.<TAB>
" Навигация по ошибкам
"nmap <F8> :cn<cr>zv:cc<cr>
"vmap <F8> <esc>:cn<cr>zv:cc<cr>
"imap <F8> <esc>:cn<cr>zv:cc<cr>
"nmap <S-F8> :cp<cr>zv:cc<cr>
"vmap <S-F8> <esc>:cp<cr>zv:cc<cr>
"imap <S-F8> <esc>:cp<cr>zv:cc<cr>
" Компиляция/запуск интерпретатора
nmap <F9> :make<cr>
vmap <F9> <esc>:make<cr>
imap <F9> <esc>:make<cr>
nmap <S-F9> :copen<cr>
imap <S-F9> <esc>:copen<cr>
nmap <F11> :echo system("robodoc &")<CR>:echo "MAKING DOCUMENTATION"<CR>
imap <F11> :echo system("robodoc &")<CR>:echo "MAKING DOCUMENTATION"<CR>
vmap <F11> :echo system("robodoc &")<CR>:echo "MAKING DOCUMENTATION"<CR>
" < & > - отступы для блоков текста
vmap < <gv
vmap > >gv
" Открытие новой вкладки
" nmap <C-t> :tabnew<cr>
" imap <C-t> <ESC>:tabnew<cr>
" vmap <C-t> <ESC>:tabnew<cr>
" Редактирование командной строки как в Emacs
cnoremap <C-B> <Left>
cnoremap <C-E> <End>
" cnoremap <C-F> <Right>
cnoremap <C-N> <Down>
cnoremap <C-P> <Up>
cnoremap <ESC>b <S-Left>
cnoremap <ESC><C-B> <S-Left>
cnoremap <ESC>f <S-Right>
cnoremap <ESC><C-F> <S-Right>
cnoremap <ESC><C-H> <C-W>
" Редактирование макросов ("X,@)
nn <leader>@ :<c-u><c-r><c-r>='let @'.v:register.' =
\ '.string(getreg(v:register))<cr><c-f><left>
" }}}###########################################################################
" {{{ НАСТРОЙКИ ФОРМАТОВ ФАЙЛОВ
" ##############################################################################
" Terraform {{{
" Вызов terraform fmt при сохранении файла
let g:terraform_fmt_on_save = 1
" }}}
" }}}###########################################################################
" {{{ НАСТРОЙКИ ПЛАГИНОВ
" ##############################################################################
" Pathogen {{{
" Отключенные плагины
let g:pathogen_disabled = ['colorsupport', 'timelog']
execute pathogen#infect('+plugins/{}')
" call pathogen#runtime_append_all_bundles()
call pathogen#helptags()
" }}}
" Airline {{{
let g:airline_left_sep = ''
let g:airline_right_sep = ''
let g:airline_linecolumn_prefix = '/ '
let g:airline_branch_prefix = '⇵ '
let g:airline_paste_symbol = ''
let g:airline_whitespace_symbol = '∅'
let g:airline_section_c = '%t%m%r%h%w'
let g:airline_section_z = '%L:%03l,%03v %p%%'
let g:airline_extensions = ['neomake', 'whitespace', 'coc']
" enable/disable fugitive/lawrencium integration
let g:airline_enable_branch=1
" enable/disable syntastic integration
let g:airline_enable_syntastic=0
" enable/disable tagbar integration
let g:airline_enable_tagbar=0
" enable modified detection
let g:airline_detect_modified=1
" enable paste detection
let g:airline_detect_paste=1
" enable iminsert detection
let g:airline_detect_iminsert=1
" enable whitespace detection
let g:airline_detect_whitespace=1 "icon and message (default)
" change the default theme
let g:airline_theme='cool'
" enable/disable usage of patched powerline font symbols
let g:airline_powerline_fonts=0
let g:airline#extensions#coc#enabled = 1
let airline#extensions#coc#error_symbol = 'E:'
let airline#extensions#coc#warning_symbol = 'W:'
let airline#extensions#coc#stl_format_err = '%E{[%e(#%fe)]}'
let airline#extensions#coc#stl_format_warn = '%W{[%w(#%fw)]}'
" define the set of text to display for each mode.
let g:airline_mode_map = { 'i': '+', 'n': ' ', 'v': '⇄', 'V': '⇄', '': '⇅', 'R': '✂', 'c': '#', 's': 'SELECT', '^S': 'S-BLOCK', 'S': 'S-LINE' }
" }}}
" VimWiki"{{{
let wiki = {}
if has("win32unix")
let wiki.path = '/d/etc/wiki/'
let wiki.path_html = '/z/wiki/'
else
let wiki.path = '~/.shellrc/vimwiki/wiki/'
let wiki.path_html = '~/.shellrc/vimwiki/html/'
endif
let wiki.template_path = '~/.shellrc/vimwiki/style/'
let wiki.template_default = 'template'
let wiki.template_ext = '.html'
let wiki.css_name = 'css/vimwiki.css'
let wiki.auto_export = 0
let wiki.nested_syntaxes = {
\'prolog': 'prolog'
\, 'bash': 'sh'
\, 'tcl': 'tcl'
\, 'scheme': 'scheme'
\, 'haskell': 'haskell'
\, 'erlang': 'erlang'
\, 'bnf': 'abnf'
\, 'plain': 'txt'
\, 'diff': 'diff'
\, 'javascript': 'javascript'
\, 'vim': 'vim'
\, 'latex': 'tex'}
let wiki.diary_rel_path = 'ЖЖ/Календарь/'
let wiki.diary_index = 'Календарь'
let wiki.diary_header = 'Календарь'
let wiki.diary_link_count = 4
let wiki.maxhi = 0 " Не проверять ссылки (на больших файлах вики тормозит)
let g:vimwiki_list = [wiki]
let g:vimwiki_hl_headers = 1
let g:vimwiki_fold_lists = 1 " Скрытие блоков
let g:vimwiki_camel_case = 0 " Не использовать ВикиСлова
let g:vimwiki_list_ignore_newline = 0 " Преобразовывать переводы строк в </ br>
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'
let g:vimwiki_listsyms = ' ○◐●✓'
"}}}
" MRU"{{{
nmap <leader>m :MRU<cr>
let MRU_File = $HOME . '/.shellrc/var/vim/mru/vim_mru_files'
let MRU_Add_Menu = 0
let MRU_Max_Entries = 150
let MRU_Exclude_Files = '^/tmp/.*\|^/var/tmp/.*\|MERGE_MSG\|.*COMMIT_EDITMSG.*\|viper.*\|_cheat\|bash-fc.*\|vifm\.rename.*\|tmpprms2en3.yml'
"}}}
" Quickhl {{{
nmap <leader>qq <Plug>(quickhl-toggle)
vmap <leader>qq <Plug>(quickhl-toggle)
nmap <leader>qr <Plug>(quickhl-reset)
vmap <leader>qr <Plug>(quickhl-reset)
"}}}
" vim-commentary {{{
nmap <C-C> <Plug>Commentary
nmap <C-C><C-C> <Plug>CommentaryLine
imap <C-C> <ESC><Plug>Commentary
vmap <C-C> <Plug>Commentary
"}}}
" vim-signify {{{
let g:signify_sign_add = '→'
let g:signify_sign_delete = '←'
let g:signify_sign_delete_first_line = '×'
let g:signify_sign_change = '~' " '⮂'
let g:signify_sign_change_delete = g:signify_sign_change . g:signify_sign_delete_first_line
" }}}
" 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', '', 1, "<C-j>", '<TAB>')
call pummode#map('i', '', 1, "<C-k>", '<C-p>')
call pummode#map('i', '', 0, '<CR>', '<C-y>')
"}}}
"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 <leader>y :YRShow<cr>
"}}}
"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<ESC>:call Dict(expand("<cword>"))<CR>
vmap fw ,qq<Esc>gv:call Dict(@*)<CR>
" }}}
" 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
let g:neomake_haskell_enabled_makers = ["hlint"]
" }}}
" nnn.vim {{{
let g:nnn#command = 'nnn -C'
" Disable default mappings
let g:nnn#set_default_mappings = 0
" Start nnn in the current file's directory
nnoremap <leader>n :NnnPicker %:p:h<CR>
" Floating window (neovim)
let g:nnn#layout = { 'window': { 'width': 0.3, 'height': 0.9, 'highlight': 'Debug', 'xoffset': 0.07, 'yoffset': 0.5 } }
let g:nnn#action = { 't': 'tab split' }
" }}}
" vim-easymotion {{{
map <leader><leader>f <Plug>(easymotion-bd-f)
nmap <leader><leader>f <Plug>(easymotion-overwin-f)
hi EasyMotionTarget ctermbg=155 ctermfg=black cterm=bold
hi EasyMotionTarget2First ctermbg=155 ctermfg=black cterm=bold
hi EasyMotionTarget2Second ctermbg=119 ctermfg=black cterm=bold
" }}}
" startify {{{
let g:startify_bookmarks = [
\ {'r': 'README.md'},
\ {'t': 'TODO.wiki'},
\ ]
let g:startify_commands = [
\ {'d': ['Open current directory (GUI)', 'silent exec "!x-open ."']},
\ {'m': ['Make current project ($ make)', 'make']},
\ ]
let g:ascii = systemlist('git-cal --unicode 2>/dev/null | head -n 10 | grep -v fatal || echo')
let g:ascii = systemlist('git-cal --unicode 2>/dev/null | head -n 10 | grep -v fatal || echo')
" ++todo
" let g:ascii = systemlist('git-cal --unicode 2>/dev/null | head -n 10 | grep -v fatal || echo; echo; todolist | head | sed "s/^/ /; s/:.*TODO:/@TODO:/" | column -t -s @ ')
let g:startify_custom_header = g:ascii
let g:startify_fortune_use_unicode = 1
let g:startify_session_dir = "$HOME/.shellrc/var/vim/sessions" " Директория файлов сессий
autocmd User Startified setlocal buflisted
" }}}
" cheat40 {{{
let g:cheat40_use_default = 0
" }}}
" floaterm {{{
let g:floaterm_keymap_toggle = ',s'
let g:floaterm_width = 0.8
let g:floaterm_height = 0.7
let g:floaterm_position = 'center'
let g:floaterm_borderchars = ['─', '│', '─', '│', '┌', '┐', '┘', '└']
let g:floaterm_autoclose = 1
" Фокус на основное окно
tnoremap <leader>w <C-\><C-n><C-w>w
hi FloatermBorder ctermbg=none ctermfg=236
" }}}
" vim-toggle {{{
let g:toggle_map = '<C-g>'
" }}}
" vim-matchup {{{
let g:matchup_matchparen_stopline = 400
let g:matchup_matchparen_offscreen = {'method': 'popup'}
hi MatchParen ctermbg=193 ctermfg=53 guibg=#bdfc8d
" }}}
" vim-peekaboo {{{
let g:peekaboo_window = 'vertical botright 40new'
let g:peekaboo_compact = 0
" }}}
" committia.vim {{{
let g:committia_min_window_width = 80
" }}}
" Coc {{{
let g:coc_global_extensions = ['coc-json', 'coc-yaml', 'coc-docker']
let g:coc_suggest_disable = 1
command! Lopen normal! :CocDiagnostics<CR>
nnoremap <silent><leader>L :CocDiagnostics<CR>
nnoremap <silent> K :call <SID>show_documentation()<CR>
function! s:show_documentation()
if (index(['vim','help'], &filetype) >= 0)
execute 'h '.expand('<cword>')
else
call CocAction('doHover')
endif
endfunction
" Highlight the symbol and its references when holding the cursor.
" autocmd CursorHold * silent call CocActionAsync('highlight')
" Introduce function text object
" NOTE: Requires 'textDocument.documentSymbol' support from the language server.
xmap if <Plug>(coc-funcobj-i)
xmap af <Plug>(coc-funcobj-a)
omap if <Plug>(coc-funcobj-i)
omap af <Plug>(coc-funcobj-a)
" GoTo code navigation.
nmap <silent> gD :<C-u>call CocActionAsync('jumpDefinition', 'split')<CR>
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gI <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)
nmap <silent> <leader>rf <Plug>(coc-refactor)
nmap <silent> <leader>rn <Plug>(coc-rename)
nmap <silent> <leader>qf :CocFix<CR>
nmap <silent> <leader>f :CocOutline<CR>
" use [h and ]h to navigate between holes
nnoremap <silent> [h :<C-U>call CocActionAsync('diagnosticPrevious', 'hint')<CR>
nnoremap <silent> ]h :<C-U>call <SID>JumpToNextHole()<CR>
" <leader>d to perform a pattern match, <leader>n to fill a hole
nnoremap <silent> <leader>d :<C-u>set operatorfunc=<SID>WingmanDestruct<CR>g@l
nnoremap <silent> <leader>N :<C-u>set operatorfunc=<SID>WingmanFillHole<CR>g@l
nnoremap <silent> <leader>r :<C-u>set operatorfunc=<SID>WingmanRefine<CR>g@l
nnoremap <silent> <leader>c :<C-u>set operatorfunc=<SID>WingmanUseCtor<CR>g@l
nnoremap <silent> <leader>a :<C-u>set operatorfunc=<SID>WingmanDestructAll<CR>g@l
function! s:JumpToNextHole()
call CocActionAsync('diagnosticNext', 'hint')
endfunction
function! s:GotoNextHole()
" wait for the hole diagnostics to reload
sleep 500m
" and then jump to the next hole
normal 0
call <SID>JumpToNextHole()
endfunction
function! s:WingmanRefine(type)
call CocAction('codeAction', a:type, ['refactor.wingman.refine'])
call <SID>GotoNextHole()
endfunction
function! s:WingmanDestruct(type)
call CocAction('codeAction', a:type, ['refactor.wingman.caseSplit'])
call <SID>GotoNextHole()
endfunction
function! s:WingmanDestructAll(type)
call CocAction('codeAction', a:type, ['refactor.wingman.splitFuncArgs'])
call <SID>GotoNextHole()
endfunction
function! s:WingmanFillHole(type)
call CocAction('codeAction', a:type, ['refactor.wingman.fillHole'])
call <SID>GotoNextHole()
endfunction
function! s:WingmanUseCtor(type)
call CocAction('codeAction', a:type, ['refactor.wingman.useConstructor'])
call <SID>GotoNextHole()
endfunction
" Use tab for trigger completion with characters ahead and navigate.
" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
" other plugin before putting this into your config.
inoremap <silent><expr> <TAB>
\ pumvisible() ? "\<C-n>" :
\ <SID>check_back_space() ? "\<TAB>" :
\ coc#refresh()
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-X>\<C-O>"
inoremap <silent><expr> <C-l>
\ pumvisible() ? coc#_select_confirm() :
\ coc#expandableOrJumpable() ? "\<C-r>=coc#rpc#request('doKeymap', ['snippets-expand-jump',''])\<CR>" :
\ <SID>check_back_space() ? "\<TAB>" :
\ coc#refresh()
function! s:check_back_space() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
" Use <C-l> for trigger snippet expand.
" imap <C-l> <Plug>(coc-snippets-expand)
" Use <C-j> for select text for visual placeholder of snippet.
vmap <C-j> <Plug>(coc-snippets-select)
" Use <C-j> for jump to next placeholder, it's default of coc.nvim
let g:coc_snippet_next = '<c-j>'
" Use <C-k> for jump to previous placeholder, it's default of coc.nvim
let g:coc_snippet_prev = '<c-k>'
" }}}
" HaskellConcealPlus {{{
nnoremap <silent> <leader>. :call pointfree#suggestions()<CR>
vnoremap <silent> <leader>. :call pointfree#selection()<CR>
" }}}
" HaskellConcealPlus {{{
" [ ] 'q' option to disable concealing of scientific constants (e.g. π)
" [ ] '℘' option to disable concealing of powerset function
" [ ] '𝐒' option to disable String type to 𝐒 concealing
" [ ] '𝐓' option to disable Text type to 𝐓 concealing
" [ ] '𝐄' option to disable Either/Right/Left to 𝐄/𝑅/𝐿 concealing
" [ ] '𝐌' option to disable Maybe/Just/Nothing to 𝐌/𝐽/𝑁 concealing
" [X] 'A' option to not try to preserve indentation
" [ ] 's' option to disable space consumption after ∑,∏,√ and ¬ functions
" [X] '*' option to enable concealing of asterisk with '⋅' sign
" [X] 'x' option to disable default concealing of asterisk with '×' sign
" [X] 'E' option to enable ellipsis concealing with ‥ (two dot leader)
" [X] 'e' option to disable ellipsis concealing with … (ellipsis sign)
" [ ] '⇒' option to disable `implies` concealing with ⇒
" [ ] '⇔' option to disable `iff` concealing with ⇔
" [X] 'r' option to disable return (η) and join (µ) concealing
" [ ] 'b' option to disable bind (left and right) concealing
" [ ] 'f' option to enable formal (★) right bind concealing
" [ ] 'c' option to enable encircled b/d (ⓑ/ⓓ) for right and left binds
" [ ] 'h' option to enable partial concealing of binds (e.g. »=)
" [ ] 'C' option to enable encircled 'm' letter ⓜ concealing for fmap
" [X] 'l' option to disable fmap/lift concealing with ↥
" [X] '↱' option to disable mapM/forM concealing with ↱/↰
" [X] 'w' option to disable 'where' concealing with "due to"/∵ symbol
" [X] '-' option to disable subtract/(-) concealing with ⊟
" [ ] 'I' option to enable alternative ':+' concealing with with ⨢
" [ ] 'i' option to disable default concealing of ':+' with ⅈ
" [ ] 'R' option to disable realPart/imagPart concealing with ℜ/ℑ
" [X] 'T' option to enable True/False constants concealing with bold 𝐓/𝐅
" [X] 't' option to disable True/False constants concealing with italic 𝑇/𝐹
" [ ] 'B' option to disable Bool type to 𝔹 concealing
" [ ] 'Q' option to disable Rational type to ℚ concealing
" [ ] 'Z' option to disable Integer type to ℤ concealing
" [ ] 'N' option to disable Natural, Nat types to ℕ concealing
" [ ] 'D' option to disable Double type to 𝔻 concealing
" [ ] 'C' option to disable Complex type to ℂ concealing
" [ ] '1' option to disable numeric superscripts concealing, e.g. x²
" [ ] 'a' option to disable alphabet superscripts concealing, e.g. xⁿ
let hscoptions="Ax*Eerl↱w-Tt"
" }}}
" {{{ goc
lua << EOF
local goc = require'nvim-goc'
goc.setup({ verticalSplit = false })
vim.api.nvim_command("command! Goc normal! :lua require('nvim-goc').Coverage()<CR>")
vim.api.nvim_command("command! Gocc normal! :lua require('nvim-goc').ClearCoverage()<CR>")
vim.api.nvim_command("command! Gocw normal! :lua cf()<CR><CR>")
_G.cf = function()
local cb = function(path)
if path then
vim.cmd(":silent exec \"!xdg-open " .. path .. "\"")
end
end
goc.Coverage(nil, cb)
end
EOF
" }}}
" }}}###########################################################################
" {{{ ВВОД КОМАНД В ДРУГИХ РАСКЛАДКАХ
" ##############################################################################
runtime +layouts/russian.vim
runtime +layouts/greek.vim
runtime +layouts/coptic.vim
" }}}###########################################################################
" {{{ ДОПОЛНИТЕЛЬНЫЕ ФУНКЦИИ
" ##############################################################################
runtime vimrc.functions
lua << EOF
require'range-highlight'.setup{}
EOF
" FTerm
" lua << EOF
" require'FTerm'.setup({
" border = 'single',
" dimensions = {
" height = 0.7,
" width = 0.8,
" },
" })
" vim.api.nvim_set_keymap('n', '<leader>s', '<CMD>lua require("FTerm").toggle()<CR>', {noremap = true, silent = true})
" vim.api.nvim_set_keymap('t', '<leader>s', '<C-\\><C-n><CMD>lua require("FTerm").toggle()<CR>', {noremap = true, silent = true})
" EOF
" }}} ##########################################################################