dotfiles/.vim/vimrc

1250 lines
42 KiB
VimL
Raw Normal View History

" try not to put any lines in your vimrc that you don't understand :)
2022-10-06 15:58:58 +02:00
" not necessary, as vim will turn this on by default, when .vimrc is found
" set nocompatible
2022-10-06 15:59:22 +02:00
scriptencoding=utf8
filetype off "required
2019-04-12 19:04:50 +02:00
2022-10-06 16:00:30 +02:00
augroup install_vim_plug
autocmd!
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
augroup END
2022-09-11 20:09:07 +02:00
augroup plug_auto_install
autocmd!
" Run PlugInstall if there are missing plugins
autocmd VimEnter * if len(filter(values(g:plugs), '!isdirectory(v:val.dir)'))
\| PlugInstall --sync | source $MYVIMRC
\| endif
augroup END
2022-10-30 02:40:54 +01:00
let g:ale_disable_lsp = 0
" let g:ale_completion_delay = 145
" let g:ale_completion_delay = 220
let g:ale_completion_delay = 200
" needs to be set before ALE is loaded, this setting controls AUTOcomplete
let g:ale_completion_enabled = 0 " should be off when deoplete is on but appears to work just fine, too
" both "filetype indent on" and "syntax on" are called by Plug, keeping DRY
call plug#begin()
" colourschemes
Plug 'liuchengxu/space-vim-theme'
Plug 'nikolasvargas/spacemacs-theme'
Plug 'cocopon/iceberg.vim'
Plug 'sainnhe/edge'
Plug 'chriskempson/base16-vim'
Plug 'axvr/photon.vim'
Plug 'Lokaltog/vim-monotone'
Plug 'https://git.sr.ht/~romainl/vim-bruin'
Plug 'fxn/vim-monochrome'
2020-02-28 02:06:26 +01:00
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'ctrlpvim/ctrlp.vim'
2022-09-12 23:14:25 +02:00
Plug 'mhinz/vim-startify'
" properly handle wayland clipboard behaviour, at least until
" https://github.com/vim/vim/issues/5157 is fixed.
Plug 'jasonccox/vim-wayland-clipboard'
" 🌷 Distraction-free writing in Vim
Plug 'junegunn/goyo.vim', { 'for': 'markdown' }
2021-05-29 21:21:59 +02:00
Plug 'preservim/nerdcommenter'
2021-05-20 20:17:10 +02:00
Plug 'airblade/vim-gitgutter'
2022-10-30 03:01:57 +01:00
Plug 'LunarWatcher/auto-pairs'
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 'bazelbuild/vim-ft-bzl', { 'for': ['starlark', 'bzl'] }
Plug 'z0mbix/vim-shfmt', { 'for': ['sh', 'bash'] }
2022-07-14 15:15:42 +02:00
" Plug 'gorodinskiy/vim-coloresque'| " coloured background for colour names/codes
" Plug 'lpinilla/vim-codepainter'| " text highlighting
Plug 'rhysd/git-messenger.vim'
2022-07-14 15:15:42 +02:00
" Plug 'Yggdroot/indentLine' " here
Plug 'adamheins/vim-highlight-match-under-cursor'
Plug 'roxma/nvim-yarp'
Plug 'roxma/vim-hug-neovim-rpc'
Plug 'Shougo/deoplete.nvim'
Plug 'prabirshrestha/async.vim'
Plug 'prabirshrestha/vim-lsp'
Plug 'rhysd/vim-lsp-ale'
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 'cespare/vim-toml', { 'for': 'toml' }
Plug 'Glench/Vim-Jinja2-Syntax', { 'for': ['ansible', 'jinja2'] }
Plug 'pearofducks/ansible-vim', { 'for': ['ansible', 'jinja2'] }
2021-11-10 01:08:28 +01:00
Plug 'hashivim/vim-terraform', { 'for': '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', 'gomod', 'gohtmltmpl', 'gotexttmpl'], 'do': ':GoInstallBinaries' }
Plug 'chikamichi/mediawiki.vim', { 'for': 'wiki' }
2021-11-10 01:08:28 +01:00
Plug 's3rvac/vim-syntax-redminewiki', { 'for': 'redminewiki' }
Plug 'mfukar/robotframework-vim', { 'for': 'robotframework' }
call plug#end()
2022-07-14 15:18:41 +02:00
" turn on vimscript 9 support
let g:airline_experimental = 1
let g:airline_powerline_fonts = 1
let g:airline_highlighting_cache = 1
" violet, wombat, deus
let g:airline_theme = 'minimalist'
2020-03-18 04:40:11 +01:00
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#formatter = 'unique_tail_improved'
" show tab number instead of number of splits
let g:airline#extensions#tabline#tab_nr_type = 1
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]'
" certain number of spaces are allowed after tabs, but not in between.
" this algorithm works well for /** */ style comments in a tab-indented file.
let g:airline#extensions#whitespace#mixed_indent_algo = 1
" turn off the warning section entirely.
let g:airline_section_warning = ''
2022-07-22 19:06:58 +02:00
let g:airline_skip_empty_sections = 1
" separator symbols
let g:airline_left_sep = ''
let g:airline_right_sep = ''
let g:airline_left_alt_sep = ''
let g:airline_right_alt_sep = ''
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
let g:airline_symbols.branch = ''
let g:airline_symbols.colnr = '℅:'
let g:airline_symbols.readonly = ''
" ale integration
let g:airline#extensions#ale#enabled = 1
" nrrwrgn integration
let g:airline#extensions#nrrwrgn#enabled = 1
" vcs integration
let g:airline#extensions#branch#enabled = 1
" show summary of changed hunks (gitgutter and/or vim-signify)
let g:airline#extensions#hunks#enabled = 1
" tabline integration
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#ctrlp#enabled = 1
let g:airline#extensions#taboo#enabled = 0
let g:airline#extensions#battery#enabled = 0
let g:airline#extensions#bookmark#enabled = 0
let g:airline#extensions#flog#enabled = 0
let g:airline#extensions#bufferline#enabled = 0
let g:airline#extensions#capslock#enabled = 0
let g:airline#extensions#coc#enabled = 0
" syntastic integration
let g:airline#extensions#syntastic#enabled = 0
" vim-csv
let g:airline#extensions#csv#enabled = 0
let g:airline#extensions#ctrlspace#enabled = 0
" Built-in extension to displays cursor in different colors depending on the
" current mode (only works in terminals iTerm, AppleTerm and xterm)
" * this fixes the issue of airline changing terminal cursor colour in kitty+fedora35/fedora36
let g:airline#extensions#cursormode#enabled = 0
" lsp
" disable diagnostics support - leave that to ALE
let g:lsp_diagnostics_enabled = 0
let g:lsp_diagnostics_virtual_text_enabled = 0
" ref:
" https://github.com/rhysd/vim-lsp-ale/blob/master/doc/vim-lsp-ale.txt#L98
" let g:lsp_ale_auto_config_vim_lsp = 0
" let g:lsp_ale_auto_config_ale = 0
2021-11-10 00:40:00 +01:00
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_list_vertical = 0
let g:ale_keep_list_window_open = 0 " no
" Show 5 lines of errors (default: 10)
let g:ale_list_window_size = 7
" Run ale upon opening a file.
let g:ale_lint_on_enter = 1
" Do not run ale upon changes to the file.
" let g:ale_lint_on_text_changed = 'never'
let g:ale_lint_on_text_changed = 'always'
" Run ale after leaving insert mode.
let g:ale_lint_on_insert_leave = 1
let g:ale_lint_delay = 300| " the default being 200
let g:ale_linters = {
\ 'go': ['gofumpt', 'govet', 'gofmt', 'golangci-lint', 'gopls'],
\ 'dockerfile': ['hadolint'],
\ 'c': ['clang-format', 'clangd', 'clangtidy', 'cppcheck', 'cquery', 'flawfinder'],
\ 'cpp': ['clang-format', 'g++', 'clang', 'clangd', 'clangtidy', 'cppcheck', 'flawfinder'],
\ 'cs': ['OmniSharp'],
\ 'hare': ['hare', 'vimls', 'vim-lsp'],
\ 'lua': ['vimls'],
\ 'nix': ['rnix_lsp', 'statix', 'nixpkgs-fmt', 'vimls'],
\ 'python': ['vim-lsp', 'pylint', 'yapf', 'isort'],
\ 'rust': ['analyzer', 'cargo', 'rls', 'vimls'],
\ 'sh': ['shellcheck', 'shfmt', 'shell', 'vimls'],
\ 'bash': ['shellcheck', 'shfmt', 'shell', 'vimls'],
\ 'systemd': ['systemd_analyze', 'systemdlint'],
\ 'vim': ['vint', 'vimls', 'vim-lsp'],
\ 'tex': ['chktex', 'vimls'],
\ 'tf': ['vimls', 'vim-lsp', 'tflint', 'terraform', 'tfsec', 'checkov'],
\ 'terraform': ['vimls', 'vim-lsp', 'tflint', 'terraform', 'tfsec', 'checkov'],
\ 'yaml': ['yaml-language-server', 'spectral', 'swaglint','yamllint'],
\ 'zsh': ['shellcheck', 'shell', 'vimls'],
\ }
let g:ale_fixers = { 'c': ['clang-format', 'clangd', 'clangtidy', 'cquery', 'flawfinder'],
\ 'cpp': ['clang-format', 'clangtidy'],
\ 'python': ['nayvy#ale_fixer', 'isort', 'yapf'],
\ 'go': ['gofumpt'],
\ 'nix': ['nixpkgs-fmt'],
\ 'rust': ['rustfmt', 'trim_whitespace', 'remove_trailing_lines'],
\ 'vim': ['vint', 'vimls', 'generic'],
\ 'sh': ['shfmt'],
\ 'bash': ['shfmt'],
\ 'yaml': ['yamlfix'],
\ }
if has('patch-8.1.1880')
" set completeopt=longest,menuone,popuphidden
set completeopt=longest,menuone,popup
" 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
2021-11-10 00:42:30 +01:00
let g:gitgutter_preview_win_floating = 1
set foldtext=gitgutter#fold#foldtext()
" let g:gitgutter_map_keys = 0
nmap ghs <Plug>(GitGutterStageHunk)
nmap ghu <Plug>(GitGutterUndoHunk)
nnoremap <leader>d :GitGutterLineHighlightsToggle<cr>
let g:deoplete#enable_at_startup = 0
" load deoplete config.
exec 'source ' . escape(expand('~/.vim'),' ') . '/' . 'deoplete.vimrc.vim'
2022-10-30 02:56:59 +01:00
" clang-format
let g:clang_format#auto_format=0
let g:clang_format#detect_style_file=1
augroup clang_format
autocmd!
autocmd FileType c,cpp,proto nnoremap <buffer><Leader>cf :<C-u>ClangFormat<cr>
autocmd FileType c,cpp,proto vnoremap <buffer><Leader>cf :ClangFormat<cr>
function! Formatonsave()
" alternative function to clang-format#auto_format param
if exists(':ClangFormat')
let l:formatdiff = 1
" pyf /usr/share/clang/clang-format.py
ClangFormat
endif
endfunction
" autocmd BufWritePre *.h,*.cc,*.cpp call Formatonsave()
augroup END
" latex
let g:tex_flavor = 'latex'
let g:tex_conceal='abdmg'
let g:Tex_MultipleCompileFormats='pdf,bib,pdf'
" let g:Tex_CompileRule_pdf = 'mkdir -p build && lualatex -output-directory=build -interaction=nonstopmode $* && cp *.bib build && cd build && bibtex %:r && cd .. && lualatex -output-directory=build -interaction=nonstopmode $* && mv build/$*.pdf .'
let g:vimtex_view_method = 'zathura'
" let g:vimtex_compiler_progname = 'pdflatex -shell-escape --interaction=nonstopmode'
" let g:vimtex_compiler_progname = 'lualatex --shell-escape --interaction=nonstopmode --synctex=1 %O %S'
" let g:vimtex_compiler_progname = 'lualatex -shell-escape --interaction=nonstopmode --synctex=1'
let g:vimtex_compiler_engine = 'lualatex'
" let g:vimtex_compiler_engine = 'pdflatex'
let g:vimtex_compiler_latexmk = {
\ 'options' : ['-pdf', '-verbose', '-bibtex', '-file-line-error','-synctex=1', '--interaction=nonstopmode'],
\}
let g:matchup_matchparen_deferred = 1
let g:vimtex_quickfix_open_on_warning = 0
let g:vimtex_quickfix_enabled = 0
2020-02-28 02:06:26 +01:00
" nerdcommenter
" _ stands for forward slash (/)
noremap <silent><c-_> :call nerdcommenter#Comment(0,"toggle")<CR>
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
let g:NERDCustomDelimiters = {
\ 'vim': { 'left': '"','right': '' },
\ 'c': {'left': '/**','right': '*/' },
\ 'zsh': { 'left': '#','right': ''},
\ 'sysctl': {'left': '#', 'right': ''},
\ 'systemd': {'left': ';', 'right': ''},
\}
" let g:NERDTreeGitStatusWithFlags = 1
2020-02-28 02:06:26 +01:00
2022-07-22 18:35:29 +02:00
" netrw
let g:netrw_banner = 0
let g:netrw_keepdir = 0
" prefer tree-style listing
let g:netrw_liststyle = 3
" let g:netrw_liststyle = 1
let g:netrw_sort_options = 'i'
" open files in a new horizontal split
let g:netrw_browse_split = 1
2022-07-22 18:08:29 +02:00
" indentline
" let g:indentLine_setColors = 1
" let g:indentLine_char_list = ['|', '¦', '┆', '┊', ':']
" let g:indentLine_concealcursor = 'inc'
" let g:indentLine_conceallevel = 0
" let g:indentLine_conceallevel = 2
2020-02-28 02:06:26 +01:00
" set conceallevel for json and markdown
let g:vim_json_conceal = 0
let g:markdown_syntax_conceal = 0
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'},
\}
" --------------------------
" syntastic
"""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_quiet_messages = { "type": "style" }
"""let g:syntastic_enable_highlighting=1
"""let g:syntastic_echo_current_error=1
"""" let g:syntastic_auto_jump=1
"""let g:syntastic_auto_jump = 0
"""let g:syntastic_id_checkers = 1
"""let g:syntastic_error_symbol = "✗"
"""let g:syntastic_warning_symbol = "⚠"
"""function! SyntasticCheckHook(errors)
""" if !empty(a:errors)
""" let g:syntastic_loc_list_height = min([len(a:errors), 10])
""" endif
"""endfunction
"""
"""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_checkers = ['cppcheck', 'g++']
"""let g:syntastic_cpp_cppcheck_args = "--language=c++ --std=c++20 --enable=all --verbose --suppress=unmatchedSuppression --suppress=missingIncludeSystem ./*.{cpp,h}"
"""let g:syntastic_cpp_compiler = 'g++'
"""let g:syntastic_cpp_compiler_options = ' -std=c++20 -Wall -Wextra'
"""let g:syntastic_cpp_check_header = 1
"""let g:syntastic_cpp_no_include_search = 0
"""let g:syntastic_cpp_remove_include_errors = 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:syntastic_tex_checkers = ['lacheck', 'text/language_check']
"""let g:syntastic_tex_checkers = ['text/language_check', 'lacheck']
"""let g:syntastic_gitcommit_checkers = ['language_check']
"""let g:syntastic_yaml_checkers = ['yamllint']
"""let g:syntastic_make_checkers = ['gnumake']
"""let g:syntastic_aggregate_errors = 1
2022-07-22 18:37:25 +02:00
" ansible-vim settings
let g:ansible_unindent_after_newline=1
let g:ansible_attribute_highlight='ob'
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
2022-07-14 15:37:41 +02:00
2022-10-30 03:01:57 +01:00
" autopairs
" sometimes issues with expanding {}
let g:AutoPairsMultilineClose = 0
let g:AutoPairsFlyMode = 0
let g:AutoPairsMapCR = 0
" inoremap <CR> <esc>:call autopairs#AutoPairsReturn()<cr>i
" let g:AutoPairsFlyModeBlacklist =
" let g:AutoPairsShortcutToggle = '<c-h>'
let b:AutoPairsShortcutToggle = ''
let b:AutoPairsShortcutToggleMultilineClose = ''
let g:AutoPairsShortcutToggle = ''
let g:AutoPairsShortcutToggleMultilineClose = ''
" nmap <c-m><c-h> :call autopairs#AutoPairsToggleMultilineClose()
" Enable highlighting of C++11 attributes
let g:cpp_attributes_highlight = 1
" Highlight struct/class member variables (affects both C and C++ files)
let g:cpp_member_highlight = 1
2022-07-14 15:37:41 +02:00
" ctrlp
" Setup some default ignores
let g:ctrlp_custom_ignore = {
\ 'dir':'\v[\/](\.(git\/(branches|hooks|info|logs|modules|objects|rebase-merge|refs)|hg|svn)|\_site)$',
\ 'file':'\v\.(exe|so|dll|class|png|jpg|jpeg)|(\.(git\/(description|index|packed-refs|COMMIT_EDITMSG|HEAD|FETCH_HEAD|ORIG_HEAD|REBASE_HEAD)))$',
\}
" Use the nearest .git directory as the cwd
" This makes a lot of sense if you are working on a project that is in version
" control. It also supports works with .svn, .hg, .bzr.
" let g:ctrlp_working_path_mode = 'r'
let g:ctrlp_working_path_mode = 'raw'
nnoremap '<c-p>' :<CtrlP><cr>
let g:ctrlp_map = '<c-p>'
let g:ctrlp_show_hidden = 1
" Use a leader instead of the actual named binding
nmap <leader>p :CtrlP<cr>
" ctrlp buffers
" Easy bindings for its various modes
nmap <leader>bb :CtrlPBuffer<cr>
nmap <leader>bm :CtrlPMixed<cr>
nmap <leader>bs :CtrlPMRU<cr>
" buffers
nmap <leader>T :enew<cr>
nmap <leader>bq :bp <BAR> bd #<cr>
nmap <leader>gd :bd<cr>
map gn :bn<cr>
map gp :bp<cr>
2022-07-14 15:37:41 +02:00
2022-10-30 03:11:26 +01:00
""" tmux cursor
""" change cursor shape for different editing modes, neovim does this by default
"if !has('nvim')
" if exists('$TMUX')
" let &t_SI = "\<Esc>Ptmux;\<Esc>\e[12 q\<Esc>\\"
" let &t_SR = "\<Esc>Ptmux;\<Esc>\e[4 q\<Esc>\\"
" let &t_EI = "\<Esc>Ptmux;\<Esc>\e[2 q\<Esc>\\"
" else
" let &t_SI = "\e[12 q"
" let &t_SI = "\<Esc>]12;purple\x7"
" let &t_SR = "\e[4 q"
" let &t_EI = "\e[2 q"
" endif
"endif
""" reset cursor when vim exits -> messes up cursor, don't do this
"""autocmd VimLeave * silent !echo -ne "\033]112\007"
command! W execute 'w' | edit!
command! WW execute 'silent w !sudo tee % >/dev/null' | edit!
2020-02-28 02:06:26 +01:00
command! -nargs=* Make write | make! <args> | cwindow
command Note execute 'e ~/Sync/notes/' . strftime('%y-%m-%d-%H:%M:%S') . '.md'
2022-10-30 03:15:53 +01:00
command NoteLocal execute 'e ./' . strftime('%y-%m-%d-%H:%M:%S') . '.md'
2022-07-22 19:09:49 +02:00
" always show full path on <c-g>
nnoremap <c-g> 1<c-g>
" open a terminal in $PWD
nnoremap <silent> <Leader>tt :terminal<CR>
" terminal normal mode
tnoremap <F1> <C-W>N
" toggle showing whitespace
noremap <F5> :set list!<CR>
2020-02-28 02:06:26 +01:00
" make shortcut
nnoremap <F4> :term ++hidden ++open make<cr>
nnoremap <leader><F4> :term ++open make<cr>
2020-10-05 18:32:34 +02:00
nnoremap <F8> :TagbarToggle<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>
" ll provided by vimtex
2022-10-30 03:17:47 +01:00
" nnoremap <silent> <Leader>kk :w! !pdflatex -shell-escape -interaction=nonstopmode ./*.tex<CR><CR>
function! Pdfpls()
echom 'compiling ur tex goodness!'
" w!
:!pdflatex -shell-escape -interaction=nonstopmode ./*.tex
:!bibtex $PWD/*.aux
2022-10-30 03:17:47 +01:00
:!pdflatex -shell-escape -interaction=nonstopmode ./*.tex
endfunction
function! PdfLuapls()
echom 'compiling ur tex goodness!'
" w!
:!lualatex -shell-escape -interaction=nonstopmode ./*.tex
:!bibtex $PWD/*.aux
" :!lualatex -shell-escape -interaction=nonstopmode ./*.tex
endfunction
function! PdfBibLuapls()
" https://tex.stackexchange.com/a/308565
" echom "compiling ur tex goodness!"
" :!mkdir -p build
" :!lualatex -output-directory=build -shell-escape -interaction=nonstopmode ./*.tex
" :!cp *.bib build
" :!cd build
" :!bibtex %:r
" :!cd ..
" :!lualatex -output-directory=build -shell-escape -interaction=nonstopmode ./*.tex
" :!mv build/*.pdf .
:!lualatex -shell-escape -interaction=nonstopmode ./*.tex
:!bibtex ./*.aux
:!lualatex -shell-escape -interaction=nonstopmode ./*.tex
endfunction
" nnoremap <silent><leader>lb :call Pdfpls()<cr><esc>
" nnoremap <silent><leader>lb :call PdfLuapls()<cr><esc>
" nnoremap <silent><leader>lb :call PdfLuapls()<cr>
nnoremap <silent><leader>lb :call PdfBibLuapls()<cr><esc>
2021-02-04 22:37:38 +01:00
nnoremap <Leader>l :exec &conceallevel ? "set conceallevel=0" : "set conceallevel=1"<CR><CR>
" ALE bindings
2022-08-09 17:54:45 +02:00
nmap <silent> <C-k> :ALEPreviousWrap<cr>
nmap <silent> <C-j> :ALENextWrap<cr>
nnoremap <Leader>a :ALEDetail<cr>
2022-08-11 12:36:04 +02:00
nnoremap <c-LeftMouse> :ALEGoToDefinition<cr>
2022-08-09 17:56:10 +02:00
" [bro]wse [ol]d files
nnoremap <leader>r :bro ol<cr>
2022-08-11 12:37:19 +02:00
" easy-way ifndef tmpl
nnoremap <silent><f12> "%phr_I#ifndef __<Esc>gUwyypldwidefine <Esc>yypldwiendif //<Esc>O<Esc>
2022-08-11 12:37:41 +02:00
" tab switching
nnoremap <silent><f6> gT
nnoremap <silent><f7> gt
" resize windows
map - <C-W>-
map + <C-W>+
2022-10-30 03:18:21 +01:00
" vmap to stay in Visual Mode after shifting > and <
vmap < <gv
vmap > >gv
" moving visual blocks
vnoremap J :m '>+1<CR>gv=gv
vnoremap K :m '<-2<CR>gv=gv
2022-08-09 17:56:10 +02:00
2022-08-09 18:00:07 +02:00
"------------------------------------
" vim-go.vim
"------------------------------------
" use gopls
let g:go_def_mode='gopls'
let g:go_info_mode='gopls'
" Status line types/signatures.
let g:go_auto_type_info = 1
2022-10-30 03:18:57 +01:00
let g:go_highlight_types = 1
2022-08-09 18:00:07 +02:00
let g:go_highlight_functions = 1
let g:go_highlight_methods = 1
let g:go_highlight_structs = 1
let g:go_highlight_interfaces = 1
let g:go_highlight_operators = 1
let g:go_highlight_build_constraints = 1
let g:go_highlight_extra_types = 1
" if sluggish
" let g:go_highlight_structs = 0
" let g:go_highlight_interfaces = 0
" let g:go_highlight_operators = 0
let g:go_list_type = 'quickfix'
" let g:go_version_warning = 0
let g:go_fmt_fail_silently = 0
" auto formatting and importing
let g:go_fmt_command='gopls'
let g:go_fmt_autosave = 1
" go install mvdan.cc/gofumpt@latest
let g:go_gopls_gofumpt=1
2022-08-16 14:03:51 +02:00
" let lsp handle connecting to gopls
let g:go_gopls_enabled = 0
2022-08-09 18:00:07 +02:00
augroup vimgo
au!
au FileType go nmap <leader>gb <Plug>(go-build)
au FileType go nmap <leader>b <Plug>(go-build)
au FileType go nmap <leader>gr <Plug>(go-run)
au FileType go nmap <leader>gt <Plug>(go-test)
au FileType go nmap <Leader>gs <Plug>(go-implements)
au FileType go nmap <Leader>gi <Plug>(go-info)
au FileType go nmap <Leader>ge <Plug>(go-rename)
au FileType go nmap <Leader>gd <Plug>(go-doc)
augroup END
2022-04-29 00:26:07 +02:00
" go_tags
"------------------------------------
exec 'source ' . escape(expand('~/.vim'),' ') . '/' . 'gotags.vimrc.vim'
2022-04-29 00:26:07 +02:00
2022-08-09 18:03:26 +02:00
" ------ wayland copy and pasting
let s:env = toupper(substitute(system('uname'), '\n', '', ''))
if s:env =~# 'LINUX' && executable('wl-copy')
xnoremap <silent>"+y y:call system("wl-copy", @")<cr>
xnoremap <silent>"*y y:call system("wl-copy", @")<cr>
endif
if s:env =~# 'LINUX' && executable('wl-paste')
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
endif
2022-04-29 00:26:07 +02:00
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
" 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
augroup save_load_views
autocmd!
" au BufWinLeave ?* mkview
" au BufWinLeave *.* silent mkview
" au BufWinLeave ?* mkview
" au VimLeavePre ?* mkview
" au BufWinEnter ?* silent loadview
" au BufReadPost ?* loadview
" au BufWinEnter,BufRead *.* loadview
" au BufWinEnter ?* loadview
au BufLeave *.* mkview
au BufWinEnter *.* loadview
augroup END
augroup filetypes
autocmd!
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 filetype=js
au BufNewFile,BufRead,BufEnter *.md
\ setlocal textwidth=79 foldmethod=manual filetype=markdown
\ fileformat=unix expandtab
2022-10-06 15:37:46 +02:00
au FileType sway setl textwidth=99
\ tabstop=4 shiftwidth=4 softtabstop=4 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
" Linux kernel style tabs - not for cpp
" au BufNewFile,BufRead,BufEnter *.c,*.h,*.cpp
au BufNewFile,BufRead,BufEnter *.c,*.h
\ set tabstop=8 shiftwidth=8 softtabstop=8 noexpandtab autoindent
\ textwidth=79 fileformat=unix omnifunc=lsp#complete
au BufNewFile,BufRead,BufEnter *.cpp,*.h,*.hpp
\ set tabstop=4 shiftwidth=4 softtabstop=4 noexpandtab autoindent
\ textwidth=79 fileformat=unix omnifunc=lsp#complete ft=cpp
" \ textwidth=79 fileformat=unix
au FileType cpp
\ set tabstop=4 shiftwidth=4 softtabstop=4 noexpandtab autoindent
\ textwidth=79 fileformat=unix omnifunc=lsp#complete
" \ textwidth=79 fileformat=unix
au FileType tex setlocal tabstop=2
2022-08-09 17:47:09 +02:00
au BufNewFile,BufRead,BufEnter *.tex
\ setlocal tabstop=2 shiftwidth=2 softtabstop=2 expandtab autoindent
\ textwidth=79 fileformat=unix conceallevel=0
2021-02-04 22:38:07 +01:00
au BufNewFile,BufRead,BufEnter *.bib
\ setlocal ft=bib tabstop=2 shiftwidth=2 softtabstop=2 noexpandtab autoindent
\ fileformat=unix conceallevel=0
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab indentkeys-=0#
\ indentkeys-=<:> foldmethod=indent nofoldenable
2022-08-09 17:43:57 +02:00
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
" no autocomments, for example when entering insert mode above or below a
" commented line
autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o
augroup END
2022-08-09 17:43:11 +02:00
augroup line_too_long
autocmd!
autocmd winEnter,BufEnter * call clearmatches() | call matchadd('ColorColumn', '\%>80v', 100)
augroup END
augroup async_plug_load
autocmd!
2021-05-29 21:21:59 +02:00
" these plugins take the longest to load, let's do it in a semi-non-blocking
" fashion
2022-08-09 17:38:53 +02:00
autocmd CursorHold,CursorHoldI * call plug#load('vim-clang', 'vim-speeddating')
\| autocmd! async_plug_load
augroup END
if executable('clangd')
augroup lsp_clangd
autocmd!
autocmd User lsp_setup call lsp#register_server({
\ 'name': 'clangd',
\ 'cmd': {server_info->['clangd']},
\ 'allowlist': ['c', 'cpp'],
\ })
augroup END
endif
if executable('gopls')
augroup lsp_go
autocmd!
autocmd User lsp_setup call lsp#register_server({
\ 'name': 'gopls',
2022-08-16 14:03:51 +02:00
\ 'cmd': ['gopls', '-remote=unix;/tmp/.gopls-daemon.sock'],
\ 'allowlist': ['go', 'gomod', 'gosum','gotexttmpl','gohtmltmpl'],
\ 'gofumpt': 'true',
\ })
augroup END
endif
if executable('rnix-lsp')
augroup lsp_nix
autocmd!
au User lsp_setup call lsp#register_server({
\ 'name': 'rnix-lsp',
\ 'cmd': {server_info->[&shell, &shellcmdflag, 'rnix-lsp']},
\ 'allowlist': ['nix'],
\ })
augroup END
endif
" zig language server
if executable('zls')
augroup lsp_zig
autocmd!
au User lsp_setup call lsp#register_server({
\ 'name': 'zls',
\ 'cmd': {server_info->[&shell, &shellcmdflag, 'zls']},
\ 'allowlist': ['zig'],
\ })
augroup END
endif
if executable('pyls')
" pip install python-language-server
2022-10-06 15:41:40 +02:00
augroup lsp_py
autocmd!
autocmd User lsp_setup call lsp#register_server({
\ 'name': 'pyls',
\ 'cmd': {server_info->['pyls']},
\ 'allowlist': ['python'],
\ })
augroup END
endif
if executable('omnisharp')
" https://www.rockyourcode.com/use-vim-for-c-sharp-development-on-linux/
augroup lsp_omnisharp
autocmd!
autocmd User lsp_setup call lsp#register_server({
\ 'name': 'omnisharp-roslyn',
\ 'cmd': {_->[&shell, &shellcmdflag, 'mono $HOME/.bin/omnisharp/omnisharp --languageserver']},
\ 'whitelist': ['cs']
\})
autocmd User lsp_server_init call <SID>setup_ls()
autocmd BufEnter * call <SID>setup_ls()
augroup END
endif
function! s:on_lsp_buffer_enabled() abort
setlocal omnifunc=lsp#complete
setlocal signcolumn=yes
if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif
nmap <buffer> gd <plug>(lsp-definition)
nmap <buffer> gs <plug>(lsp-document-symbol-search)
nmap <buffer> gS <plug>(lsp-workspace-symbol-search)
nmap <buffer> gr <plug>(lsp-references)
nmap <buffer> gi <plug>(lsp-implementation)
" nmap <buffer> gt <plug>(lsp-type-definition)
nmap <buffer> <leader>rn <plug>(lsp-rename)
nmap <buffer> [g <plug>(lsp-previous-diagnostic)
nmap <buffer> ]g <plug>(lsp-next-diagnostic)
nmap <buffer> K <plug>(lsp-hover)
inoremap <buffer> <expr><c-f> lsp#scroll(+4)
inoremap <buffer> <expr><c-d> lsp#scroll(-4)
" let g:lsp_format_sync_timeout = 1000
let g:lsp_format_sync_timeout = 700
2022-10-06 15:42:55 +02:00
augroup lsp_format_sync
autocmd!
autocmd! BufWritePre *.rs,*.go call execute('LspDocumentFormatSync')
augroup END
" refer to doc to add more commands
endfunction
augroup lsp_install
au!
" call s:on_lsp_buffer_enabled only for languages that have the server
" registered.
autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
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
2022-07-22 18:12:23 +02:00
set wrapscan " go back to beginning of a buffer once we reach end
2022-07-22 18:10:59 +02:00
set ignorecase " searches are case insensitive...
set smartcase " ... unless they contain at least one capital letter
2019-04-12 19:04:50 +02:00
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
2022-07-21 11:49:22 +02:00
set listchars=trail:•,tab:>-,nbsp:☣,eol,extends:,precedes:
2022-07-21 12:02:47 +02:00
set nolist " show/hide tabs and EOL chars (hidden characters)
2022-07-22 18:15:47 +02:00
" don't indent wrapped lines
set nobreakindent
set confirm " ask confirmation like save before quit.
set wildmenu " Tab completion menu when using command mode
2022-07-22 18:14:33 +02:00
" https://bitbucket.org/sjl/dotfiles/src/tip/vim/vimrc#cl-153
set wildignore+=.hg,.git,.svn " Version control
set wildignore+=*.aux,*.out,*.toc " LaTeX intermediate files
set wildignore+=*.jpg,*.bmp,*.gif,*.png,*.jpeg " binary images
set wildignore+=*.o,*.obj,*.exe,*.dll,*.manifest " compiled object files
set wildignore+=*.dwo " DWARF debug object files
set wildignore+=*.spl " compiled spelling word lists
set wildignore+=*.pyc " Python byte code
set wildignore+=node_modules/**
2020-10-05 18:32:34 +02:00
set wildmode=longest:longest,full
2022-07-22 18:15:19 +02:00
" filler lines to keep text position; start diff with vertical splits; don't
" ignore case and whitespace changes
set diffopt=filler,vertical
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
2022-07-21 12:03:28 +02:00
" Make <,> match pairs, too.
" https://github.com/EHartC/dot-vimrc/blob/master/vim%20config/styling.vim
set matchpairs+=<:>
2022-08-12 21:05:58 +02:00
set matchtime=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
2021-11-10 01:21:07 +01:00
set colorcolumn=80 " Highlight column 80 to get coding horizontal bound.
set noerrorbells " bells in vim
2019-04-12 19:04:50 +02:00
set viminfo='50,"50 " '=marks for x files, "=registers for x files
2022-07-22 18:16:44 +02:00
set foldmethod=manual " manual folding
set encoding=utf-8 " important for powerline besides others
2022-07-22 18:17:14 +02:00
set fileencoding=utf-8 " set encoding for newly saved files
set noscrollbind
2022-07-22 18:18:49 +02:00
set cmdheight=2 " lines under {status,air}line
2021-09-01 16:42:29 +02:00
set updatetime=250
2019-04-12 20:35:24 +02:00
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
2021-05-29 21:22:54 +02:00
" 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
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
2022-07-21 12:08:15 +02:00
" persistent undo history (even if close buffer)
" Save undos after file closes
set undofile
" where to save undo histories
set undodir=~/.vim/undo//
" How many undos
set undolevels=2000
" save whole buffer for undo on reload if number of lines is smaller than
set undoreload=10001
" make folders automatically if they don't already exist
if !isdirectory(expand(&undodir))
2022-08-11 12:48:30 +02:00
call mkdir(expand(&undodir), 'p')
2022-07-21 12:08:15 +02:00
endif
2022-08-12 21:01:34 +02:00
set nobackup
set nowritebackup
set directory=~/.vim/swp//
if !isdirectory(expand(&directory))
call mkdir(expand(&directory), 'p')
endif
2022-07-21 12:08:15 +02:00
set laststatus=2 " show powerline status bar
set t_Co=256
2022-08-12 21:05:58 +02:00
set guifont=Fira\ Code\ weight=450\ 12
set ballooneval " vim8+ popups
let g:netrw_beval = 1
set t_vb=
" cursorline optimizations
set cursorlineopt=number
syntax sync minlines=256
2022-08-11 12:59:11 +02:00
" use +/clipboard as default register
set clipboard=unnamedplus
2022-08-11 12:58:49 +02:00
" vim help had this to say about 'exrc':
"
" Enables the reading of .vimrc, .exrc and .gvimrc in the current directory.
" Setting this option is a potential security leak. E.g., consider unpacking
" a package or fetching files from github, a .vimrc in there might be a trojan
" horse. BETTER NOT SET THIS OPTION!
" Instead, define an autocommand in your .vimrc to set options for a matching
" directory.
"
" but since it's needed for direnv, we have to enable it.
set exrc
set secure
2021-11-10 01:26:02 +01:00
2022-08-11 12:33:20 +02:00
function! AskQuit (msg, proposed_action)
if confirm(a:msg, "&Quit?\n" . a:proposed_action) == 1
exit
endif
endfunction
function! EnsureDirExists ()
let required_dir = expand('%:h')
if !isdirectory(required_dir)
call AskQuit('Directory "' . required_dir . '" doesn''t exist.', '&Create it?')
try
call mkdir( required_dir, 'p' )
catch
call AskQuit('Can''t create "' . required_dir . '"', '&Continue anyway?')
endtry
endif
endfunction
augroup AutoMkdir
autocmd!
autocmd BufNewFile * :call EnsureDirExists()
augroup END
2021-11-10 01:26:02 +01:00
2022-08-11 12:41:49 +02:00
" as per https://stackoverflow.com/a/38775966
function! HeaderToggle() " bang for overwrite when saving vimrc
let file_path = expand('%')
let file_name = expand('%<')
let extension = split(file_path, '\.')[-1] " '\.' is how you really split on dot
let err_msg = 'There is no file '
if extension ==# 'cpp'
let next_file = join([file_name, '.h'], '')
if filereadable(next_file)
:e %<.h
else
echo join([err_msg, next_file], '')
endif
elseif extension ==# 'h'
let next_file = join([file_name, '.cpp'], '')
if filereadable(next_file)
:e %<.cpp
else
echo join([err_msg, next_file], '')
endif
endif
endfunction
nnoremap <leader>hh :call HeaderToggle()<cr>
if(&filetype ==# 'c') || (&filetype ==# 'cpp')
if isdirectory('include')
set path+=include
elseif isdirectory('inc')
set path+=inc
elseif isdirectory('src/include')
set path+=src/include
endif
endif
silent function! LINUX()
return has('unix') && !has('macunix') && !has('win32unix')
endfunction
2022-08-11 12:41:49 +02:00
" note: this might be outdated at this point, I am not sure.
" https://github.com/bling/vim-airline/issues/539
function! RefreshUI()
if exists(':AirlineRefresh')
AirlineRefresh
else
" Clear & redraw the screen, then redraw all statuslines.
redraw!
redrawstatus!
endif
endfunction
" from vim wiki
augroup autoReloadVimRC
autocmd!
" automatically reload vimrc when it's saved
autocmd BufWritePost ~/.vimrc so ~/.vimrc | call RefreshUI()
augroup END
" reload config
nnoremap <Leader>ve :e $MYVIMRC<CR>
" reload config and call refresh fn
nnoremap <Leader>vr :source $MYVIMRC<CR>call RefreshUI()<CR>
2022-05-06 22:52:07 +02:00
" https://sw.kovidgoyal.net/kitty/faq/#using-a-color-theme-with-a-background-color-does-not-work-well-in-vim
" work wround vim's background colour erase
let &t_ut=''
2022-05-06 22:52:07 +02:00
" as per https://github.com/direnv/direnv/wiki/Vim
2022-08-11 12:48:30 +02:00
if exists('$EXTRA_VIM')
2022-05-06 22:52:07 +02:00
for path in split($EXTRA_VIM, ':')
2022-08-11 12:48:30 +02:00
exec 'source '.path
2022-05-06 22:52:07 +02:00
endfor
endif
2022-07-21 16:30:54 +02:00
" vim: ft=vim ff=unix expandtab ts=2 sw=2