" try not to put any lines in your vimrc that you don't understand :) set nocompatible filetype off "required " Enable heavy omni completion. if !exists('g:neocomplete#sources#omni#input_patterns') let g:neocomplete#sources#omni#input_patterns = {} endif if empty(glob('~/.vim/autoload/plug.vim')) silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim autocmd VimEnter * PlugInstall --sync | source $MYVIMRC endif " Run PlugInstall if there are missing plugins autocmd VimEnter * if len(filter(values(g:plugs), '!isdirectory(v:val.dir)')) \| PlugInstall --sync | source $MYVIMRC \| endif " both "filetype indent on" and "syntax on" are called by Plug, keeping DRY call plug#begin() Plug 'liuchengxu/space-vim-theme' Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes' Plug 'ctrlpvim/ctrlp.vim', { 'on': [] } " 🌷 Distraction-free writing in Vim Plug 'junegunn/goyo.vim', { 'for': 'markdown' } Plug 'preservim/nerdcommenter' Plug 'airblade/vim-gitgutter' Plug 'tpope/vim-surround' " fugitive.vim: A Git wrapper so awesome, it should be illegal Plug 'tpope/vim-fugitive' Plug 'tpope/vim-repeat' Plug 'tpope/vim-speeddating', { 'on': [] }| " quick date incrementing " plugin fails to work if it's only loaded on a predefined list of " formats, commented for now " Plug 'tpope/vim-afterimage', { 'for': ['xpm', 'png', 'ico', 'gif'] } Plug 'tpope/vim-jdaddy', { 'for': 'json' } Plug 'tpope/vim-ragtag', { 'for': ['html', 'xhtml', 'wml', 'xml', 'xslt', 'xsd', 'jsp', 'php', 'aspperl', 'aspvbs', 'cf', 'mason', 'htmldjango', 'eruby'] } Plug 'bazelbuild/vim-ft-bzl' Plug 'gorodinskiy/vim-coloresque'| " coloured background for colour names/codes Plug 'lpinilla/vim-codepainter'| " text highlighting Plug 'rhysd/git-messenger.vim' Plug 'Yggdroot/indentLine' Plug 'preservim/nerdtree', { 'on': 'NERDTreeToggle' } Plug 'Xuyuanp/nerdtree-git-plugin', { 'on': 'NERDTreeToggle' } Plug 'tiagofumo/vim-nerdtree-syntax-highlight', { 'on': 'NERDTreeToggle' } Plug 'roxma/nvim-yarp' Plug 'roxma/vim-hug-neovim-rpc' Plug 'Shougo/deoplete.nvim' Plug 'vim-syntastic/syntastic', { 'on': [] } Plug 'dense-analysis/ale' Plug 'OmniSharp/omnisharp-vim', { 'for': ['cs', 'csh'] } Plug 'justmao945/vim-clang', { 'on': [] } Plug 'cdelledonne/vim-cmake' Plug 'majutsushi/tagbar' Plug 'lvht/tagbar-markdown', { 'for': 'markdown' } Plug 'lervag/vimtex', { 'for': 'tex' } Plug 'xuhdev/vim-latex-live-preview', { 'for': 'tex' } Plug 'cespare/vim-toml', { 'for': 'toml' } Plug 'Glench/Vim-Jinja2-Syntax' Plug 'pearofducks/ansible-vim' Plug 'hashivim/vim-terraform', { 'for': 'terraform' } Plug 'aouelete/sway-vim-syntax', { 'for': 'sway' } Plug 'rust-lang/rust.vim', { 'for': 'rust' } Plug 'fatih/vim-go', { 'for': ['go', 'gohtmltmpl'], 'do': ':GoInstallBinaries' } Plug 'chikamichi/mediawiki.vim', { 'for': 'wiki' } Plug 's3rvac/vim-syntax-redminewiki', { 'for': 'redminewiki' } Plug 'mfukar/robotframework-vim', { 'for': 'robotframework' } call plug#end() let g:airline_powerline_fonts = 1 let g:airline_highlighting_cache = 1 " violet, wombat, deus let g:airline_theme = 'violet' let g:airline#extensions#tabline#enabled = 1 let g:airline#extensions#tabline#formatter = 'unique_tail' let g:airline_mode_map = { \ '__' : '-', \ 'c' : 'C', \ 'i' : 'I', \ 'ic' : 'I-C', \ 'ix' : 'I-X', \ 'n' : 'N', \ 'multi' : 'M', \ 'ni' : 'N', \ 'no' : 'N', \ 'R' : 'R', \ 'Rv' : 'R', \ 's' : 'S', \ 'S' : 'S', \ '' : 'S', \ 't' : 'T', \ 'v' : 'V', \ 'V' : 'V-L', \ '' : 'V-B', \ } " skip displaying fileformat output if the output matches a configured string. let g:airline#parts#ffenc#skip_expected_string='utf-8[unix]' let g:airline#extensions#ale#enabled = 1 let g:ale_close_preview_on_insert = 1 let g:ale_detail_to_floating_preview = 1 let g:ale_virtualtext_cursor = 1 let g:ale_hover_to_floating_preview = 1 let g:ale_completion_enabled = 1 let g:ale_hover_to_preview = 1 let g:ale_lsp_suggestions = 1 let g:ale_open_list = 0 let g:ale_keep_list_window_open = 0 let g:ale_list_window_size = 5 let g:ale_lint_on_text_changed = 'normal' let g:ale_lint_on_insert_leave = 1 let g:ale_lint_delay = 1000| " the default being 200 let g:ale_completion_autoimport = 1 let g:ale_linters = { 'go': ['gopls', 'govet', 'golint'], \ 'dockerfile': ['hadolint'], \ 'cs': ['OmniSharp'], \ 'c': ['clang-format', 'ccls', 'clangd', 'clangtidy', 'cppcheck', 'cquery', 'flawfinder'], \ 'cpp': ['clang-format','ccls', 'clangd', 'clangtidy', 'cppcheck', 'flawfinder'], \ 'tf': ['tflint', 'terraform', 'tfsec', 'checkov'] } let g:ale_fixers = { 'c': ['ccls', 'clang-format', 'clangtidy', 'cppcheck', 'cquery', 'flawfinder'], \ 'cpp': ['clang-format', 'clangtidy', 'cppcheck', 'flawfinder'], \ 'go': ['gopls'] } if has('patch-8.1.1880') set completeopt=longest,menuone,popuphidden " Highlight the completion documentation popup background/foreground the same as " the completion menu itself, for better readability with highlighted " documentation. set completepopup=highlight:Pmenu,border:off else set completeopt=longest,menuone,preview " Set desired preview window height for viewing documentation. set previewheight=5 endif let g:gitgutter_terminal_reports_focus=0 let g:gitgutter_async = 1 let g:gitgutter_sign_allow_clobber=0 let g:gitgutter_set_sign_backgrounds = 0 let g:gitgutter_preview_win_floating = 1 set foldtext=gitgutter#fold#foldtext() let g:deoplete#enable_at_startup = 1 let g:deoplete#enable_ignore_case = 1 let g:livepreview_cursorhold_recompile = 0 let g:livepreview_previewer = 'evince' let g:livepreview_engine = 'pdflatex -shell-escape -interaction=nonstopmode' let g:vimtex_compiler_progname = 'pdflatex -shell-escape --interaction=nonstopmode' let g:tex_flavor = 'latex' " Add spaces after comment delimiters by default let g:NERDSpaceDelims = 1 " Allow commenting and inverting empty lines (useful when commenting a region) let g:NERDCommentEmptyLines = 1 " Enable trimming of trailing whitespace when uncommenting let g:NERDTrimTrailingWhitespace = 1 """" Enable NERDCommenterToggle to check all selected lines is commented or not """let g:NERDToggleCheckAllLines = 1 " Add your own custom formats or override the defaults let g:NERDCustomDelimiters = { 'vim': { 'left': '"','right': '' }, 'c': { 'left': '/**','right': '*/' }, 'zsh': { 'left': '#','right': ''} } let g:NERDTreeGitStatusWithFlags = 1 let g:indentLine_setColors = 1 let g:indentLine_char_list = ['|', '¦', '┆', '┊', ':'] let g:indentLine_conceallevel = 0 let g:git_messenger_close_on_cursor_moved = v:false let g:git_messenger_always_into_popup = v:true hi gitmessengerHash term=None guifg=#f0eaaa ctermfg=111 " OmniSharp " IDE0010: Populate switch - display in ALE as `Info` " IDE0055: Fix formatting - display in ALE as `Warning` style error " CS8019: Duplicate of IDE0005 let g:OmniSharp_diagnostic_overrides = { \ 'IDE0010': {'type': 'I'}, \ 'IDE0055': {'type': 'W', 'subtype': 'Style'}, \ 'CS8019': {'type': 'None'}, \} let g:syntastic_always_populate_loc_list = 1 let g:syntastic_auto_loc_list = 2 let g:syntastic_loc_list_height = 8 let g:syntastic_check_on_open = 1 let g:syntastic_check_on_wq = 0 let g:syntastic_aggregate_errors = 1 let g:syntastic_id_checkers = 1 let g:syntastic_error_symbol = "✗" let g:syntastic_warning_symbol = "⚠" set statusline+=%#warningmsg# set statusline+=%{exists('g:loaded_syntastic_plugin')?SyntasticStatuslineFlag():''} set statusline+=%* let g:syntastic_javascript_checkers = ['jsl'] let g:syntastic_python_checkers = ['flake8', 'pylint-3'] let g:syntastic_c_compiler = 'clang' let g:syntastic_c_check_header = 1 let g:syntastic_c_auto_refresh_includes = 1 let g:syntastic_cpp_check_header = 1 let g:syntastic_cpp_auto_refresh_includes = 1 let g:syntastic_c_cpplint_exec = ['cppcheck', 'clang-check', 'clang-tidy'] let g:syntastic_go_checkers = ['go', 'gopls', 'golint', 'govet'] let g:terraform_align=1 let g:terraform_fold_sections=1 let g:terraform_fmt_on_save=1 " change cursor shape for different editing modes, neovim does this by default if !has('nvim') if exists('$TMUX') let &t_SI = "\Ptmux;\\e[12 q\\\" let &t_SI = "\Ptmux;\\e[4 q\\\" let &t_SI = "\Ptmux;\\e[2 q\\\" else let &t_SI = "\]12;purple\x7" let &t_SR = "\e[4 q" let &t_EI = "\e[2 q" endif endif " reset cursor when vim exits autocmd VimLeave * silent !echo -ne "\033]112\007" command! W execute 'silent w !sudo tee % >/dev/null' | edit! command! -nargs=* Make write | make! | cwindow " open a terminal in $PWD nnoremap tt :terminal " terminal normal mode tnoremap N " toggle showing whitespace noremap :set list! " make shortcut nnoremap :term ++hidden ++open make nnoremap :term ++open make nnoremap :TagbarToggle " NERDTree nmap nt :NERDTreeToggle vmap gb :!git blame % -L=line("'<") ,=line("'>") nnoremap gb :!git blame % " ll provided by vimtex nnoremap kk :w! !pdflatex -shell-escape -interaction=nonstopmode $PWD/*.tex :function Pdfpls() :echom "compiling ur tex goodness!" :w! :!pdflatex -shell-escape -interaction=nonstopmode $PWD/*.tex :!bibtex $PWD/*.aux :!pdflatex -shell-escape -interaction=nonstopmode $PWD/*.tex :endfunction nnoremap lb :call Pdfpls() nnoremap l :exec &conceallevel ? "set conceallevel=0" : "set conceallevel=1" " toggle GitGutterLineHighlights nnoremap d :GitGutterLineHighlightsToggle " ALE bindings nmap (ale_previous_wrap) nmap (ale_next_wrap) nnoremap a :ALEDetail " ------ wayland copy xnoremap "+y y:call system("wl-copy", @") nnoremap "+p :let @"=substitute(system("wl-paste --no-newline"), '', '', 'g')p nnoremap "*p :let @"=substitute(system("wl-paste --no-newline --primary"), '', '', 'g')p inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? "\" : "\" " ------ autocmd ------ " Enable omni completion. " autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS " autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags " autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS " autocmd FileType python setlocal omnifunc=pythoncomplete#Complete " autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags " automatically open NERDTree if vim is open on it's own (argc() ==0 ) " autocmd StdinReadPre * let s:std_in=1 " autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif " Reload changes if file changed outside of vim requires autoread augroup load_changed_file autocmd! autocmd FocusGained,BufEnter * if mode() !=? 'c' | checktime | endif autocmd FileChangedShellPost * echo "Changes loaded from source file" augroup END " when quitting a file, save the cursor position augroup save_cursor_position autocmd! autocmd BufReadPost * call setpos(".", getpos("'\"")) augroup END " when not running in a console or a terminal that doesn't support 256 colors " enable cursorline in the currently active window and disable it in inactive ones if $DISPLAY !=? '' && &t_Co == 256 augroup cursorline autocmd! autocmd VimEnter,WinEnter,BufWinEnter * setlocal cursorline autocmd WinLeave * setlocal nocursorline augroup END endif " when entering insert mode, relative line " numbers are turned off, leaving absolute line numbers turned on augroup numbertoggle autocmd! autocmd BufEnter,FocusGained,InsertLeave * set number relativenumber autocmd BufLeave,FocusLost,InsertEnter * set number norelativenumber augroup END hi clear CursorLine augroup CLClear autocmd! ColorScheme * hi clear CursorLine augroup END hi CursorLineNR cterm=bold augroup CLNRSet set cursorline autocmd! ColorScheme * hi CursorLineNR cterm=bold augroup END " define indent-based folding, after loading a file switch to manual folding augroup vimrc autocmd! au BufReadPre * setlocal foldmethod=indent au BufWinEnter * if &fdm == 'indent' | setlocal foldmethod=manual | endif augroup END """ autosave and load views au BufWinLeave ?* mkview au BufWinEnter ?* silent loadview au FileType xml setlocal shiftwidth=4 tabstop=4 au FileType html setlocal shiftwidth=4 tabstop=4 au BufNewFile,BufRead *.js \ setlocal shiftwidth=4 tabstop=4 softtabstop=4 expandtab autoindent fileformat=unix au FileType sway setl textwidth=79 \ tabstop=8 shiftwidth=8 softtabstop=8 noexpandtab autoindent au FileType rust setl \ tabstop=8 shiftwidth=8 softtabstop=8 noexpandtab autoindent ff=unix au BufNewFile,BufRead *.py,*.pyw,*.pyx,?akefil* \ setlocal tabstop=4 shiftwidth=4 noexpandtab autoindent \ fileformat=unix au FileType c setl ofu=ccomplete#CompleteCpp " Linux kernel style tabs au BufNewFile,BufRead,BufEnter *.c,*.h,*.cpp \ setlocal tabstop=8 shiftwidth=8 softtabstop=8 noexpandtab autoindent \ textwidth=79 fileformat=unix au BufNewFile,BufRead,BufEnter *.tex \ setlocal tabstop=2 shiftwidth=2 softtabstop=2 expandtab autoindent \ textwidth=79 fileformat=unix conceallevel=0 au BufNewFile,BufRead,BufEnter *.bib \ setlocal ft=bib tabstop=2 shiftwidth=2 softtabstop=2 noexpandtab autoindent \ fileformat=unix conceallevel=0 au BufNewFile,BufRead,BufEnter *.cs \ setlocal ft=cs tabstop=4 shiftwidth=4 softtabstop=4 noexpandtab autoindent \ textwidth=79 fileformat=unix conceallevel=0 au BufNewFile,BufRead *.cshtml \ setlocal ft=csh tabstop=4 shiftwidth=4 softtabstop=4 noexpandtab autoindent \ textwidth=79 fileformat=unix conceallevel=0 augroup async_plug_load autocmd! " these plugins take the longest to load, let's do it in a semi-non-blocking " fashion autocmd CursorHold,CursorHoldI * call plug#load('syntastic', 'vim-clang', 'vim-speeddating', 'ctrlp.vim') \| autocmd! async_plug_load augroup END augroup omnisharp_commands autocmd! " Show type information automatically when the cursor stops moving. " Note that the type is echoed to the Vim command line, and will overwrite " any other messages in this space including e.g. ALE linting messages. autocmd CursorHold *.cs OmniSharpTypeLookup " The following commands are contextual, based on the cursor position. autocmd FileType cs nmap gd (omnisharp_go_to_definition) autocmd FileType cs nmap osfu (omnisharp_find_usages) autocmd FileType cs nmap osfi (omnisharp_find_implementations) autocmd FileType cs nmap ospd (omnisharp_preview_definition) autocmd FileType cs nmap ospi (omnisharp_preview_implementations) autocmd FileType cs nmap ost (omnisharp_type_lookup) autocmd FileType cs nmap osd (omnisharp_documentation) autocmd FileType cs nmap osfs (omnisharp_find_symbol) autocmd FileType cs nmap osfx (omnisharp_fix_usings) autocmd FileType cs nmap (omnisharp_signature_help) autocmd FileType cs imap (omnisharp_signature_help) " Navigate up and down by method/property/field autocmd FileType cs nmap [[ (omnisharp_navigate_up) autocmd FileType cs nmap ]] (omnisharp_navigate_down) " Find all code errors/warnings for the current solution and populate the quickfix window autocmd FileType cs nmap osgcc (omnisharp_global_code_check) " Contextual code actions (uses fzf, vim-clap, CtrlP or unite.vim selector when available) autocmd FileType cs nmap osca (omnisharp_code_actions) autocmd FileType cs xmap osca (omnisharp_code_actions) " Repeat the last code action performed (does not use a selector) autocmd FileType cs nmap os. (omnisharp_code_action_repeat) autocmd FileType cs xmap os. (omnisharp_code_action_repeat) autocmd FileType cs nmap os= (omnisharp_code_format) autocmd FileType cs nmap osnm (omnisharp_rename) autocmd FileType cs nmap osre (omnisharp_restart_server) autocmd FileType cs nmap osst (omnisharp_start_server) autocmd FileType cs nmap ossp (omnisharp_stop_server) augroup END " ------ adv maps ------ " strip trailing whitespace, ss (strip space) nnoremap ss \ :let b:_p = getpos(".") \ let b:_s = (@/ != '') ? @/ : '' \ %s/\s\+$//e \ let @/ = b:_s \ nohlsearch \ unlet b:_s \ call setpos('.', b:_p) \ unlet b:_p match Todo /\s\+$/ set softtabstop=4 set tabstop=4 set shiftwidth=4 set expandtab set smarttab set errorformat+=%.%#PHP:\ %m\ \(in\ %f\ on\ line\ %l\)%.%#, \%E%[0-9]%#.%m:%f?rev=%.%##L%l\ %.%#,%C%.%# set tags=.tags; set incsearch " incrimental search set hlsearch " highlighting when searching set autoindent set backspace=2 set splitbelow splitright " splits open at bottom and right set lazyredraw " don't redraw while executing macros (good performance config) set ttyfast set listchars=trail:•,tab:>- set list " show/hide tabs and EOL chars (hidden characters) set confirm " ask confirmation like save before quit. set wildmenu " Tab completion menu when using command mode set wildmode=longest:longest,full set scrolloff=5 " scroll offset, min lines above/below cursor "set scrolljump=5 " jump 5 lines when running out of the screen - NO set sidescroll=10 " minimum columns to scroll horizontally set showcmd " show command status set showmatch " flashes matching parenthese when cursor over the other one set mat=2 " how many tenths of a second to blink when matching brackets set noshowmode " show editing mode in status (-- INSERT --) set ruler " show cursor position set colorcolumn=80 " Highlight column 80 to get coding horizontal bound. set noerrorbells " bells in vim set undolevels=1000 " number of undos stored set viminfo='50,"50 " '=marks for x files, "=registers for x files set nofoldenable "set foldmethod=indent " indent based folding set encoding=utf-8 " important for powerline besides others set ignorecase " searches are case insensitive... set smartcase " ... unless they contain at least one capital letter set noscrollbind set updatetime=250 " no background from colorscheme as it messes with background transparency in kitty autocmd ColorScheme * highlight Normal ctermbg=NONE guibg=NONE set termguicolors colo space_vim_theme " new fav highlighting " compensate for lack of theme italics for s in ["Comment", "Constant", "Include", "Define", "Macro", "Delimiter", "Debug", "Identifier", "Boolean", "markdownItalic"] execute "hi " s " cterm=italic" endfor " vimtex highlight groups hi! link texMathEnvArgName texEnvArgName hi! link texMathZone LocalIdent hi! link texMathZoneEnv texMathZone hi! link texMathZoneEnvStarred texMathZone hi! link texMathZoneX texMathZone hi! link texMathZoneXX texMathZone hi! link texMathZoneEnsured texMathZone set conceallevel=0 " for jsons set ttymouse=sgr " tmux mouse behaviour set mouse=a " enable mouse in n,v,i,c,h modes set laststatus=2 " show powerline status bar set t_Co=256 set gfn=Fira\ Code\ weight=450\ 12 set ballooneval " vim8+ popups let g:netrw_beval = 1 set t_vb= highlight ColorColumn guibg=Black highlight ColorColumn ctermbg=0 " cursorline optimizations set cursorlineopt=number hi CursorLineNR cterm=bold syntax sync minlines=256 " fix meta-keys which generate a .. z let c='a' while c <= 'z' exec "set =\e".c exec "imap \e".c." " let c = nr2char(1+char2nr(c)) endw set =a imap a nnoremap ve :e $MYVIMRC nnoremap vr :source $MYVIMRC