dotfiles/.config/nvim/init.vim

520 lines
14 KiB
VimL
Raw Normal View History

2018-01-03 08:47:21 +01:00
call plug#begin('~/.local/share/nvim/plugged')
2016-10-26 11:59:39 +02:00
2020-11-15 14:30:52 +01:00
Plug 'tjdevries/colorbuddy.vim'
Plug 'tjdevries/gruvbuddy.nvim'
Plug '~/src/github.com/shelmangroup/nvim-shelman-theme'
2020-09-27 16:38:35 +02:00
2020-10-15 08:35:59 +02:00
Plug 'neovim/nvim-lspconfig'
Plug 'nvim-lua/completion-nvim'
Plug 'nvim-treesitter/nvim-treesitter'
Plug 'steelsojka/completion-buffers'
2020-10-15 08:35:59 +02:00
Plug 'junegunn/fzf', { 'do': './install --bin' }
2019-01-01 19:48:52 +01:00
Plug 'junegunn/fzf.vim'
2020-09-12 17:37:28 +02:00
" Ansible
Plug 'pearofducks/ansible-vim'
2019-01-01 19:48:52 +01:00
" Markdown
Plug 'jtratner/vim-flavored-markdown'
Plug 'tpope/vim-markdown'
" remove trailing whitespace
Plug 'bronson/vim-trailing-whitespace'
" comment lines out (gc in visual mode)
Plug 'tomtom/tcomment_vim'
" Golang
2018-01-03 08:47:21 +01:00
Plug 'fatih/vim-go'
2019-01-01 19:48:52 +01:00
" Terraform
2020-10-14 10:16:19 +02:00
Plug 'jvirtanen/vim-hcl'
2019-01-01 19:48:52 +01:00
Plug 'hashivim/vim-terraform'
" Jsonnet filetype plugin
2018-11-01 09:50:03 +01:00
Plug 'google/vim-jsonnet'
2019-01-01 19:48:52 +01:00
" toml
Plug 'cespare/vim-toml'
" Plug 'ervandew/supertab'
2018-08-28 16:37:59 +02:00
Plug 'google/vim-maktaba'
2018-01-03 08:47:21 +01:00
Plug 'junegunn/vim-easy-align'
Plug 'junegunn/goyo.vim'
Plug 'junegunn/vim-peekaboo'
2018-11-01 09:50:03 +01:00
Plug 'kshenoy/vim-signature'
2018-01-03 08:47:21 +01:00
Plug 'Matt-Deacalion/vim-systemd-syntax'
Plug 'NLKNguyen/papercolor-theme'
Plug 'tsandall/vim-rego'
2019-01-01 19:48:52 +01:00
" Git
Plug 'airblade/vim-gitgutter'
Plug 'tpope/vim-fugitive'
Plug 'junegunn/gv.vim'
2018-08-28 16:37:59 +02:00
2018-01-03 08:47:21 +01:00
call plug#end()
2019-01-01 19:48:52 +01:00
" language en_US
set encoding=utf8
set ffs=unix,dos,mac
2018-01-03 08:47:21 +01:00
set ttimeout
set ttimeoutlen=0
" set timeoutlen=150
" set ttimeoutlen=100
2016-10-26 11:59:39 +02:00
filetype on " detect the type of file
filetype plugin indent on " load filetype plugins
syntax on
set history=1000 " How many lines of history to remember
set viminfo='100,!,f1,\"100,:40,%,n~/.config/nvim/viminfo
set isk+=_,$,@,%,#,- " none of these should be word dividers, so make them not be
set hidden
set tabstop=2
set shiftwidth=2
set smarttab
set expandtab
set softtabstop=2
set autoindent
set copyindent
set smartindent " Don't mess with comments
set nojoinspaces
set ttyfast
set lazyredraw
2016-10-26 11:59:39 +02:00
set autochdir
2019-01-01 19:48:52 +01:00
set autoread "Reload files changed outside vim
2016-10-26 11:59:39 +02:00
set nofoldenable " disable folding
2020-09-28 23:39:34 +02:00
set title
set titlestring=%F%m\ %r\ %y
2016-10-26 11:59:39 +02:00
" Wordwrap
" set formatoptions=l
" formatoptions:
" c - autowrap COMMENTS using textwidth
" r - insert comment leader (?) on <enter>
" o - insert comment leader on 'o' or 'O'
" q - gq formats comments (?)
" n - recon numbered lists
" v - wrap on blanks
" t - autowrap TEXT using textwidth
set fo=croqnvt
set lbr
set backspace=eol,start,indent
"Backspace and cursor keys wrap to
set whichwrap+=<,>,h,l
set wrap
"" GUI
2019-01-01 19:48:52 +01:00
set visualbell
2016-10-26 11:59:39 +02:00
set noerrorbells
set ruler
2019-01-01 19:48:52 +01:00
set cursorline
set guicursor=n-v-c:block,i-ci-ve:ver25,r-cr:hor20,o:hor50
2016-10-26 11:59:39 +02:00
set number " line numbers
set numberwidth=6
set lz " lazy redraw
set so=7 "scope
set sidescroll=1
set scrolloff=10
set mouse=a
set switchbuf=usetab
set showtabline=1
set selection=exclusive
set shortmess=atI
set wildmenu
set wildmode=list:longest
set wildignore=*.swp,*.bak,*.pyc,*.class
set splitbelow " Preview window
2018-01-03 08:47:21 +01:00
set splitright
2020-03-01 12:58:13 +01:00
set updatetime=500
2018-01-03 08:47:21 +01:00
2019-01-01 19:48:52 +01:00
let mapleader=","
2016-10-26 11:59:39 +02:00
"" Session
let g:session_autosave = 'no'
"" Fancy status line.
2020-02-10 14:30:25 +01:00
set laststatus=0
2016-10-26 11:59:39 +02:00
"" Powerline
"set rtp+=/home/dln/.vim/bundle/powerline/powerline/bindings/vim
"" Markers / Signature
let g:SignatureMarkTextHL="Bookmark"
"" Minibuffer
let g:miniBufExplModSelTarget = 1
let g:miniBufExplorerMoreThanOne = 0
let g:miniBufExplModSelTarget = 0
let g:miniBufExplUseSingleClick = 1
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplVSplit = 25
let g:miniBufExplSplitBelow=1
2020-11-15 14:30:52 +01:00
"" minimap
let g:minimap_auto_start = 1
2016-10-26 11:59:39 +02:00
"" Searching
set showmatch
set incsearch
set ignorecase
set smartcase
set hlsearch
"" Use ack for grepping
set grepprg=ag
let g:ackprg='ag -H --nocolor --nogroup'
"" Bookmarks
let g:showmarks_enable=1
let g:showmarks_include="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
" Errormarker
let errormarker_errorgroup = "ErrorMsg"
let errormarker_warninggroup = "Todo"
"" Highlighting
map ,H :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<'
\ . synIDattr(synID(line("."),col("."),0),"name") . "> lo<"
\ . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">"<CR>
"" Hide some files
let g:explHideFiles='^\.,.*\.class$,.*\.swp$,.*\.pyc$,.*\.swo$,\.DS_Store$,/tmp/v\d\d*'
let g:explDetailedHelp=1
2019-01-01 19:48:52 +01:00
"" Backup
2016-10-26 11:59:39 +02:00
set backup
2017-05-04 08:53:52 +02:00
set backupcopy=yes
2021-01-03 13:16:07 +01:00
set backupdir=~/tmp/nvim/,~/tmp,/var/tmp,/tmp"
set directory=~/tmp/nvim/,~/tmp,/var/tmp,/tmp"
2016-10-26 11:59:39 +02:00
let myvar = strftime("%y%m%d-%H%M")
let myvar = "set backupext=_". myvar
2019-01-01 19:48:52 +01:00
execute myvar
2016-10-26 11:59:39 +02:00
au BufWritePre * let &backupext = substitute(expand("%:p"), "\/", "_", "g")
set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.class,*/target/*,*/.git/*"
2017-05-04 07:41:58 +02:00
map <silent> <space> :Buffers<cr>
2020-09-05 11:16:23 +02:00
map <silent> <leader><tab> :Buffers<cr>
2019-01-01 20:37:19 +01:00
map <silent> <leader>; :Commits<cr>
map <silent> <leader>e :GitFiles<cr>
map <silent> <leader>d :Files<cr>
map <silent> <leader>f :History<cr>
2020-08-21 08:27:03 +02:00
2019-01-01 20:37:19 +01:00
" map <silent> <leader>g :BLines<cr>
map <silent> <leader>/ :Ag<cr>
map <silent> <leader>m :Marks<cr>
2016-10-26 11:59:39 +02:00
"" Key bindings
2020-12-07 13:48:25 +01:00
cnorea wd w\|:bd
2019-12-04 17:28:14 +01:00
nmap <C-N><C-N> :set invnumber<CR>
2016-10-26 11:59:39 +02:00
imap <silent>  <c-w>
inoremap <C-s> <esc>:w<cr>a
nnoremap <C-s> :w<cr>a
" C-Left, C-right
map <silent> <esc>[1;5D <C-Left>
map <silent> <esc>[1;5C <C-Right>
nnoremap <C-Left> b
vnoremap <C-S-Left> b
nnoremap <C-S-Left> gh<C-O>b
inoremap <C-S-Left> <C-\><C-O>gh<C-O>b
nnoremap <C-Right> w
vnoremap <C-S-Right> w
nnoremap <C-S-Right> gh<C-O>w
inoremap <C-S-Right> <C-\><C-O>gh<C-O>w
2019-09-03 14:50:36 +02:00
"" Align
" Start interactive EasyAlign in visual mode (e.g. vipga)
xmap ga <Plug>(EasyAlign)
" Start interactive EasyAlign for a motion/text object (e.g. gaip)
nmap ga <Plug>(EasyAlign)
2016-10-26 11:59:39 +02:00
"" Comments
map <silent> <c-/> :TComment<cr>
imap <silent> <c-/> <c--><c-->
2019-01-01 19:48:52 +01:00
"" Git
2016-10-26 11:59:39 +02:00
let g:SCMDiffCommand = "git"
let VCSCommandDeleteOnHide = 1
let g:git_branch_status_nogit=""
let g:git_branch_status_around="[]"
let g:git_branch_status_text=""
let g:git_branch_status_head_current=1
2019-01-01 19:48:52 +01:00
let g:gitgutter_override_sign_column_highlight = 0
let g:gitgutter_sign_added = ''
let g:gitgutter_sign_modified = ''
let g:gitgutter_sign_removed = ''
let g:gitgutter_sign_removed_first_line = ''
let g:gitgutter_sign_modified_removed = ''
2016-10-26 11:59:39 +02:00
"" Buffer navigation
2020-09-05 11:16:23 +02:00
" map <silent> ` :b#<CR>
map <silent> <M-Tab> :b#<CR>
2016-10-26 11:59:39 +02:00
"" "Turn off search highlight
2019-02-04 14:18:03 +01:00
map <silent> <Bslash><cr> :noh<cr>
2016-10-26 11:59:39 +02:00
map <silent> <leader><cr> :noh<cr>
nmap <silent> ,/ :let @/=""<CR>
""
"" File types
""
au BufNewFile,BufRead manifest setlocal ft=json
2019-01-01 19:48:52 +01:00
au BufNewFile,BufRead *.aurora set filetype=python
2016-10-26 11:59:39 +02:00
au BufNewFile,BufRead *.avdl setlocal ft=avro-idl
au BufNewFile,BufRead *.avpr setlocal ft=json
2018-08-28 16:37:59 +02:00
au BufNewFile,BufRead *.bazel setlocal ft=bzl
2016-10-26 11:59:39 +02:00
au BufNewFile,BufRead *.cql set syntax=cql
au BufNewFile,BufRead *.go setlocal ft=go
au BufNewFile,BufRead *.g setlocal ft=antlr
au BufNewFile,BufRead *.js set ft=javascript
2019-01-01 19:48:52 +01:00
au BufNewFile,BufRead *.json setfiletype json
2016-10-26 11:59:39 +02:00
au BufNewFile,BufRead *.pig set filetype=pig syntax=pig
2019-01-01 19:48:52 +01:00
au BufNewFile,BufRead *.template setfiletype json
2016-10-26 11:59:39 +02:00
au BufNewFile,BufRead *.thrift setlocal ft=thrift
au BufNewFile,BufRead *.upstart set filetype=upstart
au BufNewFile,BufRead *.upstart.conf set filetype=upstart
2019-01-01 19:48:52 +01:00
au BufNewFile,BufRead SCons* set filetype=python
2016-10-26 11:59:39 +02:00
"" JavaScript, Json
let g:vim_json_syntax_conceal = 0
2018-11-01 09:50:03 +01:00
"" Jsonnet
let g:jsonnet_fmt_fail_silently = 0
autocmd BufNewFile,BufAdd,BufRead *.libjsonnet setlocal ft=jsonnet
2016-10-26 11:59:39 +02:00
" tags
set tags=./tags;/
2020-10-15 08:35:59 +02:00
"" syntax and completion
nnoremap <silent> <c-]> <cmd>lua vim.lsp.buf.definition()<CR>
nnoremap <silent> K <cmd>lua vim.lsp.buf.hover()<CR>
nnoremap <silent> gD <cmd>lua vim.lsp.buf.implementation()<CR>
nnoremap <silent> <c-k> <cmd>lua vim.lsp.buf.signature_help()<CR>
nnoremap <silent> 1gD <cmd>lua vim.lsp.buf.type_definition()<CR>
nnoremap <silent> gr <cmd>lua vim.lsp.buf.references()<CR>
nnoremap <silent> g0 <cmd>lua vim.lsp.buf.document_symbol()<CR>
nnoremap <silent> gW <cmd>lua vim.lsp.buf.workspace_symbol()<CR>
nnoremap <silent> gd <cmd>lua vim.lsp.buf.declaration()<CR>
:lua << END
2020-11-15 14:30:52 +01:00
require'lspconfig'.gopls.setup{
2020-10-15 08:35:59 +02:00
}
2020-11-15 14:30:52 +01:00
require'lspconfig'.jdtls.setup{
2020-10-15 08:35:59 +02:00
}
2020-11-15 14:30:52 +01:00
require'lspconfig'.sumneko_lua.setup{
cmd = {"lua-language-server"};
}
require'lspconfig'.terraformls.setup{
2020-10-15 08:35:59 +02:00
cmd = {'terraform-ls', 'serve'}
}
2020-11-15 14:30:52 +01:00
require'lspconfig'.vimls.setup{
2020-10-15 08:35:59 +02:00
}
2020-11-15 14:30:52 +01:00
require'lspconfig'.yamlls.setup{
2020-10-15 08:35:59 +02:00
}
END
nmap <tab> <Plug>(completion_smart_tab)
nmap <s-tab> <Plug>(completion_smart_s_tab)
let g:completion_chain_complete_list = [
2020-11-15 14:30:52 +01:00
\{'complete_items': ['lsp', 'buffers', 'snippet']},
2020-10-15 08:35:59 +02:00
\{'mode': '<c-p>'},
\{'mode': '<c-n>'}
\]
" Use <Tab> and <S-Tab> to navigate through popup menu
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
"" Diagnostics
let g:diagnostic_enable_virtual_text = 1
let g:diagnostic_insert_delay = 1
let g:diagnostic_virtual_text_prefix = '⟸ '
2020-10-15 11:39:31 +02:00
call sign_define("LspDiagnosticsErrorSign", {"text" : "🔥", "texthl" : "LspDiagnosticsError"})
2020-11-15 14:30:52 +01:00
call sign_define("LspDiagnosticsWarningSign", {"text" : "🎃", "texthl" : "LspDiagnosticsWarning"})
2020-10-15 08:35:59 +02:00
call sign_define("LspDiagnosticsInformationSign", {"text" : "I", "texthl" : "LspDiagnosticsInformation"})
2020-11-15 14:30:52 +01:00
call sign_define("LspDiagnosticsHintSign", {"text" : "💡", "texthl" : "LspDiagnosticsHint"})
2020-10-15 08:35:59 +02:00
let g:completion_matching_strategy_list = ['exact', 'substring', 'fuzzy', 'all']
set completeopt=menuone,noinsert,noselect
set shortmess+=c
autocmd BufEnter * lua require'completion'.on_attach()
"" Treesitter
:lua << END
require'nvim-treesitter.configs'.setup {
ensure_installed = "all",
highlight = {
enable = true,
},
incremental_selection = {
enable = true,
keymaps = {
init_selection = "gnn",
node_incremental = "grn",
scope_incremental = "grc",
node_decremental = "grm",
},
},
2020-10-16 09:06:39 +02:00
textobjects = {
select = {
enable = true,
keymaps = {
-- You can use the capture groups defined in textobjects.scm
["af"] = "@function.outer",
["if"] = "@function.inner",
["ac"] = "@class.outer",
["ic"] = "@class.inner",
-- Or you can define your own textobjects like this
["iF"] = {
python = "(function_definition) @function",
cpp = "(function_definition) @function",
c = "(function_definition) @function",
java = "(method_declaration) @function",
},
},
},
},
2020-10-15 08:35:59 +02:00
}
END
set foldmethod=expr
set foldexpr=nvim_treesitter#foldexpr()
2016-10-26 11:59:39 +02:00
2017-05-04 22:55:33 +02:00
"" fzf
2020-02-10 14:30:25 +01:00
function! CreateCenteredFloatingWindow()
let width = min([&columns - 4, max([80, &columns - 20])])
let height = min([&lines - 4, max([20, &lines - 20])])
" let top = ((&lines - height) / 2) - 1
let top = 1
let left = (&columns - width) / 2
let opts = {'relative': 'editor', 'row': top, 'col': left, 'width': width, 'height': height, 'style': 'minimal'}
let top = "┌" . repeat("─", width - 2) . "┐"
let mid = "│" . repeat(" ", width - 2) . "│"
let bot = "└" . repeat("─", width - 2) . "┘"
let lines = [top] + repeat([mid], height - 2) + [bot]
let s:buf = nvim_create_buf(v:false, v:true)
call nvim_buf_set_lines(s:buf, 0, -1, v:true, lines)
call nvim_open_win(s:buf, v:true, opts)
set winhl=Normal:Floating
let opts.row += 1
let opts.height -= 2
let opts.col += 2
let opts.width -= 4
call nvim_open_win(nvim_create_buf(v:false, v:true), v:true, opts)
au BufWipeout <buffer> exe 'bw '.s:buf
endfunction
2017-05-04 22:55:33 +02:00
2020-08-21 08:27:03 +02:00
let g:fzf_preview_window = ''
2020-02-10 14:30:25 +01:00
let g:fzf_layout = { 'up': '~40%', 'window': 'call CreateCenteredFloatingWindow()' }
2018-04-08 17:48:49 +02:00
let g:fzf_colors =
\ { 'fg': ['fg', 'Comment'],
\ 'bg': ['bg', 'Comment'],
\ 'hl': ['fg', 'Comment'],
\ 'fg+': ['fg', 'PMenuSel', 'PMenuSel', 'Normal'],
\ 'bg+': ['bg', 'PMenuSel', 'PMenuSel'],
\ 'hl+': ['fg', 'Statement'],
\ 'info': ['fg', 'PreProc'],
\ 'border': ['fg', 'Ignore'],
\ 'prompt': ['fg', 'Conditional'],
\ 'pointer': ['fg', 'Exception'],
\ 'marker': ['fg', 'Keyword'],
\ 'spinner': ['fg', 'Label'],
\ 'header': ['fg', 'Normal'] }
2017-05-04 22:55:33 +02:00
function! RipgrepFzf(query, fullscreen)
let command_fmt = 'rg --column --line-number --no-heading --color=always --smart-case %s || true'
let initial_command = printf(command_fmt, shellescape(a:query))
let reload_command = printf(command_fmt, '{q}')
let spec = {'options': ['--phony', '--query', a:query, '--bind', 'change:reload:'.reload_command], 'window': { 'width': 0.9, 'height': 0.6 }}
call fzf#vim#grep(initial_command, 1, fzf#vim#with_preview(spec), a:fullscreen)
endfunction
command! -nargs=* -bang RG call RipgrepFzf(<q-args>, <bang>0)
map <silent> <leader>/ :RG<cr>
2016-10-26 11:59:39 +02:00
" Show syntax highlight group in the status bar
map ,h :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<'
\ . synIDattr(synID(line("."),col("."),0),"name") . "> lo<"
\ . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">"<CR>
2020-10-15 08:35:59 +02:00
set background=dark
2016-10-26 11:59:39 +02:00
2017-06-13 07:45:56 +02:00
" Golang
2019-01-01 19:48:52 +01:00
let g:go_highlight_build_constraints = 1
2018-01-03 08:47:21 +01:00
let g:go_highlight_extra_types = 1
2017-08-15 10:59:56 +02:00
let g:go_highlight_fields = 1
2018-01-03 08:47:21 +01:00
let g:go_highlight_functions = 1
2018-11-01 09:50:03 +01:00
let g:go_highlight_function_calls = 1
2017-06-13 07:45:56 +02:00
let g:go_highlight_interfaces = 1
2018-01-03 08:47:21 +01:00
let g:go_highlight_methods = 1
2017-06-13 07:45:56 +02:00
let g:go_highlight_operators = 1
2018-01-03 08:47:21 +01:00
let g:go_highlight_structs = 1
2017-08-15 10:59:56 +02:00
let g:go_highlight_types = 1
let g:go_auto_sameids = 1
2019-09-03 14:50:36 +02:00
let g:go_def_mode='gopls'
let g:go_info_mode='gopls'
let g:go_updatetime = 200
2018-01-03 08:47:21 +01:00
let g:go_snippet_engine = "neosnippet"
2019-02-04 14:18:03 +01:00
" Let coc.nvim handle GoDef.
let g:go_def_mapping_enabled = 0
2018-01-03 08:47:21 +01:00
autocmd FileType go nmap <Leader>i <Plug>(go-info)
autocmd FileType go nmap <S-k> <Plug>(go-doc)
autocmd FileType go nmap <Leader>d <Plug>(go-doc-vertical)
2017-05-04 07:41:58 +02:00
" Hugo
let g:vim_markdown_frontmatter = 1
let g:vim_markdown_toml_frontmatter = 1
2018-01-03 08:47:21 +01:00
2017-02-21 14:49:43 +01:00
2019-12-04 14:15:15 +01:00
2018-01-03 08:47:21 +01:00
"" Terminal
2017-08-09 08:44:06 +02:00
let $NVIM_TUI_ENABLE_TRUE_COLOR=1
set termguicolors
2020-10-15 08:35:59 +02:00
let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
" " undercurl in tmux
set t_Cs = "\e[4:3m"
set t_Ce = "\e[4:0m"
2017-08-15 11:22:46 +02:00
2020-11-15 14:30:52 +01:00
lua require('colorbuddy').colorscheme('shelman-dark')
map ,l :luafile %<CR>