]> git.armaanb.net Git - dotfiles.git/blob - .config/nvim/init.vim
nvim: initial LSP config
[dotfiles.git] / .config / nvim / init.vim
1 " General settings
2 set mouse=a
3 set undofile
4 set textwidth=80
5 map Q <nop>
6
7 " Polyglot
8 let g:polyglot_disabled = ['sensible']
9
10 " Plugins
11 call plug#begin()
12 Plug 'ap/vim-css-color'              " Highlight css colors
13 Plug 'ctrlpvim/ctrlp.vim'            " Fuzzy file finding
14 Plug 'editorconfig/editorconfig-vim' " Follow editorconfig
15 Plug 'godlygeek/tabular'             " Line things up
16 Plug 'lifepillar/vim-mucomplete'      " Simple autocompletion
17 Plug 'meain/hima-vim'                " Nice color scheme
18 Plug 'neovim/nvim-lspconfig'         " LSP configurations
19 Plug 'sheerun/vim-polyglot'          " Language pack
20 Plug 'tpope/vim-commentary'          " Easily comment
21 Plug 'tpope/vim-rsi'                 " Readline bindings
22 Plug 'tpope/vim-sensible'            " Sensible defaults
23 Plug 'tpope/vim-speeddating'         " Modify dates with C-a, C-x
24 Plug 'tpope/vim-surround'            " Easily modify sorrounding characters
25 call plug#end()
26
27 " Colorscheme
28 set termguicolors
29 colorscheme hima
30
31 " Easier split movement
32 nnoremap <C-j> <C-w><C-j>
33 nnoremap <C-k> <C-w><C-k>
34 nnoremap <C-l> <C-w><C-l>
35 nnoremap <C-h> <C-w><C-h>
36
37 " Clear search highlighting
38 nnoremap <silent> <C-c> :noh<CR>
39
40 " Completion
41 set completeopt+=menuone
42 set completeopt-=preview
43 set shortmess+=c
44
45 " LSP
46 lua << EOF
47 local lspconfig = require('lspconfig')
48
49 local on_attach = function(client, bufnr)
50         -- Shorthand
51         local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr,
52                 ...) end
53         local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr,
54                 ...) end
55
56         -- Use omnifunc for completion
57         buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc')
58
59         -- Keybindings
60         local opts = { noremap=true, silent=true }
61         buf_set_keymap('n', 'gD',
62                 '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
63         buf_set_keymap('n', 'gd',
64                 '<cmd>lua vim.lsp.buf.definition()<CR>', opts)
65         buf_set_keymap('n', 'gr',
66                 '<cmd>lua vim.lsp.buf.references()<CR>', opts)
67         buf_set_keymap('n', 'K',
68                 '<cmd>lua vim.lsp.buf.hover()<CR>', opts)
69         buf_set_keymap('n', '<space>rn',
70                 '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
71         buf_set_keymap('n', '[d',
72                 '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts)
73         buf_set_keymap('n', ']d',
74                 '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts)
75 end
76
77 -- Add servers
78 local servers = {
79         'clangd'
80 }
81
82 for _, server in ipairs(servers) do
83         lspconfig[server].setup {on_attach = on_attach}
84 end
85 EOF
86
87 set signcolumn=no