···
1
1
+
call plug#begin()
2
2
+
Plug 'junegunn/vim-easy-align'
3
3
+
Plug 'neovim/nvim-lspconfig'
4
4
+
call plug#end()
5
5
+
6
6
+
" go LSP
7
7
+
lua << EOF
8
8
+
require'lspconfig'.gopls.setup{}
9
9
+
EOF
10
10
+
11
11
+
" set keybinds for go LSP
12
12
+
lua << EOF
13
13
+
local nvim_lsp = require('lspconfig')
14
14
+
15
15
+
-- Use an on_attach function to only map the following keys
16
16
+
-- after the language server attaches to the current buffer
17
17
+
local on_attach = function(client, bufnr)
18
18
+
local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end
19
19
+
local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end
20
20
+
21
21
+
--Enable completion triggered by <c-x><c-o>
22
22
+
buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc')
23
23
+
24
24
+
-- Mappings.
25
25
+
local opts = { noremap=true, silent=true }
26
26
+
27
27
+
-- See `:help vim.lsp.*` for documentation on any of the below functions
28
28
+
buf_set_keymap('n', 'gD', '<Cmd>lua vim.lsp.buf.declaration()<CR>', opts)
29
29
+
buf_set_keymap('n', 'gd', '<Cmd>lua vim.lsp.buf.definition()<CR>', opts)
30
30
+
buf_set_keymap('n', 'K', '<Cmd>lua vim.lsp.buf.hover()<CR>', opts)
31
31
+
buf_set_keymap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
32
32
+
buf_set_keymap('n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts)
33
33
+
buf_set_keymap('n', '<space>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts)
34
34
+
buf_set_keymap('n', '<space>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts)
35
35
+
buf_set_keymap('n', '<space>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts)
36
36
+
buf_set_keymap('n', '<space>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts)
37
37
+
buf_set_keymap('n', '<space>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
38
38
+
buf_set_keymap('n', '<space>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
39
39
+
buf_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
40
40
+
buf_set_keymap('n', '<space>e', '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>', opts)
41
41
+
buf_set_keymap('n', '[d', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts)
42
42
+
buf_set_keymap('n', ']d', '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts)
43
43
+
buf_set_keymap('n', '<space>q', '<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>', opts)
44
44
+
buf_set_keymap("n", "<space>f", "<cmd>lua vim.lsp.buf.formatting()<CR>", opts)
45
45
+
46
46
+
end
47
47
+
48
48
+
-- Use a loop to conveniently call 'setup' on multiple servers and
49
49
+
-- map buffer local keybindings when the language server attaches
50
50
+
local servers = { "gopls", "rust_analyzer" }
51
51
+
for _, lsp in ipairs(servers) do
52
52
+
nvim_lsp[lsp].setup { on_attach = on_attach }
53
53
+
end
54
54
+
EOF
55
55
+