scriptencoding utf-8 " vim-plug---START call plug#begin('~/.config/nvim/plugged') " Plugins Plug 'airblade/vim-gitgutter' Plug 'cespare/vim-toml' Plug 'vim-scripts/nginx.vim' Plug 'elixir-lang/vim-elixir' Plug 'fatih/vim-go' Plug 'gabesoft/vim-ags' Plug 'google/protobuf' Plug 'hashivim/vim-terraform' Plug 'hrsh7th/cmp-buffer' Plug 'hrsh7th/cmp-calc' Plug 'hrsh7th/cmp-nvim-lsp' Plug 'hrsh7th/cmp-nvim-lua' Plug 'hrsh7th/cmp-path' Plug 'hrsh7th/cmp-vsnip' Plug 'hrsh7th/nvim-cmp' Plug 'hrsh7th/vim-vsnip' Plug 'junegunn/fzf' Plug 'kchmck/vim-coffee-script' Plug 'lifepillar/vim-solarized8' Plug 'majutsushi/tagbar' Plug 'neovim/nvim-lspconfig' Plug 'OmniSharp/omnisharp-vim' Plug 'posva/vim-vue' Plug 'sainnhe/gruvbox-material' Plug 'scrooloose/nerdcommenter' Plug 'preservim/nerdtree', { 'on': 'NERDTreeToggle' } Plug 'Shougo/vimproc.vim' Plug 'tpope/vim-dispatch' Plug 'tpope/vim-fugitive' Plug 'tpope/vim-rails' Plug 'tpope/vim-surround' call plug#end() " vim-plug---END syntax enable set termguicolors colorscheme gruvbox-material set cursorline set colorcolumn=80,100 function ToggleBackground(current) if a:current ==# 'dark' set background=light " hi Whitespace ctermfg=7 guifg=#eee8d5 else set background=dark " hi Whitespace ctermfg=0 guifg=#073642 end endfunction call ToggleBackground('light') nmap :call ToggleBackground(&background) set spell set number set nowrap filetype plugin indent on set mouse=a set list set listchars=tab:――,space:·,trail:· let g:NoClean = ['diff'] augroup indentation autocmd BufRead,BufNewFile \ Makefile, \*.c, \*.cpp, \*.go \ set tabstop=8 shiftwidth=8 noexpandtab autocmd BufRead,BufNewFile \ *.cs, \*.java \ set tabstop=4 shiftwidth=4 expandtab autocmd BufRead,BufNewFile \ *.rb, \*.css, \*.js, \*.jsx, \*.coffee, \*.erb, \*.html, \*.html.tmpl, \*.json, \*.qtpl, \*.tf, \*.tfvars, \*.vue, \*.yml, \*.yaml \ set tabstop=2 shiftwidth=2 expandtab autocmd FileType crontab set backupcopy=yes augroup END " vint: -ProhibitCommandRelyOnUser -ProhibitCommandWithUnintendedSideEffect function TrimTrailingInvisibles() let view = winsaveview() %s/\s\+$//e call winrestview(view) endfunction function TrimTrailingLines() let view = winsaveview() %s/\n\+\%$//e call winrestview(view) endfunction " vint: +ProhibitCommandRelyOnUser +ProhibitCommandWithUnintendedSideEffect function OnWrite() if Writeable() call CleanFile() endif endfunction function OnLeave() if Writeable() call CleanFile() write GitGutter endif endfunction function CleanFile() call TrimTrailingInvisibles() | call TrimTrailingLines() endfunction function Writeable() return empty(&buftype) \ && index(g:NoClean, &filetype) == -1 \ && !&readonly \ && &modifiable \ && &modified \ && !empty(expand('%:t')) endfunction augroup maximus autocmd BufWrite * call OnWrite() autocmd BufLeave * call OnLeave() augroup END set statusline=%f set statusline+=\ %y set statusline+=[%{&ff}] set statusline+=%r set statusline+=%h set statusline+=%{ModifiedSym()} set statusline+=%= set statusline+=%{AddGitGutterToStatusline()} set statusline+=\ [%c:%l/%L:%p%%] function ModifiedSym() if &modified return "[\u270f]" else return '' end endfunction function AddGitGutterToStatusline() if empty(&buftype) && exists('b:gitgutter_summary') return join(['[Git:', join(b:gitgutter_summary, ','), ']'], '') else return '' endif endfunction " Shortcuts " Plugins nnoremap :NERDTreeToggle nnoremap . :TagbarToggle " Tabs nnoremap tt :tabnew nnoremap tn :tabnext nnoremap tp :tabprevious nnoremap tc :tabclose nnoremap tm :tabmove " Misc nnoremap h :noh nnoremap :exec "tjump ".expand("") nnoremap :call Fullscreen() function Fullscreen() let view = winsaveview() let buf = winbufnr(0) let found = 0 for b in win_findbuf(buf) let tabwin = win_id2tabwin(b) if gettabwinvar(tabwin[0], tabwin[1], 'fullscreen_buf') == buf let found = 1 let existing_tab = tabwin[0] let existing_win = tabwin[1] endif endfor if found == 1 if existing_tab == tabpagenr() tabclose else exec 'tabnext'.existing_tab endif else exec 'tabnew +buffer'.buf let w:fullscreen_buf = buf end call winrestview(view) endfunction " Plugin configuration " The Silver Searcher nnoremap s :Ags " FZF nnoremap :FZF " NERD Commenter let g:NERDSpaceDelims = 1 " NERD Tree let g:NERDTreeShowHidden = 1 " Tagbar let g:tagbar_type_go = { \ 'ctagstype' : 'go', \ 'kinds' : [ \ 'p:package', \ 'i:imports:1', \ 'c:constants', \ 'v:variables', \ 't:types', \ 'n:interfaces', \ 'w:fields', \ 'e:embedded', \ 'm:methods', \ 'r:constructor', \ 'f:functions' \ ], \ 'sro' : '.', \ 'kind2scope' : { \ 't' : 'ctype', \ 'n' : 'ntype' \ }, \ 'scope2kind' : { \ 'ctype' : 't', \ 'ntype' : 'n' \ }, \ 'ctagsbin' : 'gotags', \ 'ctagsargs' : '-sort -silent' \ } set completeopt=menu,menuone,noselect lua <lua vim.lsp.buf.declaration()', opts) buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) buf_set_keymap('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) buf_set_keymap('n', 'e', 'lua vim.diagnostic.open_float()', opts) buf_set_keymap('n', '[d', 'lua vim.diagnostic.goto_prev()', opts) buf_set_keymap('n', ']d', 'lua vim.diagnostic.goto_next()', opts) buf_set_keymap('n', 'q', 'lua vim.diagnostic.setloclist()', opts) buf_set_keymap('n', 'f', 'lua vim.lsp.buf.formatting()', opts) buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') end local cmp = require'cmp' local sources = { { name = 'nvim_lsp' }, { name = 'nvim_lua' }, { name = 'vsnip' }, { name = 'path' }, { name = 'buffer' }, } cmp.setup({ snippet = { expand = function(args) vim.fn["vsnip#anonymous"](args.body) end, }, mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.confirm({ select = true }), }), sources = cmp.config.sources(sources), }) local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) require'lspconfig'.gopls.setup{ on_attach = on_attach, capabilities = capabilities, } require'lspconfig'.solargraph.setup{ on_attach = on_attach, bundlerPath = 'bin/bundle', useBundler = true, capabilities = capabilities, } require'lspconfig'.rust_analyzer.setup{ on_attach = on_attach, capabilities = capabilities, } require'lspconfig'.clangd.setup{ on_attach = on_attach, capabilities = capabilities, } EOF