diff --git a/home/.config/nvim/lua/keybinds.lua b/home/.config/nvim/lua/keybinds.lua index 3299100e..25234f6c 100644 --- a/home/.config/nvim/lua/keybinds.lua +++ b/home/.config/nvim/lua/keybinds.lua @@ -15,6 +15,8 @@ map('n', '', 'Rg') -- Navigate completions with tab and shift tab map('i', '', 'pumvisible() ? "\\" : "\\"', {expr = true}) map('i', '', 'pumvisible() ? "\\" : "\\"', {expr = true}) +-- Trigger completion +map('i', '', '(completion_trigger)', {silent = true, expr = true}) -- Navigate between buffers map('n', '', ':bn', {silent = true}) diff --git a/home/.config/nvim/lua/pluginconf/completion.lua b/home/.config/nvim/lua/pluginconf/completion.lua index a4e34543..9d2c2d25 100644 --- a/home/.config/nvim/lua/pluginconf/completion.lua +++ b/home/.config/nvim/lua/pluginconf/completion.lua @@ -1,4 +1,3 @@ -vim.o.completeopt = 'menuone,noinsert,noselect' +local o = vim.o --- Enable for all buffers (for now) -vim.api.nvim_command('autocmd BufEnter * lua require\'completion\'.on_attach()') +o.completeopt = 'menuone,noinsert,noselect' diff --git a/home/.config/nvim/lua/pluginconf/lsp.lua b/home/.config/nvim/lua/pluginconf/lsp.lua index 16010017..85d57868 100644 --- a/home/.config/nvim/lua/pluginconf/lsp.lua +++ b/home/.config/nvim/lua/pluginconf/lsp.lua @@ -1,105 +1,37 @@ --- keymaps -local on_attach = function(client, bufnr) - local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end - local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end - - buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') - - -- Mappings. - local opts = { noremap=true, silent=true } - buf_set_keymap('n', 'gD', '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', 'gr', 'lua vim.lsp.buf.references()', opts) - buf_set_keymap('n', 'e', 'lua vim.lsp.diagnostic.show_line_diagnostics()', opts) - buf_set_keymap('n', '[d', 'lua vim.lsp.diagnostic.goto_prev()', opts) - buf_set_keymap('n', ']d', 'lua vim.lsp.diagnostic.goto_next()', opts) - buf_set_keymap('n', 'q', 'lua vim.lsp.diagnostic.set_loclist()', opts) - - -- Set some keybinds conditional on server capabilities - if client.resolved_capabilities.document_formatting then - buf_set_keymap("n", "f", "lua vim.lsp.buf.formatting()", opts) - elseif client.resolved_capabilities.document_range_formatting then - buf_set_keymap("n", "f", "lua vim.lsp.buf.range_formatting()", opts) - end - - -- Set autocommands conditional on server_capabilities - if client.resolved_capabilities.document_highlight then - vim.api.nvim_exec([[ - augroup lsp_document_highlight - autocmd! * - autocmd CursorHold lua vim.lsp.buf.document_highlight() - autocmd CursorMoved lua vim.lsp.buf.clear_references() - augroup END - ]], false) - end -end --- --- Configure lua language server for neovim development -local lua_settings = { - Lua = { - runtime = { - -- LuaJIT in the case of Neovim - version = 'LuaJIT', - path = vim.split(package.path, ';'), - }, - diagnostics = { - -- Get the language server to recognize the `vim` global - globals = {'vim'}, - }, - workspace = { - -- Make the server aware of Neovim runtime files - library = { - [vim.fn.expand('$VIMRUNTIME/lua')] = true, - [vim.fn.expand('$VIMRUNTIME/lua/vim/lsp')] = true, - }, - }, - } +-- Rust +require'lspconfig'.rust_analyzer.setup { + on_attach = require'completion'.on_attach } --- config that activates keymaps and enables snippet support -local function make_config() - local capabilities = vim .lsp.protocol.make_client_capabilities() - capabilities.textDocument.completion.completionItem.snippetSupport = true - return { - -- enable snippet support - capabilities = capabilities, - -- map buffer local keybindings when the language server attaches - on_attach = on_attach, +-- Lua +require'lspconfig'.sumneko_lua.setup { + on_attach = require'completion'.on_attach, + cmd = {'/usr/bin/lua-language-server'}, + settings = { + Lua = { + runtime = { + -- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim) + version = 'LuaJIT', + -- Setup your lua path + path = vim.split(package.path, ';') + }, + diagnostics = { + -- Get the language server to recognize the `vim` global + globals = {'vim'} + }, + workspace = { + -- Make the server aware of Neovim runtime files + library = { + [vim.fn.expand('$VIMRUNTIME/lua')] = true, + [vim.fn.expand('$VIMRUNTIME/lua/vim/lsp')] = true + } + } + } + } } -end --- lsp-install -local function setup_servers() - require'lspinstall'.setup() +-- YAML +require'lspconfig'.yamlls.setup {on_attach = require'completion'.on_attach} - -- get all installed servers - local servers = require'lspinstall'.installed_servers() - - for _, server in pairs(servers) do - local config = make_config() - - -- language specific config - if server == "lua" then - config.settings = lua_settings - end - - -- setup lspconfig for all servers - require'lspconfig'[server].setup(config) - end -end - -setup_servers() - --- Automatically reload after `:LspInstall ` so we don't have to restart neovim -require'lspinstall'.post_install_hook = function () - setup_servers() -- reload installed servers - vim.cmd("bufdo e") -- this triggers the FileType autocmd that starts the server -end +-- JavaScript / TypeScript +require'lspconfig'.tsserver.setup {on_attach = require'completion'.on_attach} diff --git a/home/.config/nvim/lua/pluginmanager.lua b/home/.config/nvim/lua/pluginmanager.lua index ad450b4e..47d34941 100644 --- a/home/.config/nvim/lua/pluginmanager.lua +++ b/home/.config/nvim/lua/pluginmanager.lua @@ -39,9 +39,6 @@ require('packer').startup(function() -- Configs for built-in LSP use 'neovim/nvim-lspconfig' - -- Install LSP executables - use 'kabouzeid/nvim-lspinstall' - -- Completion framework use 'nvim-lua/completion-nvim'