X-Git-Url: https://git.rmz.io/dotfiles.git/blobdiff_plain/28aa720dc79398e878518f64e394569d24a57c19..d44eb9a1140fe20d3dec7297e2952828954ac0a1:/vim/vimrc diff --git a/vim/vimrc b/vim/vimrc index 67b77a6..20c910e 100644 --- a/vim/vimrc +++ b/vim/vimrc @@ -1,19 +1,14 @@ -" My vimrc. -" -" Author: Samir Benmendil -" +" force python3 +if has('python3') | endif + +" space is leader +let g:mapleader = " " " runtimepath {{{1 set runtimepath ^=$XDG_CONFIG_HOME/vim set runtimepath +=$XDG_CONFIG_HOME/vim/after -" force python3 -if has('python3') | endif - " plugins {{{1 -" remove all autocommands -autocmd! - call plug#begin('$XDG_DATA_HOME/vim') " This does not update vim-plug, use PlugUpgrade instead Plug 'junegunn/vim-plug' @@ -26,8 +21,23 @@ let g:gitgutter_sign_allow_clobber = 0 "}}} Plug 'alepez/vim-gtest' Plug 'alx741/vinfo' +Plug 'andrewradev/sideways.vim' " {{{2 +nnoremap ,h :SidewaysLeft:delmarks z +nnoremap ,l :SidewaysRight:delmarks z +"}}} Plug 'andrewradev/switch.vim' -Plug 'bling/vim-airline' +if !has('nvim') + Plug 'bling/vim-airline' "{{{2 + let g:airline#extensions#whitespace#enabled = 1 + let g:airline#extensions#tabline#enabled = 1 + let g:airline#extensions#searchcount#enabled = 0 + let g:airline_powerline_fonts = 1 + + let g:asyncrun_status = "stopped" + " let g:airline_section_error = airline#section#create_right(['%{g:asyncrun_status}']) + "}}} +endif + Plug 'chrisbra/checkattach' Plug 'derekwyatt/vim-fswitch' Plug 'elzr/vim-json' @@ -38,27 +48,62 @@ Plug 'klen/python-mode' Plug 'kshenoy/vim-signature' Plug 'majutsushi/tagbar' Plug 'octol/vim-cpp-enhanced-highlight' -Plug 'raimondi/delimitmate' +if !has('nvim') + Plug 'raimondi/delimitmate' " {{{2 + let delimitMate_expand_cr = 2 + let g:delimitMate_expand_space = 1 + "}}} +end 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 'tpope/vim-abolish' +Plug 'tpope/vim-characterize' Plug 'tpope/vim-endwise' Plug 'tpope/vim-eunuch' Plug 'tpope/vim-fugitive' Plug 'tpope/vim-repeat' Plug 'tpope/vim-scriptease' Plug 'tpope/vim-speeddating' -Plug 'tpope/vim-surround' "investigate vim-sandwich +if !has('nvim') + Plug 'tpope/vim-surround' "investigate vim-sandwich +endif Plug 'tpope/vim-unimpaired' Plug 'tweekmonster/spellrotate.vim' -Plug 'valloric/youcompleteme', { 'do': './install.py --clangd-completer --clang-completer' } +if !has("nvim") + " Plug 'valloric/youcompleteme' {{{2 + Plug 'valloric/youcompleteme', + \{ 'do': './install.py --clangd-completer --clang-completer' } + let g:ycm_clangd_binary_path = 'clangd' " use clangd in path + let g:ycm_clangd_args = ['--clang-tidy'] + let g:ycm_extra_conf_vim_data = ['getcwd()'] + let g:ycm_add_preview_to_completeopt = 1 + let g:ycm_complete_in_comments = 1 + let g:ycm_complete_in_strings = 1 + let g:ycm_autoclose_preview_window_after_insertion = 0 + + let g:ycm_language_server = + \ [ + \ { + \ 'name': 'haskell', + \ 'cmdline': [ 'haskell-language-server-wrapper', '--lsp' ], + \ 'filetypes': [ 'haskell', 'lhaskell' ] + \ }, + \ ] + " }}} +endif Plug 'vim-scripts/mediawiki.vim' Plug 'vim-scripts/replacewithregister' -Plug 'vim-scripts/yankring.vim' +if !has('nvim') + Plug 'svermeulen/vim-yoink' +end Plug 'wincent/loupe' " colorschemes @@ -66,21 +111,56 @@ Plug 'morhetz/gruvbox' " {{{2 let g:gruvbox_contrast_dark = 'hard' let g:gruvbox_contrast_light = 'soft' -Plug 'arcticicestudio/nord-vim' " {{{2 -let g:nord_bold = 1 -let g:nord_italic = 1 -let g:nord_italic_comments = 1 -let g:nord_underline = 1 -let g:nord_uniform_status_lines = 0 -let g:nord_uniform_diff_background = 0 -let g:nord_cursor_line_number_background = 0 -let g:nord_bold_vertical_split_line = 0 +if !has('nvim') + Plug 'arcticicestudio/nord-vim' " {{{2 + let g:nord_bold = 1 + let g:nord_italic = 1 + let g:nord_italic_comments = 1 + let g:nord_underline = 1 + let g:nord_uniform_status_lines = 0 + let g:nord_uniform_diff_background = 0 + let g:nord_cursor_line_number_background = 0 + let g:nord_bold_vertical_split_line = 0 +endif "}}} -" snippets -Plug 'sirver/ultisnips' -Plug 'honza/vim-snippets' +if !has("nvim") + Plug 'sirver/ultisnips' " {{{ + Plug 'honza/vim-snippets' + + let g:UltiSnipsEditSplit = 'vertical' + let g:UltiSnipsSnippetDirectories = [ expand("$XDG_CONFIG_HOME/vim/ultisnips") ] + if has('fname_case') + let g:UltiSnipsSnippetDirectories = ["UltiSnips", "ultisnips"] + endif + let g:UltiSnipsExpandTrigger = "" + let g:UltiSnipsJumpForwardTrigger = "" + let g:UltiSnipsJumpBackwardTrigger = "" + + " UltiSnips completion function that tries to expand a snippet. If there's no + " snippet for expanding, it checks for completion window and if it's shown, + " selects first element. If there's no completion window it tries to jump to + " next placeholder. If there's no placeholder it just returns TAB key + " https://github.com/Valloric/YouCompleteMe/issues/36#issuecomment-15451411 + function! g:UltiSnips_Complete() + call UltiSnips#ExpandSnippet() + if g:ulti_expand_res == 0 + if pumvisible() + return "\" + else + call UltiSnips#JumpForwards() + if g:ulti_jump_forwards_res == 0 + return "\" + endif + endif + endif + return "" + endfunction + au InsertEnter * exec "inoremap " . g:UltiSnipsExpandTrigger . " =g:UltiSnips_Complete()" + let g:UltiSnipsListSnippets="" +"}}} +endif " text objects Plug 'kana/vim-textobj-user' @@ -90,8 +170,11 @@ Plug 'kana/vim-operator-user' " staging " Check LucHermites plugins: https://github.com/LucHermitte/lh-cpp -Plug 'dense-analysis/ale' " {{{2 -let g:ale_echo_msg_format = '[%linter%] %code: %%s' +Plug 'imsnif/kdl.vim' + +Plug 'puremourning/vimspector' +Plug 'ilyachur/cmake4vim' +Plug 'ilyachur/gtest-vim' Plug 'git@github.com:/ram-z/vim-orgmode', { 'branch': 'dev' } " {{{2 Plug 'vim-scripts/syntaxrange' @@ -106,29 +189,43 @@ let g:haskell_enable_pattern_synonyms = 1 " to enable highlighting of `pattern` let g:haskell_enable_typeroles = 1 " to enable highlighting of type roles let g:haskell_enable_static_pointers = 1 " to enable highlighting of `static` let g:haskell_backpack = 1 " to enable highlighting of backpack keywords + +let g:haskell_indent_before_where = 2 " }}} Plug 'aklt/plantuml-syntax' Plug 'mtth/scratch.vim' " {{{2 let g:scratch_no_mappings = 1 + let g:scratch_autohide = 0 "}}} -Plug 'vim-utils/vim-man' " {{{2 -let g:man_width = 80 +let g:man_hardwrap = 80 +if !has('nvim') + Plug 'vim-utils/vim-man' " {{{2 + let g:man_width = 80 "}}} +endif +Plug 'jenterkin/vim-autosource' " {{{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 +syntax on " colorscheme {{{1 -syntax on set background=dark let &t_8f = "\[38;2;%lu;%lu;%lum" let &t_8b = "\[48;2;%lu;%lu;%lum" set termguicolors -colorscheme $THEME +if !has('nvim') + colorscheme $THEME +endif +"TODO see how I can integrate this into a theme that customises upstream Nord +hi debugPC term=reverse ctermbg=8 " options {{{1 " moving around, searching and patterns {{{2 @@ -149,22 +246,23 @@ set linebreak " wrap long lines at a character in 'breakat' set showbreak=↪ " show these chars for wrapped lines set breakindent " preserve indentation in wrapped text -set lazyredraw " don't redraw while executing macros - set list " show chars defined in 'listchars' set listchars=tab:❭\ " list of strings used for list mode set listchars+=extends:❯,precedes:❮ +set listchars+=nbsp:␣ " Only shown when not in insert mode set listchars+=trail:· augroup trailing au! - au InsertEnter * :set listchars-=trail:· - au InsertLeave * :set listchars+=trail:· + au FileType qf setlocal listchars-=trail:· + au InsertEnter * set listchars-=trail:· + au InsertLeave * set listchars+=trail:· augroup END set scrolloff=5 " number of screen lines to show around the cursor set sidescroll=1 " number of collumns to scroll set sidescrolloff=1 " don't scroll over the listchars +set display+=lastline " display as much as possible of last line set fillchars=diff:⣿,vert:│ @@ -193,7 +291,9 @@ set ttyfast " using the mouse {{{2 set mouse=rnv " list of flags for using the mouse -set ttymouse=xterm " type of mouse +if !has('nvim') + set ttymouse=xterm " type of mouse +endif " messages and info {{{2 set showcmd " Show (partial) command in status line. @@ -208,6 +308,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+=c " don't give |ins-completion-menu| messages " editing text {{{2 set backspace=indent,eol,start " allow backspacing over everything in insert mode @@ -224,7 +325,8 @@ set formatoptions+=l " do not wrap lines that have been longer when starting set formatoptions+=t " Auto-wrap text using textwidth set formatoptions-=o " Do not insert comment leader after hitting o or O in normal mode -set nrformats=hex " number formats recognized for CTRL-A and CTRL-X commands +set nrformats-=octal " don't inc/dec octal numbers with ^[AX] +set nrformats+=unsigned " treat all numbers as unsigned set complete=. " scan the current buffer ( 'wrapscan' is ignored) set complete+=w " scan buffers from other windows @@ -261,6 +363,8 @@ set viewoptions+=folds " save folds set diffopt+=filler " show filler lines set diffopt+=vertical " always vertical split set diffopt+=context:10 " 10 lines context between changes +set diffopt+=internal +set diffopt+=algorithm:patience " reading and writing files {{{2 set modeline " read modelines @@ -274,7 +378,10 @@ set backupskip+=.netrc " skip netrc set backupskip+=/dev/shm/pass* " skip passwordstore files set undofile " persistent undo history -set undodir=$XDG_CACHE_HOME/vim/undo// +set undolevels=10000 " moar undos +if !has('nvim') + set undodir=$XDG_CACHE_HOME/vim/undo// +endif augroup undoskip au! @@ -309,6 +416,7 @@ set wildignore+=*.orig " Merge resolution files " running make and jumping to errors {{{2 set makeprg=make\ -w " print changing directories +set grepformat=%f:%l:%c:%m set grepprg=ag\ --vimgrep\ $* " language specific {{{2 @@ -317,7 +425,15 @@ set isfname-== " don't treat `=` as being part of filenames " various {{{2 set virtualedit+=block " let cursor move past last char in mode set virtualedit+=onemore " allow the cursor to move just past the end of the line -set viminfo='100,<50,s10,h,n$XDG_CACHE_HOME/vim/viminfo " viminfo defaults but save file in .cache +if !has('nvim') + " viminfo defaults but save file in .cache + set viminfo='100,<50,s10,h,n$XDG_CACHE_HOME/vim/viminfo +else + " shada is the replacement format for viminfo + " this setting is probably not needed as it's most likely the default + " the default path is in XDG_DATA_HOME, which is fine + set shada='100,<50,s10,h +endif set viewdir=$XDG_CACHE_HOME/vim/view// @@ -325,9 +441,9 @@ set sessionoptions+=unix,slash " damn windows and it's silly ways " autocmds {{{1 " Resize splits when the window is resized {{{2 -augroup resize +augroup resize_splits au! - autocmd VimResized * :wincmd = + autocmd VimResized * :tabdo wincmd = augroup END " Only show cursorline in the current window and in normal mode {{{2 @@ -344,7 +460,7 @@ augroup ft_stdin augroup END " Jump to last known cursor position {{{2 -augroup cursor_pos +augroup last_loc au! " blacklist certain filetype let blacklist = ['gitcommit'] @@ -372,21 +488,17 @@ augroup END command! NoAutoChecktime let b:autochecktime=0 command! ToggleAutoChecktime let b:autochecktime=!get(b:, 'autochecktime', 0) | echom "b:autochecktime:" b:autochecktime -augroup terminal - au! - au TerminalOpen * if &buftype == 'terminal' | setlocal bufhidden=hide | endif -augroup END - " bindings {{{1 -" allow both and \ to be -map - " make -function! Make() +function! MakeWithOpt() + " TODO only do this if makeprg matches make + " if &makeprg =~ "make" let l:make_dir = "" if exists("b:make_dir") let l:make_dir = "-C ".b:make_dir + elseif exists("t:make_dir") + let l:make_dir = "-C ".t:make_dir elseif exists("g:make_dir") let l:make_dir = "-C ".g:make_dir endif @@ -395,9 +507,9 @@ function! Make() if exists("g:make_targets") let l:make_targets = g:make_targets endif - execute "make! ".l:make_dir." ".l:make_targets + execute "Make ".l:make_dir." ".l:make_targets endf -nnoremap r :call Make() +nnoremap r :call MakeWithOpt() " unhighlight search nnoremap / :silent nohl @@ -561,18 +673,18 @@ inoremap gUiwgi 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") . ">" " plugins options {{{1 -" airline {{{2 -let g:airline#extensions#whitespace#enabled = 1 -let g:airline#extensions#tabline#enabled = 1 -let g:airline_powerline_fonts = 1 - " checkattach {{{2 let g:checkattach_filebrowser = 'ranger' let g:checkattach_once = 'y' -" delimitmate {{{2 -let delimitMate_expand_cr = 2 -let g:delimitMate_expand_space = 1 +" close-another-window {{{2 +nnoremap c +nnoremap cc c +nnoremap ch :CloseLeftWindow +nnoremap cl :CloseRightWindow +nnoremap cj :CloseBelowWindow +nnoremap ck :CloseAboveWindow + " fswitch {{{2 nnoremap ff :FSHere @@ -590,25 +702,45 @@ nmap dd :tab split \| Gdiff \| wincmd h " delete fugitive buffers when closed autocmd BufReadPost fugitive://* set bufhidden=delete -nnoremap gs :Git +function! GitToggle() + let l:status_buffer = bufname('^fugitive:///*/.git{/worktrees/*,}//$') + if buflisted(l:status_buffer) + execute 'bdelete '.l:status_buffer + else + execute 'Git' + if !empty(FugitiveGitDir()) + " only resize status if Git was sucessful + 16wincmd_ + endif + endif +endfunction +command! GitToggle :call GitToggle() +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 :G push -nnoremap gpf :G push --force-with-lease +nnoremap gpp :Git push \| copen +nnoremap gpf :Git push --force-with-lease \| copen +nnoremap gll :Git pull +nnoremap gru :Git rebase --interactive @{upstream} +nnoremap grp :Git rebase --interactive @{push} nnoremap ga :Gwrite nnoremap gb :G blame augroup fugitive_gstatus au! - autocmd BufWinEnter */.git/index resize 16 + autocmd User FugitiveIndex setlocal winfixheight + autocmd User FugitiveIndex nmap = augroup end " Gundo {{{2 nnoremap :GundoToggle +let g:gundo_prefer_python3 = 1 " indent-guides {{{2 let g:indent_guides_default_mapping = 0 @@ -617,14 +749,6 @@ nmap cog IndentGuidesToggle nmap [og IndentGuidesEnable nmap ]og IndentGuidesDisable -" close-another-window {{{2 -nnoremap c -nnoremap cc c -nnoremap ch :CloseLeftWindow -nnoremap cl :CloseRightWindow -nnoremap cj :CloseBelowWindow -nnoremap ck :CloseAboveWindow - " python-mode {{{2 let g:pymode_rope_completion = 0 @@ -647,6 +771,9 @@ let g:SignatureMap = { " switch let g:switch_mapping = "s" +let g:switch_custom_definitions = [ + \ ['yes', 'no'] + \ ] " spellrotate nmap z] (SpellRotateForward) @@ -680,38 +807,7 @@ let g:tagbar_iconchars = ['+', '-'] " tcomments {{{2 let g:tcomment_textobject_inlinecomment = 'gic' let g:tcomment#filetype#guess = 0 - -" ultisnips {{{2 -let g:UltiSnipsEditSplit = 'vertical' -let g:UltiSnipsSnippetDirectories = [ expand("$XDG_CONFIG_HOME/vim/ultisnips") ] -if has('fname_case') - let g:UltiSnipsSnippetDirectories = ["UltiSnips", "ultisnips"] -endif -let g:UltiSnipsExpandTrigger = "" -let g:UltiSnipsJumpForwardTrigger = "" -let g:UltiSnipsJumpBackwardTrigger = "" - -" UltiSnips completion function that tries to expand a snippet. If there's no -" snippet for expanding, it checks for completion window and if it's shown, -" selects first element. If there's no completion window it tries to jump to -" next placeholder. If there's no placeholder it just returns TAB key -" https://github.com/Valloric/YouCompleteMe/issues/36#issuecomment-15451411 -function! g:UltiSnips_Complete() - call UltiSnips#ExpandSnippet() - if g:ulti_expand_res == 0 - if pumvisible() - return "\" - else - call UltiSnips#JumpForwards() - if g:ulti_jump_forwards_res == 0 - return "\" - endif - endif - endif - return "" -endfunction -au InsertEnter * exec "inoremap " . g:UltiSnipsExpandTrigger . " =g:UltiSnips_Complete()" -let g:UltiSnipsListSnippets="" +"let g:tcomment#options = {'whitespace' : 'no'} " unite {{{2 call unite#filters#matcher_default#use(['matcher_fuzzy']) @@ -737,7 +833,7 @@ if executable('ag') end nnoremap [unite]a :Unite grep:.:: nnoremap [unite]A :Unite grep:.:-w: -command! -nargs=+ Ag Unite -input= grep:.: +command! -nargs=+ Ag Unite grep:.:: " unite-file_rec {{{3 if executable('ag') @@ -768,30 +864,11 @@ nnoremap gg :Unite menu:fugitive let g:unite_source_history_yank_enable = 1 nnoremap [unite]p :Unite history/yank -" yankring {{{2 -nnoremap p :YRShow -let g:yankring_history_dir = expand('$XDG_CACHE_HOME/vim') -let g:yankring_replace_n_pkey = '' -let g:yankring_replace_n_nkey = '' - -" map Y to y$ for the yank ring -function! YRRunAfterMaps() - nnoremap Y :YRYankCount 'y$' -endfunction - -" youcompleteme {{{2 -let g:ycm_clangd_binary_path = 'clangd' " use clangd in path -let g:ycm_clangd_args = ['--clang-tidy'] -let g:ycm_extra_conf_vim_data = ['getcwd()'] -let g:ycm_add_preview_to_completeopt = 1 -let g:ycm_complete_in_comments = 1 -let g:ycm_complete_in_strings = 1 -let g:ycm_autoclose_preview_window_after_insertion = 0 - " vim-easy-align {{{2 " start interactive EasyAlign in visual mode -vmap (EasyAlign) -nmap ga (EasyAlign) +vmap :echohl WarningMsg \| echo "EasyAlign mapped to a now" \| echohl None +vmap a (EasyAlign) +nmap a (EasyAlign) " vim-gtest {{{2 let g:gtest#highlight_failing_tests = 0 @@ -890,8 +967,6 @@ function! SwitchSpell() endfunction nnoremap coS :call SwitchSpell() -" fix spelling with first choice -nnoremap f 1z= " gitdir or home {{{2 " from derek wyatt: