X-Git-Url: https://git.rmz.io/dotfiles.git/blobdiff_plain/42278c5d4c91b9c7662291463e6d43c2de3fcdb0..db442aa73a2d50ef84222f5d035997d37eeb12a4:/vim/vimrc diff --git a/vim/vimrc b/vim/vimrc index 6cc50e7..402a980 100644 --- a/vim/vimrc +++ b/vim/vimrc @@ -4,6 +4,11 @@ if has('python3') | endif " space is leader let g:mapleader = " " +" disable netrw +"FIXME: it currently breaks vim-fugitive 2023-04-11 +" instead of opening Git status, a netrw buffer opens instead +let g:loaded_netrwPlugin = 1 + " runtimepath {{{1 set runtimepath ^=$XDG_CONFIG_HOME/vim set runtimepath +=$XDG_CONFIG_HOME/vim/after @@ -61,7 +66,7 @@ if !has("nvim") let g:nord_cursor_line_number_background = 0 let g:nord_bold_vertical_split_line = 0 "}}} - Plug 'sirver/ultisnips' " {{{2 + Plug 'sirver/ultisnips' " replaced by lua-snip {{{2 Plug 'honza/vim-snippets' let g:UltiSnipsEditSplit = 'vertical' let g:UltiSnipsSnippetDirectories = [ expand("$XDG_CONFIG_HOME/vim/ultisnips") ] @@ -94,17 +99,113 @@ if !has("nvim") au InsertEnter * exec "inoremap " . g:UltiSnipsExpandTrigger . " =g:UltiSnips_Complete()" let g:UltiSnipsListSnippets="" "}}} - Plug 'vim-utils/vim-man' " {{{2 + Plug 'vim-utils/vim-man' " replaced by builtin {{{2 let g:man_width = 80 "}}} + Plug 'airblade/vim-gitgutter' " replaced by gitsigns {{{ + " prefer other signs such as ycm diags + let g:gitgutter_sign_priority = 1 + " don't clobber other signs + let g:gitgutter_sign_allow_clobber = 0 + "}}} + Plug 'justinmk/vim-sneak' " replaced by leap {{{2 + let g:sneak#streak = 1 + let g:sneak#target_labels = "aoeuisnthdpylrcgfqjkxzmwvz" " dvorak + let g:sneak#use_ic_scs = 1 " follow 'ignorecase' and 'smartcase' + + " sneaky f and t + nmap f Sneak_f + nmap F Sneak_F + xmap f Sneak_f + xmap F Sneak_F + omap f Sneak_f + omap F Sneak_F + nmap t Sneak_t + nmap T Sneak_T + xmap t Sneak_t + xmap T Sneak_T + omap t Sneak_t + omap T Sneak_T + "}}} + Plug 'shougo/unite.vim' " replaced by telescope {{{2 + function! UniteSetup() + call unite#filters#matcher_default#use(['matcher_fuzzy']) + call unite#custom#profile('default', 'context', { + \ 'winheight': 20, + \ 'direction': 'botright' + \ }) + + nnoremap [unite] + nmap u [unite] + nnoremap [unite]u :UniteResume + nnoremap [u :UnitePrevious + nnoremap ]u :UniteNext + + " unite-grep {{{3 + " seems not respected + let g:unite_source_grep_max_candidates = 2000 + if executable('ag') + " Use ag in unite grep source. + let g:unite_source_grep_command = 'ag' + let g:unite_source_grep_default_opts = '--smart-case --vimgrep --ignore ''.hg'' --ignore ''.svn'' --ignore ''.git'' --ignore ''.bzr''' + let g:unite_source_grep_recursive_opt = '' + end + nnoremap [unite]a :Unite grep:.:: + nnoremap [unite]A :Unite grep:.:-w: + command! -nargs=+ Ag Unite grep:.:: + + " unite-file_rec {{{3 + if executable('ag') + " Use ag in unite rec source + let g:unite_source_rec_async_command = ['ag', '--follow', '--nocolor', '--nogroup', '-g', ''] + end + nnoremap [unite]f :Unite -start-insert file_rec/async + + " unite-buffer {{{3 + call unite#custom#default_action('buffer', 'open') + nnoremap [unite]b :Unite buffer:- + + " unite-jumplist {{{3 + nnoremap [unite]j :Unite output:jumps: + + " unite-menu {{{3 + let g:unite_source_menu_menus = {} + let g:unite_source_menu_menus.fugitive = { 'description' : 'fugitive menu'} + let g:unite_source_menu_menus.fugitive.command_candidates = { + \ 'Gstatus gs' : 'Gstatus', + \ 'Gcommit -v gc' : 'Gcommit -v', + \ 'Glog' : 'Glog', + \} + + nnoremap gg :Unite menu:fugitive + + let g:unite_source_history_yank_enable = 1 + nnoremap [unite]p :Unite history/yank + endfunction + augroup unit_setup + autocmd VimEnter * ++once call UniteSetup() + augroup END + "}}}2 + Plug 'shougo/vimproc.vim', {'do': 'make'} " {{{2 + "}}}2 + Plug 'tomtom/tcomment_vim' " replaced by comment.nvim {{{2 + let g:tcomment_textobject_inlinecomment = 'gic' + let g:tcomment#filetype#guess = 0 + "let g:tcomment#options = {'whitespace' : 'no'} + "}}}2 + " colorschemes + Plug 'morhetz/gruvbox' " {{{2 + let g:gruvbox_contrast_dark = 'hard' + let g:gruvbox_contrast_light = 'soft' + " }}}2 + " staging + Plug 'puremourning/vimspector' " replaced by lsp {{{2 + let g:vimspector_enable_mappings = 'HUMAN' + " }}} + Plug 'vim-scripts/syntaxrange' " replaced by treesitter {{{2 + " }}} endif -Plug 'airblade/vim-gitgutter' " {{{ -" prefer other signs such as ycm diags -let g:gitgutter_sign_priority = 1 -" don't clobber other signs -let g:gitgutter_sign_allow_clobber = 0 -"}}} Plug 'alepez/vim-gtest' Plug 'alx741/vinfo' Plug 'andrewradev/sideways.vim' " {{{2 @@ -117,24 +218,26 @@ Plug 'derekwyatt/vim-fswitch' Plug 'elzr/vim-json' Plug 'firef0x/pkgbuild.vim' Plug 'junegunn/vim-easy-align' -Plug 'justinmk/vim-sneak' -Plug 'klen/python-mode' Plug 'kshenoy/vim-signature' -Plug 'majutsushi/tagbar' +" Plug 'majutsushi/tagbar' " TODO: delete? {{{2 +" map :TagbarToggle +" let g:tagbar_sort = 0 +" let g:tagbar_compact = 1 +" let g:tagbar_autoshowtag = 1 +" let g:tagbar_width = 25 +" let g:tagbar_iconchars = ['+', '-'] +"}}} Plug 'octol/vim-cpp-enhanced-highlight' Plug 'sgeb/vim-diff-fold' Plug 'skywind3000/asyncrun.vim' " {{{2 command! -bang -nargs=* -complete=file Make AsyncRun -save=2 -program=make @ let g:asyncrun_open = 10 "}}} -Plug 'shougo/unite.vim' -Plug 'shougo/vimproc.vim', {'do': 'make'} Plug 'sjl/gundo.vim' -Plug 'thinca/vim-qfreplace' -Plug 'tomtom/tcomment_vim' +" Plug 'thinca/vim-qfreplace' " TODO: delete? Plug 'tpope/vim-abolish' Plug 'tpope/vim-characterize' -Plug 'tpope/vim-endwise' +" Plug 'tpope/vim-endwise' " TODO: delete? Plug 'tpope/vim-eunuch' Plug 'tpope/vim-fugitive' Plug 'tpope/vim-repeat' @@ -142,15 +245,10 @@ Plug 'tpope/vim-scriptease' Plug 'tpope/vim-speeddating' Plug 'tpope/vim-unimpaired' Plug 'tweekmonster/spellrotate.vim' -Plug 'vim-scripts/mediawiki.vim' -Plug 'vim-scripts/replacewithregister' +" Plug 'vim-scripts/mediawiki.vim' " TODO: delete? +Plug 'vim-scripts/replacewithregister' " FIXME: is overridden by lsp Plug 'wincent/loupe' -" colorschemes -Plug 'morhetz/gruvbox' " {{{2 -let g:gruvbox_contrast_dark = 'hard' -let g:gruvbox_contrast_light = 'soft' - " text objects Plug 'kana/vim-textobj-user' Plug 'julian/vim-textobj-variable-segment' @@ -161,25 +259,20 @@ Plug 'kana/vim-operator-user' " Check LucHermites plugins: https://github.com/LucHermitte/lh-cpp Plug 'imsnif/kdl.vim' -Plug 'puremourning/vimspector' Plug 'ilyachur/cmake4vim' Plug 'ilyachur/gtest-vim' Plug 'junegunn/vim-peekaboo' "{{{2 -" issue with having it at the bottom is that it doesn't leave much -let g:peekaboo_window = 'bo 16new' -let g:peekaboo_compact = 1 -let g:peekaboo_delay = 500 + " issue with having it at the bottom is that it doesn't leave much + let g:peekaboo_window = 'bo 16new' + let g:peekaboo_compact = 1 + let g:peekaboo_delay = 500 "}}} -Plug 'vim-scripts/syntaxrange' - -let g:org_agenda_files = ['~/org/**.org'] - -Plug 'vim-scripts/ansiesc.vim' "{{{2 -nmap corwp RestoreWinPosn -nmap coswp SaveWinPosn -"}}} +" Plug 'vim-scripts/ansiesc.vim' " TODO: delete? {{{2 +" nmap corwp RestoreWinPosn +" nmap coswp SaveWinPosn +" "}}} Plug 'neovimhaskell/haskell-vim' " {{{2 let g:haskell_enable_quantification = 1 " to enable highlighting of `forall` @@ -200,11 +293,28 @@ Plug 'mtth/scratch.vim' " {{{2 let g:scratch_autohide = 0 "}}} -Plug 'jenterkin/vim-autosource' " {{{2 - let g:autosource_hashdir = $XDG_CACHE_HOME . '/vim/vim-autosource' - let g:autosource_conf_names = ['.vimrc', '.vimrc.lua'] +Plug 'vim-pandoc/vim-pandoc' " {{{2 +Plug 'vim-pandoc/vim-pandoc-syntax' +let g:pandoc#syntax#conceal#use = 1 +let g:pandoc#syntax#conceal#blacklist = [ + \ 'titleblock', + \ 'codeblock_start', + \ 'codeblock_delim', + \ 'atx', + \ ] +let g:pandoc#syntax#codeblocks#embeds#langs = [ + \ 'plantuml', + \ ] +let g:pandoc#keyboard#blacklist_submodule_mappings = [ + \ 'para', + \ ] "}}} +" Plug 'jenterkin/vim-autosource' " TODO: delete? {{{2 +" let g:autosource_hashdir = $XDG_CACHE_HOME . '/vim/vim-autosource' +" let g:autosource_conf_names = ['.vimrc', '.vimrc.lua'] +" "}}} + call plug#end() filetype plugin indent on @@ -293,7 +403,6 @@ endif set showcmd " Show (partial) command in status line. set ruler " show the cursor position all the time set confirm " Ask what to do when closing unsaved documents -set shortmess= " reset option set shortmess+=a " all abbreviations set shortmess+=o " overwrite file-written message set shortmess+=O " file-read message overrides previous @@ -302,6 +411,7 @@ set shortmess+=T " truncate other messages in the middle set shortmess+=W " don't give 'written' or '[w]' when writing a file set shortmess+=A " ignore swapfile warning set shortmess+=I " no splash screen +set shortmess+=F " don't give the file info when editing a file set shortmess+=c " don't give |ins-completion-menu| messages " editing text {{{2 @@ -341,7 +451,9 @@ set shiftround " round to 'shiftwidth' for "<<" and ">>" set expandtab " expand to spaces in Insert mode set autoindent -set pastetoggle= " key sequence to toggle paste mode +if !has('nvim') + set pastetoggle= " key sequence to toggle paste mode +endif " folding {{{2 set foldmethod=marker " folding type @@ -453,34 +565,37 @@ augroup ft_stdin au StdinReadPost * :set buftype=nofile augroup END -" Jump to last known cursor position {{{2 -augroup last_loc +if !has("nvim") + " autocmds that already exist in neovim + " Jump to last known cursor position {{{2 + augroup last_loc + au! + " blacklist certain filetype + let blacklist = ['gitcommit'] + autocmd BufReadPost * + \ if index(blacklist, &ft) < 0 && line("'\"") > 1 && line("'\"") <= line("$") | + \ exe "normal! g`\"" | + \ endif + augroup END + + " Check for file modifications automatically {{{2 + " (current buffer only) + " Use :NoAutoChecktime to disable it (uses b:autochecktime) + fun! MyAutoCheckTime() + " only check timestamp for normal files + if &buftype != '' | return | endif + if ! exists('b:autochecktime') || b:autochecktime + checktime % + let b:autochecktime = 1 + endif + endfun + augroup MyAutoChecktime au! - " blacklist certain filetype - let blacklist = ['gitcommit'] - autocmd BufReadPost * - \ if index(blacklist, &ft) < 0 && line("'\"") > 1 && line("'\"") <= line("$") | - \ exe "normal! g`\"" | - \ endif -augroup END - -" Check for file modifications automatically {{{2 -" (current buffer only) -" Use :NoAutoChecktime to disable it (uses b:autochecktime) -fun! MyAutoCheckTime() - " only check timestamp for normal files - if &buftype != '' | return | endif - if ! exists('b:autochecktime') || b:autochecktime - checktime % - let b:autochecktime = 1 - endif -endfun -augroup MyAutoChecktime - au! - au FocusGained,BufEnter,CursorHold,InsertEnter * call MyAutoCheckTime() -augroup END -command! NoAutoChecktime let b:autochecktime=0 -command! ToggleAutoChecktime let b:autochecktime=!get(b:, 'autochecktime', 0) | echom "b:autochecktime:" b:autochecktime + au FocusGained,BufEnter,CursorHold,InsertEnter * call MyAutoCheckTime() + augroup END + command! NoAutoChecktime let b:autochecktime=0 + command! ToggleAutoChecktime let b:autochecktime=!get(b:, 'autochecktime', 0) | echom "b:autochecktime:" b:autochecktime +endif " bindings {{{1 @@ -536,6 +651,9 @@ nnoremap ww :Untrail " Source vnoremap S y:execute @@:echo 'Sourced selection.' nnoremap S ^vg_y:execute @@:echo 'Sourced line.' +" Technically this is similar to execute this file, which is usually mapped to +" r and it would make sense to have that for lua files in nvim folder +nnoremap SS :source %:echo 'Sourced file.' " jump to last cursor position noremap ' ` @@ -554,11 +672,6 @@ nnoremap U " nnoremap r :silent !ranger %:h:redraw! " nnoremap R :silent !ranger:redraw! -" Use sane regexes. -nnoremap / /\v -vnoremap / /\v -cnoremap s/ s/\v - " display the number of matches for the last search nmap # :%s:/::gn @@ -661,7 +774,7 @@ vnoremap zf cabbrev w!! SudoWrite " uppercase previous word -inoremap gUiwgi +inoremap ugUiwgi " http://git.io/v3ZeU nmap qq :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<' . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">" @@ -713,11 +826,9 @@ command! GToggle GitToggle nnoremap gs :GitToggle nnoremap gd :Gdiffsplit -nnoremap gc :echohl WarningMsg \| echo "use \gcc instead" \| echohl None nnoremap gcc :tab G commit -v nnoremap gca :tab G commit -v --amend nnoremap gcf :tab G commit -v --fixup= -nnoremap gp :echohl WarningMsg \| echo "use \gpp instead" \| echohl None nnoremap gpp :Git push \| copen nnoremap gpf :Git push --force-with-lease \| copen nnoremap gll :Git pull @@ -743,15 +854,8 @@ nmap cog IndentGuidesToggle nmap [og IndentGuidesEnable nmap ]og IndentGuidesDisable -" python-mode {{{2 - -let g:pymode_rope_completion = 0 -let g:pymode_rope = 0 -let g:pymode_run = 0 -let g:pymode_folding = 1 -let g:pymode_lint_ignore = "E221,E266,E501" -let g:pymode_lint_cwindow = 0 " don't open cwindow when linting -let g:pymode_syntax_space_errors = 0 " don't bother me when I'm typing +" netrw {{{2 +let g:netrw_sort_sequence = '[\/]$,\.\%(h\|hpp\)$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$' " signature {{{2 " disable '[ mappings @@ -790,73 +894,6 @@ if ! &diff let g:syntastic_check_on_open=1 endif -" tagbar {{{2 -map :TagbarToggle -let g:tagbar_sort = 0 -let g:tagbar_compact = 1 -let g:tagbar_autoshowtag = 1 -let g:tagbar_width = 25 -let g:tagbar_iconchars = ['+', '-'] - -" tcomments {{{2 -let g:tcomment_textobject_inlinecomment = 'gic' -let g:tcomment#filetype#guess = 0 -"let g:tcomment#options = {'whitespace' : 'no'} - -" unite {{{2 -call unite#filters#matcher_default#use(['matcher_fuzzy']) -call unite#custom#profile('default', 'context', { - \ 'winheight': 20, - \ 'direction': 'botright' - \ }) - -nnoremap [unite] -nmap u [unite] -nnoremap [unite]u :UniteResume -nnoremap [u :UnitePrevious -nnoremap ]u :UniteNext - -" unite-grep {{{3 -" seems not respected -let g:unite_source_grep_max_candidates = 2000 -if executable('ag') - " Use ag in unite grep source. - let g:unite_source_grep_command = 'ag' - let g:unite_source_grep_default_opts = '--smart-case --vimgrep --ignore ''.hg'' --ignore ''.svn'' --ignore ''.git'' --ignore ''.bzr''' - let g:unite_source_grep_recursive_opt = '' -end -nnoremap [unite]a :Unite grep:.:: -nnoremap [unite]A :Unite grep:.:-w: -command! -nargs=+ Ag Unite grep:.:: - -" unite-file_rec {{{3 -if executable('ag') - " Use ag in unite rec source - let g:unite_source_rec_async_command = ['ag', '--follow', '--nocolor', '--nogroup', '-g', ''] -end -nnoremap [unite]f :Unite -start-insert file_rec/async -call unite#custom#source('file_rec/async', 'sorters', 'sorter_selecta') - -" unite-buffer {{{3 -call unite#custom#default_action('buffer', 'open') -nnoremap [unite]b :Unite buffer:- - -" unite-jumplist {{{3 -nnoremap [unite]j :Unite output:jumps: - -" unite-menu {{{3 -let g:unite_source_menu_menus = {} -let g:unite_source_menu_menus.fugitive = { 'description' : 'fugitive menu'} -let g:unite_source_menu_menus.fugitive.command_candidates = { - \ 'Gstatus gs' : 'Gstatus', - \ 'Gcommit -v gc' : 'Gcommit -v', - \ 'Glog' : 'Glog', - \} - -nnoremap gg :Unite menu:fugitive - -let g:unite_source_history_yank_enable = 1 -nnoremap [unite]p :Unite history/yank " vim-easy-align {{{2 " start interactive EasyAlign in visual mode @@ -876,25 +913,6 @@ nnoremap tu :GTestRunUnderCursor " vim-json {{{2 let g:vim_json_syntax_conceal = 0 -" vim-sneak {{{2 -let g:sneak#streak = 1 -let g:sneak#target_labels = "aoeuisnthdpylrcgfqjkxzmwvz" " dvorak -let g:sneak#use_ic_scs = 1 " follow 'ignorecase' and 'smartcase' - -" sneaky f and t -nmap f Sneak_f -nmap F Sneak_F -xmap f Sneak_f -xmap F Sneak_F -omap f Sneak_f -omap F Sneak_F -nmap t Sneak_t -nmap T Sneak_T -xmap t Sneak_t -xmap T Sneak_T -omap t Sneak_t -omap T Sneak_T - " functions {{{1 " Convenient command to see the difference between the current buffer and the @@ -913,21 +931,21 @@ nnoremap gs :set operatorfunc=SortLinesOpFuncg@ vnoremap gs :sort " edit configs {{{2 +" TODO: populate location list with both .vim and .lua files +" TODO: create file if it doesn't exist in nvim or vim rtps function! EditConfig(what, ext = '.vim') - let l:dir = split(&runtimepath,',')[0] - if a:what == 'vimrc' - let l:file = expand($MYVIMRC) - elseif ! isdirectory(globpath(l:dir, a:what)) - echoe a:what." is not valid!" + if a:what == 'vimrc' || a:what == 'init.lua' + let l:file = a:what elseif empty(&filetype) echoe 'filetype is empty!' + return else - let l:file = l:dir.'/'.a:what.'/'.&filetype.a:ext + let l:file = a:what.'/'.&filetype.a:ext endif - execute ':vsplit '.file - execute ':lcd %:p:h' + execute ':Vvsplit! '.file endf +nmap en :call EditConfig('init.lua') nmap ev :call EditConfig('vimrc') nmap ef :call EditConfig('ftplugin') nmap es :call EditConfig('syntax')