1
0
Fork 0
env/.config/nvim/init.vim

214 lines
6.9 KiB
VimL
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

" setup plugins
call plug#begin()
" TODO: switch to language server
" rust
Plug 'rust-lang/rust.vim'
let g:rustfmt_autosave = 1
" go
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }
let g:go_term_enabled = 1
let g:go_highlight_array_whitespace_error = 1
let g:go_highlight_chan_whitespace_error = 1
let g:go_highlight_space_tab_error = 0
let g:go_highlight_extra_types = 1
let g:go_highlight_trailing_whitespace_error = 0
let g:go_highlight_operators = 1
let g:go_highlight_functions = 1
let g:go_highlight_function_parameters = 0
let g:go_highlight_function_calls = 0
let g:go_highlight_types = 1
let g:go_highlight_fields = 0
let g:go_highlight_build_constraints = 1
let g:go_highlight_generate_tags = 1
let g:go_highlight_string_spellcheck = 1
let g:go_highlight_format_strings = 1
let g:go_highlight_variable_declarations = 0
let g:go_highlight_variable_assignments = 0
let g:go_auto_type_info = 1
let g:go_auto_sameids = 1
let g:go_doc_keywordprg_enabled = 1
autocmd FileType go call s:define_go_leader_mappings()
function! s:define_go_leader_mappings()
" [r] Run go application
nnoremap <silent> <Leader>r :<C-u>GoRun<CR>
" [b] Build go application
nnoremap <silent> <Leader>b :<C-u>GoBuild<CR>
endfunction
" python
Plug 'python-mode/python-mode', { 'for': [ 'python' ], 'branch': 'develop' }
let g:pymode_rope = 1
"let g:pymode_rope_completion = 1
"let g:pymode_rope_completion_bind = '<C-e>'
call plug#end()
" statusline
function! GitBranch()
return system("git rev-parse --abbrev-ref HEAD 2>/dev/null | tr -d '\n'")
endfunction
function! GitDirty()
return system("git status --porcelain --ignore-submodules -unormal 2>/dev/null") != ""
endfunction
let w:git_branch = GitBranch()
let w:git_dirty = GitDirty()
function! StatuslineUpdateLazy()
let w:git_branch = GitBranch()
let w:git_dirty = GitDirty()
endfunction
function! StatuslineGit()
return strlen(w:git_branch) > 0?' '.w:git_branch.' ':''
endfunction
highlight StatusLine ctermfg=14 ctermbg=0 cterm=none
highlight StatusLineNC ctermfg=11 ctermbg=0 cterm=none
" sections
highlight StatuslineModeNormal ctermfg=15 ctermbg=9 cterm=italic
highlight StatuslineModeInsert ctermfg=15 ctermbg=2 cterm=italic
highlight StatuslineModeReplace ctermfg=15 ctermbg=13 cterm=italic
highlight StatuslineModeVisual ctermfg=15 ctermbg=1 cterm=italic
highlight StatuslineModeVisualLine ctermfg=15 ctermbg=1 cterm=bold,italic
highlight StatuslineModeCommand ctermfg=15 ctermbg=4 cterm=italic
highlight StatuslineModeOther ctermfg=15 ctermbg=8 cterm=italic
highlight StatuslineGit ctermfg=14 ctermbg=8 cterm=none
highlight StatuslineGitDirty ctermfg=14 ctermbg=8 cterm=bold
highlight StatuslineFileInfo ctermfg=11 ctermbg=0 cterm=italic
highlight StatuslineFileStats ctermfg=14 ctermbg=8 cterm=none
highlight StatuslineCursor ctermfg=15 ctermbg=6 cterm=none
" assembly
set statusline=
set statusline+=%#StatuslineModeNormal#%{(mode()=='n')?'\ \ NORMAL\ \ ':''}
set statusline+=%#StatuslineModeInsert#%{(mode()=='i')?'\ \ INSERT\ \ ':''}
set statusline+=%#StatuslineModeReplace#%{(mode()=='r')?'\ \ REPLACE\ ':''}
set statusline+=%#StatuslineModeVisual#%{(mode()=='v')?'\ \ VISUAL\ \ ':''}
set statusline+=%#StatuslineModeVisualLine#%{(mode()=='V')?'\ \ VISUAL\ \ ':''}
set statusline+=%#StatuslineModeVisual#%{(mode()==\"\\\<C-V>\")?'\ \ V-BLOCK\ ':''}
set statusline+=%#StatuslineModeCommand#%{(mode()=='c')?'\ \ COMMAND\ ':''}
set statusline+=%#StatuslineModeOther#%{(mode()=='s')?'\ \ SELECT\ \ ':''}
set statusline+=%#StatuslineModeOther#%{(mode()=='S')?'\ \ S-LINE\ \ ':''}
set statusline+=%#StatuslineModeOther#%{(mode()==\"\\\<C-S>\")?'\ \ S-BLOCK\ ':''}
set statusline+=%#StatuslineModeOther#%{(mode()=='t')?'\ \ TERMINAL\ ':''}
set statusline+=%#StatuslineGit#%{(w:git_dirty)?'':StatuslineGit()}
set statusline+=%#StatuslineGitDirty#%{(w:git_dirty)?StatuslineGit():''}
set statusline+=%*
set statusline+=\ %f
set statusline+=\ %m
set statusline+=\%r
set statusline+=%=
set statusline+=%#StatuslineFileInfo#
set statusline+=\ %y
set statusline+=\ %{&fileencoding?&fileencoding:&encoding}
set statusline+=\ %{&fileformat}
set statusline+=\
set statusline+=%#StatuslineFileStats#
set statusline+=\ %L×%p%%
set statusline+=\
set statusline+=%#StatuslineCursor#
set statusline+=\ %l:%c
set statusline+=\
augroup StatuslineUpdate
autocmd BufWritePost,BufEnter,ShellCmdPost * call StatuslineUpdateLazy()
augroup END
" tabline
highlight TabLineFill ctermfg=11 ctermbg=0 cterm=none
highlight TabLine ctermfg=14 ctermbg=0 cterm=none
highlight TabLineSel ctermfg=15 ctermbg=9 cterm=italic
" split
highlight VertSplit ctermfg=0 ctermbg=0 cterm=none
" highlighting
highlight SpellBad cterm=undercurl ctermbg=0
highlight SpellCap cterm=undercurl ctermbg=0
highlight SpellLocal cterm=undercurl ctermbg=0
highlight SpellRare cterm=undercurl ctermbg=0
" folding
highlight Folded ctermfg=10 ctermbg=none cterm=bold
highlight FoldColumn ctermfg=11 ctermbg=none cterm=none
set foldcolumn=1
" not enabled because folding is usually undesirable
" add modeline foldmethod=syntax to enable
"set foldmethod=syntax
" numbering
set number
highlight LineNr ctermfg=10 ctermbg=none cterm=none
" cursor and line
set cursorline
highlight CursorLine ctermfg=none ctermbg=none cterm=none
highlight CursorLineNR ctermfg=12 ctermbg=none cterm=bold
" selection
highlight Visual ctermfg=none ctermbg=0 cterm=none
" indentation
set tabstop=4
set softtabstop=4
set shiftwidth=4
" indentation overrides
"filetype indent on
" TODO: figure out how to properly use the runtime overrides
" width
highlight ColorColumn ctermfg=none ctermbg=0 cterm=none
"set textwidth=80
set colorcolumn=80
" skel
augroup Skel
autocmd BufNewFile *.sh 0r ~/.config/nvim/skel/skel.sh
autocmd BufNewFile *.md 0r ~/.config/nvim/skel/skel.md
autocmd BufNewFile *.html 0r ~/.config/nvim/skel/skel.html
autocmd BufNewFile *.py 0r ~/.config/nvim/skel/skel.py
augroup END
" general
set fillchars=stl:\ ,stlnc:\ ,vert:\ ,fold,diff:-
" hidden characters
let g:listchars = [ "tab:\\\ \\\ ,extends:,precedes:,nbsp:␣,trail:·", "tab:⇥\\\ ,extends:,precedes:,nbsp:␣,trail:·,space:·", "tab:⇥\\\ ,extends:,precedes:,nbsp:␣,trail:·,space:·,eol:↵"]
let g:listchars_mode = 0 " 0 means default is 1
highlight Whitespace ctermfg=11 ctermbg=none cterm=none
function! ToggleListChars()
let g:listchars_mode += 1
if g:listchars_mode >= len(g:listchars)
"set nolist
let g:listchars_mode = -1
call ToggleListChars()
else
set list
if g:listchars_mode == 1
highlight Whitespace ctermfg=237 ctermbg=none cterm=none
else
highlight Whitespace ctermfg=11 ctermbg=none cterm=none
endif
execute "set listchars=".g:listchars[g:listchars_mode]
endif
endfunction
call ToggleListChars()
command! NonPrintable call ToggleListChars()
command! NP call ToggleListChars()
" file browser
let g:netrw_banner=0
let g:netrw_liststyle=3
let g:netrw_winsize=25
" spellcheck
set spell spelllang=en_gb
" modeline
set modeline
" vim: set expandtab ts=2 sw=2: