X-Git-Url: https://git.rmz.io/dotfiles.git/blobdiff_plain/614b66e8cb6511504243046ba1ecdce7ea5db487..ccdacf21dc7d84e54dc22e5398d5ecb4fb2912ec:/vim/vimrc diff --git a/vim/vimrc b/vim/vimrc index 8fedddc..d5b0610 100644 --- a/vim/vimrc +++ b/vim/vimrc @@ -1,12 +1,10 @@ -" My vimrc. -" -" Author: Samir Benmendil -" - " 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! @@ -15,11 +13,31 @@ call plug#begin('$XDG_DATA_HOME/vim') " This does not update vim-plug, use PlugUpgrade instead Plug 'junegunn/vim-plug' -Plug 'airblade/vim-gitgutter' +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 +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' @@ -31,15 +49,18 @@ Plug 'kshenoy/vim-signature' Plug 'majutsushi/tagbar' Plug 'octol/vim-cpp-enhanced-highlight' Plug 'raimondi/delimitmate' -Plug 'vimwiki/vimwiki', { 'branch': 'dev' } -" Plug 'scrooloose/syntastic' 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' @@ -56,7 +77,23 @@ Plug 'vim-scripts/yankring.vim' Plug 'wincent/loupe' " colorschemes -Plug 'morhetz/gruvbox' +Plug 'morhetz/gruvbox' " {{{2 +let g:gruvbox_contrast_dark = 'hard' +let g:gruvbox_contrast_light = 'soft' + +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' @@ -70,33 +107,57 @@ 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' -let g:ale_c_parse_compile_commands = 1 -let g:ale_cpp_parse_compile_commands = 1 -" don't use loclist as it's being populated by ycm -" (might want to enable for other filetypes) -let g:ale_set_loclist = 0 -let g:ale_cpp_gcc_options = '' -let g:ale_linters_ignore = { 'cpp': ['clangd', 'clangtidy', 'clang'] } Plug 'git@github.com:/ram-z/vim-orgmode', { 'branch': 'dev' } " {{{2 Plug 'vim-scripts/syntaxrange' let g:org_agenda_files = ['~/org/*.org'] +Plug 'neovimhaskell/haskell-vim' " {{{2 +let g:haskell_enable_quantification = 1 " to enable highlighting of `forall` +let g:haskell_enable_recursivedo = 1 " to enable highlighting of `mdo` and `rec` +let g:haskell_enable_arrowsyntax = 1 " to enable highlighting of `proc` +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 +"}}} + +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 g:gruvbox_contrast_dark = 'hard' -let g:gruvbox_contrast_light = 'soft' -colorscheme gruvbox -" override the background to be black -highligh Normal ctermbg=None +let &t_8f = "\[38;2;%lu;%lu;%lum" +let &t_8b = "\[48;2;%lu;%lu;%lum" +set termguicolors +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 @@ -122,12 +183,14 @@ 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 @@ -229,6 +292,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 @@ -351,10 +416,14 @@ augroup END 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 @@ -363,9 +432,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 @@ -406,7 +475,11 @@ noremap ' ` nnoremap vv ^vg_ " Unfuck my screen -nnoremap U :syntax sync fromstart:AirlineRefresh:redraw! +nnoremap U + \ :syntax sync fromstart + \ :AirlineRefresh + \ :call popup_clear(1) + \ :redraw! " Ranger " nnoremap r :silent !ranger %:h:redraw! @@ -525,11 +598,6 @@ 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' @@ -554,19 +622,42 @@ nmap dd :tab split \| Gdiff \| wincmd h " delete fugitive buffers when closed autocmd BufReadPost fugitive://* set bufhidden=delete -nnoremap gs :Gstatus -nnoremap gd :Gdiff -nnoremap gc :Gcommit -v +function! GitToggle() + let l:status_buffer = bufname('^fugitive:///*/.git{/worktrees/*,}//$') + if buflisted(l:status_buffer) + execute 'bdelete '.l:status_buffer + else + Git + 16wincmd_ + 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 :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 :Gblame +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 @@ -605,6 +696,9 @@ let g:SignatureMap = { " switch let g:switch_mapping = "s" +let g:switch_custom_definitions = [ + \ ['yes', 'no'] + \ ] " spellrotate nmap z] (SpellRotateForward) @@ -638,10 +732,11 @@ let g:tagbar_iconchars = ['+', '-'] " tcomments {{{2 let g:tcomment_textobject_inlinecomment = 'gic' let g:tcomment#filetype#guess = 0 +"let g:tcomment#options = {'whitespace' : 'no'} " ultisnips {{{2 let g:UltiSnipsEditSplit = 'vertical' -let g:UltiSnipsSnippetsDir = expand("$XDG_CONFIG_HOME/vim/ultisnips") +let g:UltiSnipsSnippetDirectories = [ expand("$XDG_CONFIG_HOME/vim/ultisnips") ] if has('fname_case') let g:UltiSnipsSnippetDirectories = ["UltiSnips", "ultisnips"] endif @@ -695,7 +790,7 @@ if executable('ag') end nnoremap [unite]a :Unite grep:.:: nnoremap [unite]A :Unite grep:.:-w: -command! -nargs=1 Ag Unite grep:.:: +command! -nargs=+ Ag Unite grep:.:: " unite-file_rec {{{3 if executable('ag') @@ -739,23 +834,36 @@ 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 +let g:ycm_language_server = + \ [ + \ { + \ 'name': 'haskell', + \ 'cmdline': [ 'haskell-language-server-wrapper', '--lsp' ], + \ 'filetypes': [ 'haskell', 'lhaskell' ] + \ }, + \ ] + " 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 -nnoremap tt :GTestRun -nnoremap ta :GTestCase *:GTestName *:GTestRun -nnoremap tu :GTestRunUnderCursor +nnoremap tt :GTestRun +nnoremap tc :GTestCase +nnoremap tn :GTestName +nnoremap ta :GTestCase *:GTestName *:GTestRun +nnoremap tu :GTestRunUnderCursor " vim-json {{{2 let g:vim_json_syntax_conceal = 0 @@ -779,15 +887,6 @@ xmap T Sneak_T omap t Sneak_t omap T Sneak_T -" vimviki {{{2 -let g:vimwiki_list = [{'path': '$XDG_DATA_HOME/vimwiki'}] -let g:vimwiki_auto_chdir = 1 -augroup myvimwiki - au! BufRead $XDG_DATA_HOME/vimwiki/index.wiki !git -C "%:p:h" pull -q - au! BufRead,BufNewFile $XDG_DATA_HOME/vimwiki/diary/*.wiki !git -C "%:p:h" pull -q - au! BufWritePost $XDG_DATA_HOME/vimwiki/*.wiki exe '!git add "";git commit -qm"' . strftime("%FT%R") . '";git push -q' -augroup END - " functions {{{1 " Convenient command to see the difference between the current buffer and the