-- Basic settings vim.g.loaded_matchparen = true vim.g.netrw_liststyle = 3 vim.wo.number = true local glob_opts = { background = 'dark', belloff = 'all', breakindent = true, hlsearch = false, laststatus = 0, lazyredraw = true, showcmd = true, synmaxcol = 800, syntax = 'on', termguicolors = true, titleold = vim.fn.getcwd(), title = true, wildmenu = true, wrap = true, } for option, value in pairs(glob_opts) do vim.go[option] = value end vim.cmd([[colorscheme gruvbox]]) require 'nvim-treesitter.configs'.setup { highlight = { enable = true, disable = {} }, indent = { enable = false, disable = {} }, rainbow = { enable = true, extended_mode = true, max_file_lines = 1000, colors = { '#ff0000', '#0051a0' ,'#ffa500', '#ffff00', '#008000', '#8003f2' } } } -- Mappings. -- See `:help vim.diagnostic.*` for documentation on any of the below functions local opts = { noremap = true, silent = true } vim.api.nvim_set_keymap('n', 'e', 'lua vim.diagnostic.open_float()', opts) vim.api.nvim_set_keymap('n', 'q', 'lua vim.diagnostic.setloclist()', opts) vim.api.nvim_set_keymap('n', 'Q', 'nohl', opts) vim.api.nvim_set_keymap('n', 'j', 'gj', opts) vim.api.nvim_set_keymap('n', 'k', 'gk', opts) vim.api.nvim_set_keymap('v', 'j', 'gj', opts) vim.api.nvim_set_keymap('v', 'k', 'gk', opts) vim.api.nvim_set_keymap('n', '', '', opts) vim.api.nvim_set_keymap('n', '', '', opts) vim.api.nvim_set_keymap('n', '', '', opts) vim.api.nvim_set_keymap('n', '', '', opts) vim.api.nvim_set_keymap('n', "", "lua require('fzf-lua').files()", opts) vim.api.nvim_create_autocmd('LspAttach', { desc = 'LSP actions', callback = function() local bufmap = function(mode, lhs, rhs) vim.keymap.set(mode, lhs, rhs, { buffer = true }) end -- Displays hover information about the symbol under the cursor bufmap('n', 'K', 'lua vim.lsp.buf.hover()') -- Jump to the definition bufmap('n', 'gd', 'lua vim.lsp.buf.definition()') -- Jump to declaration bufmap('n', 'gD', 'lua vim.lsp.buf.declaration()') -- Lists all the implementations for the symbol under the cursor bufmap('n', 'gi', 'lua vim.lsp.buf.implementation()') -- Jumps to the definition of the type symbol bufmap('n', 'go', 'lua vim.lsp.buf.type_definition()') -- Lists all the references bufmap('n', 'gr', 'lua vim.lsp.buf.references()') -- Displays a function's signature information bufmap('n', '', 'lua vim.lsp.buf.signature_help()') -- Renames all references to the symbol under the cursor bufmap('n', 'rn', 'lua vim.lsp.buf.rename()') -- Selects a code action available at the current cursor position bufmap('n', '', 'lua vim.lsp.buf.code_action()') bufmap('x', '', 'lua vim.lsp.buf.range_code_action()') -- Show diagnostics in a floating window bufmap('n', 'gl', 'lua vim.diagnostic.open_float()') -- Move to the previous diagnostic bufmap('n', '[d', 'lua vim.diagnostic.goto_prev()') -- Move to the next diagnostic bufmap('n', ']d', 'lua vim.diagnostic.goto_next()') -- Format current buffer bufmap('n', 'f', function() vim.lsp.buf.format { async = true } end) end }) vim.diagnostic.config({ virtual_text = false }) -- Turn off inline diagnostics -- Show all diagnostics on current line in floating window vim.api.nvim_set_keymap('n', 'd', ':lua vim.diagnostic.open_float()', opts) -- Go to next diagnostic (if there are multiple on the same line, only shows -- one at a time in the floating window) vim.api.nvim_set_keymap('n', 'n', ':lua vim.diagnostic.goto_next()', opts) -- Go to prev diagnostic (if there are multiple on the same line, only shows -- one at a time in the floating window) vim.api.nvim_set_keymap('n', 'p', ':lua vim.diagnostic.goto_prev()', opts) -- Use a loop to conveniently call 'setup' on multiple servers and -- map buffer local keybindings when the language server attaches local cmp = require 'cmp' cmp.setup({ snippet = { expand = function(args) vim.fn["UltiSnips#Anon"](args.body) end, }, sources = cmp.config.sources({ { name = 'nvim_lsp' }, { name = 'buffer' }, { name = 'path' }, { name = 'ultisnips' }, }), mapping = { [""] = cmp.mapping({ i = function(fallback) if cmp.visible() then cmp.select_next_item({ behavior = cmp.SelectBehavior.Insert }) else fallback() end end, }), [""] = cmp.mapping({ i = function(fallback) if cmp.visible() then cmp.select_prev_item({ behavior = cmp.SelectBehavimr.Insert }) else fallback() end end, }), [''] = cmp.mapping(cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Select }), { 'i' }), [''] = cmp.mapping(cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Select }), { 'i' }), [''] = cmp.mapping({ i = function(fallback) if cmp.visible() then cmp.select_next_item({ behavior = cmp.SelectBehavior.Select }) else fallback() end end }), [''] = cmp.mapping({ i = function(fallback) if cmp.visible() then cmp.select_prev_item({ behavior = cmp.SelectBehavior.Select }) else fallback() end end }), [''] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }), [''] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }), [''] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }), [''] = cmp.mapping({ i = cmp.mapping.close(), c = cmp.mapping.close() }), [''] = cmp.mapping({ i = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = false }), }), } }) local servers = { 'pyright', 'rust_analyzer', 'ccls', 'nixd', 'texlab', 'zls', 'gopls' } local capabilities = require('cmp_nvim_lsp').default_capabilities() for _, lsp in pairs(servers) do require('lspconfig')[lsp].setup { capabilities = capabilities } end require('lspconfig').lua_ls.setup({ capabilities = capabilities, single_file_support = true, settings = { Lua = { diagnostics = { globals = { 'vim' }, }, runtime = { version = 'LuaJIT', path = vim.split(package.path, ';'), }, workspace = { library = { [vim.fn.expand('$VIMRUNTIME/lua')] = true, [vim.fn.expand('$VIMRUNTIME/lua/vim/lsp')] = true, }, }, telemetry = { enable = false, }, }, }, }) require('lspconfig').verible.setup({ capabilities = capabilities, root_dir = function() return vim.fn.getcwd() end }) if vim.fn.exists('+undofile') ~= 0 then local undo_dir = vim.env.HOME .. '/.config/nvim/undo' if vim.fn.isdirectory(undo_dir) == 0 then vim.fn.mkdir(undo_dir, 'p') end vim.o.undodir = undo_dir vim.o.undofile = true end vim.cmd([[syntax sync minlines=100]]) vim.cmd([[syntax sync maxlines=140]])