dotfiles/.vim/vimrc

483 lines
18 KiB
VimL
Raw Normal View History

" try not to put any lines in your vimrc that you don't understand :)
2019-04-12 19:04:50 +02:00
set nocompatible
filetype off "required
2019-04-12 19:04:50 +02:00
" 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'
2020-02-28 02:06:26 +01:00
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', { 'on': [] }
2020-02-28 02:06:26 +01:00
Plug 'tpope/vim-surround'
" fugitive.vim: A Git wrapper so awesome, it should be illegal
2020-02-28 02:06:26 +01:00
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 'gorodinskiy/vim-coloresque'| " coloured background for colour names/codes
Plug 'lpinilla/vim-codepainter'| " text highlighting
Plug 'rhysd/git-messenger.vim'
2020-02-28 02:06:26 +01:00
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'
2020-10-05 18:32:34 +02:00
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'
2021-03-15 14:13:32 +01:00
Plug 'pearofducks/ansible-vim'
Plug 'hashivim/vim-terraform'
Plug 'aouelete/sway-vim-syntax', { 'for': 'sway' }
2021-03-15 14:13:32 +01:00
Plug 'rust-lang/rust.vim', { 'for': 'rust' }
Plug 'fatih/vim-go', { 'for': 'go', 'do': ':GoInstallBinaries' }
Plug 'chikamichi/mediawiki.vim', { 'for': 'wiki' }
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'
2020-03-18 04:40:11 +01:00
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_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'] }
let g:ale_fixers = { 'c': ['clang-format', 'clangtidy'],
\ 'cpp': ['clang-format', 'clangtidy'],
\ '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
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'
2020-02-28 02:06:26 +01:00
" 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
2020-10-05 18:32:34 +02:00
let g:NERDCustomDelimiters = { 'vim': { 'left': '"','right': '' }, 'c': { 'left': '/**','right': '*/' }, 'zsh': { 'left': '#','right': ''} }
let g:NERDTreeGitStatusWithFlags = 1
2020-02-28 02:06:26 +01:00
let g:indentLine_setColors = 1
2020-02-28 02:06:26 +01:00
let g:indentLine_char_list = ['|', '¦', '┆', '┊', ':']
2021-02-04 22:37:38 +01:00
let g:indentLine_conceallevel = 0
2020-02-28 02:06:26 +01:00
let g:git_messenger_close_on_cursor_moved = v:false
let g:git_messenger_always_into_popup = v:true
2020-10-05 18:32:34 +02:00
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'},
\}
2021-03-15 14:15:41 +01:00
let g:syntastic_always_populate_loc_list = 1
2020-02-28 02:06:26 +01:00
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():''}
2020-02-28 02:06:26 +01:00
set statusline+=%*
let g:syntastic_javascript_checkers = ['jsl']
let g:syntastic_python_checkers = ['flake8', 'pylint-3']
let g:syntastic_c_compiler = 'clang'
2020-02-28 02:06:26 +01:00
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
2020-02-28 02:06:26 +01:00
" change cursor shape for different editing modes, neovim does this by default
2021-03-23 19:37:38 +01:00
if !has('nvim')
if exists('$TMUX')
let &t_SI = "\<Esc>Ptmux;\<Esc>\e[12 q\<Esc>\\"
let &t_SI = "\<Esc>Ptmux;\<Esc>\e[4 q\<Esc>\\"
let &t_SI = "\<Esc>Ptmux;\<Esc>\e[2 q\<Esc>\\"
else
let &t_SI = "\e[12 q"
let &t_SR = "\e[4 q"
let &t_EI = "\e[2 q"
endif
endif
2021-03-15 14:16:36 +01:00
" reset cursor when vim exits
autocmd VimLeave * silent !echo -ne "\033]112\007"
command! W execute 'silent w !sudo tee % >/dev/null' | edit!
2020-02-28 02:06:26 +01:00
command! -nargs=* Make write | make! <args> | cwindow
" open a terminal in $PWD
nnoremap <silent> <Leader>tt :terminal<CR>
" toggle showing whitespace
noremap <F5> :set list!<CR>
2020-02-28 02:06:26 +01:00
" make shortcut
nnoremap <F4> :make!<cr>
2020-10-05 18:32:34 +02:00
nnoremap <F8> :TagbarToggle<CR>
2020-02-28 02:06:26 +01:00
" NERDTree
nmap <Leader>nt :NERDTreeToggle<CR>
vmap gb :<C-U>!git blame % -L<C-R>=line("'<") <CR>,<C-R>=line("'>") <CR><CR>
2020-10-05 18:32:34 +02:00
nnoremap gb :!git blame %<CR>
nnoremap <silent> <Leader>ll :w! !pdflatex -shell-escape -interaction=nonstopmode $PWD/*.tex<CR><CR>
2021-02-04 22:37:38 +01:00
nnoremap <Leader>l :exec &conceallevel ? "set conceallevel=0" : "set conceallevel=1"<CR><CR>
" toggle GitGutterLineHighlights
nnoremap <Leader>d :GitGutterLineHighlightsToggle<cr>
" ALE bindings
nmap <silent> <C-k> <Plug>(ale_previous_wrap)
nmap <silent> <C-j> <Plug>(ale_next_wrap)
nnoremap <Leader>a :ALEDetail<cr>
" ------ wayland copy
2020-10-05 18:32:34 +02:00
xnoremap <silent>"+y y:call system("wl-copy", @")<cr>
nnoremap <silent>"+p :let @"=substitute(system("wl-paste --no-newline"), '<C-v><C-m>', '', 'g')<cr>p
nnoremap "*p :let @"=substitute(system("wl-paste --no-newline --primary"), '<C-v><C-m>', '', 'g')<cr>p
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
2020-10-05 18:32:34 +02:00
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<left>"
" ------ autocmd ------
" Enable omni completion.
2020-10-05 18:32:34 +02:00
" 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
2020-02-28 02:06:26 +01:00
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 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
2021-02-04 22:38:07 +01:00
\ setlocal tabstop=2 shiftwidth=2 softtabstop=2 expandtab autoindent
\ textwidth=79 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 two take the longest to load, let's do it in a semi-non-blocking
" fashion
autocmd CursorHold,CursorHoldI * call plug#load('syntastic', 'nerdcommenter', '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 <silent> <buffer> gd <Plug>(omnisharp_go_to_definition)
autocmd FileType cs nmap <silent> <buffer> <Leader>osfu <Plug>(omnisharp_find_usages)
autocmd FileType cs nmap <silent> <buffer> <Leader>osfi <Plug>(omnisharp_find_implementations)
autocmd FileType cs nmap <silent> <buffer> <Leader>ospd <Plug>(omnisharp_preview_definition)
autocmd FileType cs nmap <silent> <buffer> <Leader>ospi <Plug>(omnisharp_preview_implementations)
autocmd FileType cs nmap <silent> <buffer> <Leader>ost <Plug>(omnisharp_type_lookup)
autocmd FileType cs nmap <silent> <buffer> <Leader>osd <Plug>(omnisharp_documentation)
autocmd FileType cs nmap <silent> <buffer> <Leader>osfs <Plug>(omnisharp_find_symbol)
autocmd FileType cs nmap <silent> <buffer> <Leader>osfx <Plug>(omnisharp_fix_usings)
autocmd FileType cs nmap <silent> <buffer> <C-\> <Plug>(omnisharp_signature_help)
autocmd FileType cs imap <silent> <buffer> <C-\> <Plug>(omnisharp_signature_help)
" Navigate up and down by method/property/field
autocmd FileType cs nmap <silent> <buffer> [[ <Plug>(omnisharp_navigate_up)
autocmd FileType cs nmap <silent> <buffer> ]] <Plug>(omnisharp_navigate_down)
" Find all code errors/warnings for the current solution and populate the quickfix window
autocmd FileType cs nmap <silent> <buffer> <Leader>osgcc <Plug>(omnisharp_global_code_check)
" Contextual code actions (uses fzf, vim-clap, CtrlP or unite.vim selector when available)
autocmd FileType cs nmap <silent> <buffer> <Leader>osca <Plug>(omnisharp_code_actions)
autocmd FileType cs xmap <silent> <buffer> <Leader>osca <Plug>(omnisharp_code_actions)
" Repeat the last code action performed (does not use a selector)
autocmd FileType cs nmap <silent> <buffer> <Leader>os. <Plug>(omnisharp_code_action_repeat)
autocmd FileType cs xmap <silent> <buffer> <Leader>os. <Plug>(omnisharp_code_action_repeat)
autocmd FileType cs nmap <silent> <buffer> <Leader>os= <Plug>(omnisharp_code_format)
autocmd FileType cs nmap <silent> <buffer> <Leader>osnm <Plug>(omnisharp_rename)
autocmd FileType cs nmap <silent> <buffer> <Leader>osre <Plug>(omnisharp_restart_server)
autocmd FileType cs nmap <silent> <buffer> <Leader>osst <Plug>(omnisharp_start_server)
autocmd FileType cs nmap <silent> <buffer> <Leader>ossp <Plug>(omnisharp_stop_server)
augroup END
" ------ adv maps ------
" strip trailing whitespace, ss (strip space)
nnoremap <silent> <Leader>ss
\ :let b:_p = getpos(".") <Bar>
\ let b:_s = (@/ != '') ? @/ : '' <Bar>
\ %s/\s\+$//e <Bar>
\ let @/ = b:_s <Bar>
\ nohlsearch <Bar>
\ unlet b:_s <Bar>
\ call setpos('.', b:_p) <Bar>
\ unlet b:_p <CR>
match Todo /\s\+$/
set softtabstop=4
set tabstop=4
set shiftwidth=4
2019-04-12 19:04:50 +02:00
set expandtab
set smarttab
set errorformat+=%.%#PHP:\ %m\ \(in\ %f\ on\ line\ %l\)%.%#,
\%E%[0-9]%#.%m:%f?rev=%.%##L%l\ %.%#,%C%.%#
2020-02-28 02:06:26 +01:00
set tags=.tags;
2019-04-12 19:04:50 +02:00
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)
2020-02-28 02:06:26 +01:00
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
2020-10-05 18:32:34 +02:00
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
2019-04-12 19:04:50 +02:00
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 --)
2019-04-12 19:04:50 +02:00
set ruler " show cursor position
set noerrorbells " bells in vim
2019-04-12 19:04:50 +02:00
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
2020-02-28 02:06:26 +01:00
set ignorecase " searches are case insensitive...
set smartcase " ... unless they contain at least one capital letter
set noscrollbind
set updatetime=1000
2019-04-12 20:35:24 +02:00
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
set conceallevel=0 " for jsons
2020-10-05 18:32:34 +02:00
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 notermguicolors
2021-03-15 14:18:07 +01:00
set gfn=Fira\ Code\ weight=450\ 12
set ballooneval " vim8+ popups
let g:netrw_beval = 1