+
+" Completion
+set completeopt+=menuone
+set completeopt-=preview
+set shortmess+=c
+
+" LSP
+lua << EOF
+local lspconfig = require('lspconfig')
+
+local on_attach = function(client, bufnr)
+ -- Shorthand
+ 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
+
+ -- Use omnifunc for completion
+ buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc')
+
+ -- Keybindings
+ local opts = { noremap=true, silent=true }
+ buf_set_keymap('n', 'gD',
+ '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
+ buf_set_keymap('n', 'gd',
+ '<cmd>lua vim.lsp.buf.definition()<CR>', opts)
+ buf_set_keymap('n', 'gr',
+ '<cmd>lua vim.lsp.buf.references()<CR>', opts)
+ buf_set_keymap('n', 'K',
+ '<cmd>lua vim.lsp.buf.hover()<CR>', opts)
+ buf_set_keymap('n', '<space>rn',
+ '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
+ buf_set_keymap('n', '[d',
+ '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts)
+ buf_set_keymap('n', ']d',
+ '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts)
+end
+
+-- Add servers
+local servers = {
+ 'clangd'
+}
+
+for _, server in ipairs(servers) do
+ lspconfig[server].setup {on_attach = on_attach}
+end
+EOF
+
+set signcolumn=no