From 2ad138932925ffea53d820bbe0e8cf0842b08ed1 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Fri, 9 Oct 2020 22:11:06 +0200 Subject: [PATCH] nvim: Extend lsp for nvim lua development Added new functionality to lsp: hovering, go-to definition, referencing, implementations, etc accessible through the usual hotkeys. Added commands to invoke LspHover and temporarily disable lsp for the current buffer (is re-enabled on re-entering the buffer, e.g. with :e) Added tjdevries extended lua lsp implementation containing functionality for the nvim api itself (especially useful for `vim.api`, `vim.fn`). --- nvim/.config/nvim/init.vim | 2 ++ nvim/.config/nvim/lua/nvim-lspconfig/init.lua | 31 +++++++++++++++++++ nvim/.config/nvim/plugin/nvim-lspconfig.vim | 16 +++------- 3 files changed, 38 insertions(+), 11 deletions(-) create mode 100644 nvim/.config/nvim/lua/nvim-lspconfig/init.lua diff --git a/nvim/.config/nvim/init.vim b/nvim/.config/nvim/init.vim index f9573d9..52bcb6b 100644 --- a/nvim/.config/nvim/init.vim +++ b/nvim/.config/nvim/init.vim @@ -80,6 +80,8 @@ Plug 'reedes/vim-textobj-sentence' Plug 'junegunn/goyo.vim', { 'for': ['pandoc', 'markdown', 'txt'], 'on': 'Goyo' } " provide distraction free writing Plug 'junegunn/limelight.vim', { 'for': ['pandoc', 'markdown', 'txt'], 'on': 'Goyo' } " provide even distraction free-er writing (lowlight paragraphs) " Language Integration +Plug 'tjdevries/nlua.nvim' " lua lsp integration +Plug 'euclidianAce/BetterLua.vim' " better syntax highlighting for lua Plug 'sheerun/vim-polyglot' " syntax plugins for almost every language Plug 'stephpy/vim-yaml' Plug 'mhartington/nvim-typescript', {'for': 'typescript','do': './install.sh'} diff --git a/nvim/.config/nvim/lua/nvim-lspconfig/init.lua b/nvim/.config/nvim/lua/nvim-lspconfig/init.lua new file mode 100644 index 0000000..30560a7 --- /dev/null +++ b/nvim/.config/nvim/lua/nvim-lspconfig/init.lua @@ -0,0 +1,31 @@ + +local on_attach = function(client, bufnr) + -- Keybindings for LSPs + -- Note these are in on_attach so that they don't override bindings in a non-LSP setting + vim.fn.nvim_set_keymap("n", "gd", "lua vim.lsp.buf.definition()", {noremap = true, silent = true}) + vim.fn.nvim_set_keymap("n", "gD", "lua vim.lsp.buf.implementation()", {noremap = true, silent = true}) + vim.fn.nvim_set_keymap("n", "K", "lua vim.lsp.buf.hover()", {noremap = true, silent = true}) + vim.fn.nvim_set_keymap("n", "", "lua vim.lsp.buf.signature_help()", {noremap = true, silent = true}) + vim.fn.nvim_set_keymap("n", "1gD", "lua vim.lsp.buf.type_definition()", {noremap = true, silent = true}) + vim.fn.nvim_set_keymap("n", "gr", "lua vim.lsp.buf.references()", {noremap = true, silent = true}) + vim.fn.nvim_set_keymap("n", "g0", "lua vim.lsp.buf.document_symbol()", {noremap = true, silent = true}) + vim.fn.nvim_set_keymap("n", "gW", "lua vim.lsp.buf.workspace_symbol()", {noremap = true, silent = true}) +end + +require'nvim_lsp'.pyls.setup{on_attach=on_attach} +require'nvim_lsp'.vimls.setup{on_attach=on_attach} +require'nvim_lsp'.bashls.setup{on_attach=on_attach} +require'nvim_lsp'.gopls.setup{on_attach=on_attach} +require'nvim_lsp'.texlab.setup{on_attach=on_attach} + +-- To get builtin LSP running, do something like: +-- NOTE: This replaces the calls where you would have before done `require('nvim_lsp').sumneko_lua.setup()` +require('nlua.lsp.nvim').setup(require('nvim_lsp'), { + on_attach = on_attach, + + -- Include globals you want to tell the LSP are real :) + globals = { + -- Colorbuddy + "Color", "c", "Group", "g", "s", + } +}) diff --git a/nvim/.config/nvim/plugin/nvim-lspconfig.vim b/nvim/.config/nvim/plugin/nvim-lspconfig.vim index ef1c23b..954c024 100644 --- a/nvim/.config/nvim/plugin/nvim-lspconfig.vim +++ b/nvim/.config/nvim/plugin/nvim-lspconfig.vim @@ -1,12 +1,6 @@ -lua << END +command! LspHover lua vim.lsp.buf.hover() +command! LspDisable lua vim.lsp.stop_client(vim.lsp.get_active_clients()) -require'nvim_lsp'.pyls.setup{} -require'nvim_lsp'.vimls.setup{} -require'nvim_lsp'.bashls.setup{} -require'nvim_lsp'.gopls.setup{} -require'nvim_lsp'.texlab.setup{} - --- requires manual `:LspInstall sumneko_lua` -require'nvim_lsp'.sumneko_lua.setup{} - -END +" actual LSP config takes place in lua ('lua/lsp') +lua require("nvim-lspconfig") +setlocal omnifunc=v:lua.vim.lsp.omnifunc