-- General Option vim.opt.syntax = "off"; vim.g.mapleader = " " vim.g.maplocalleader = " " vim.opt.autoindent = true vim.opt.background = 'dark' vim.opt.backupdir = os.getenv("HOME") .. '/.local/tmp/nvim' vim.opt.clipboard = 'unnamedplus' --Use system clipboard vim.opt.colorcolumn = '80' vim.opt.directory = os.getenv("HOME") .. '/.local/tmp/nvim' vim.opt.expandtab = true -- Foldling code -- Based on threesitter vim.opt.foldmethod = "expr" vim.opt.foldexpr = "v:lua.vim.treesitter.foldexpr()" vim.opt.foldcolumn = "0" vim.opt.foldtext = "" vim.opt.foldlevel = 99 -- I don't wand code to be fold by default vim.opt.foldlevelstart = 1 vim.opt.foldnestmax = 2 -- max nested fold, 2 seems to be quite sufficient vim.opt.gdefault = true -- search: all occurrences by default vim.opt.hlsearch = true -- search: hightlight terms vim.opt.ignorecase = true vim.opt.incsearch = true vim.opt.laststatus = 1 -- show special character vim.opt.listchars = { tab = '→ ', trail = '␣', space = '·', eol = '', extends = '…', precedes = "<" } vim.opt.signcolumn = "yes" -- alway show sign column vim.opt.number = true vim.opt.relativenumber = true vim.opt.cursorline = true -- highlight current line vim.opt.showmatch = true vim.opt.smartcase = true -- search: try :to be smart about cases vim.opt.smartindent = true vim.opt.tabstop = 2 vim.opt.shiftwidth = 2 vim.opt.softtabstop = 2 vim.opt.wildmenu = true -- activate enhanced user menu vim.opt.wildmode = 'lastused:full,list' -- enhance menu vim.opt.pumheight = 10 vim.opt.pumwidth = 50 vim.opt.pumblend = 10 vim.o.winborder = 'none' -- manage line break smartly vim.opt.wrap = true vim.opt.breakindent = true vim.opt.linebreak = true vim.opt.showbreak = string.rep(" ", 3) -- Make it so that long lines wrap smartly -- need to activate this for cmp vim.opt.completeopt = {'menu', 'menuone', 'noselect'} -- -- Code Fold -- "Load and save view atomatocally (save and restore fold) vim.cmd('au BufWinLeave *.* mkview') vim.cmd('au BufWinEnter *.* silent! loadview') -- local signs = { Error = "", Warn = "", Hint = "󰌶", Info = "" } -- for type, icon in pairs(signs) do -- local hl = "DiagnosticSign" .. type -- vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl }) -- end -- You will likely want to reduce updatetime which affects CursorHold -- note: this setting is global and should be set only once vim.o.updatetime = 250 -- vim.cmd [[autocmd! CursorHold,CursorHoldI * lua vim.diagnostic.open_float(nil, {scope='cursor', header = "", prefix = "", focus=false})]] -- Autotype vim.cmd('au BufRead,BufNewFile *.nix setlocal tabstop=2 shiftwidth=2 ') vim.cmd('au BufNewFile,BufRead /tmp/neomutt* set tw=72 fo=awq comments+=nb:> noautoindent filetype=mail') -- Ignore these filenames during enhanced command line completion. vim.opt.wildignore = { '*.bak', '*.class', '*.aux', '*.out', '*.toc', '*.jpg', '*.bmp', '*.gif', '*.png', '*.luac', '*.o', '*.obj', '*.exe', '*.dll', '*.manifest', '*.pyc', '*.spl', '*.sw?' } -- disable lsplog -- This is not usefull on a daily basis and should positively impact performance vim.lsp.set_log_level("off") -- define a timeout for match parens vim.g.matchparen_timeout = 10 vim.g.matchparen_insert_timeout = 10 -- activate virtual lines for diagnistics -- no more plugins needed local x = vim.diagnostic.severity vim.diagnostic.config({ virtual_lines = true, -- Alternatively, customize specific options -- virtual_lines = { -- -- Only show virtual line diagnostics for the current cursor line -- current_line = true, -- }, signs = { text = { [x.ERROR] = "󰅙", [x.WARN] = "", [x.INFO] = "󰋼", [x.HINT] = "󰌵" } }, }) -- LSP vim.api.nvim_create_autocmd("LspAttach", { group = vim.api.nvim_create_augroup("UserLspConfig", {}), callback = function(ev) vim.bo[ev.buf].omnifunc = "v:lua.vim.lsp.omnifunc" local opts = { buffer = ev.buf } local client = vim.lsp.get_client_by_id(ev.data.client_id) local bufnr = ev.buf local function desc(description) return { noremap = true, silent = true, buffer = bufnr, desc = description } end vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { buffer = ev.buf, desc = "Go to [D]eclaration" }) vim.keymap.set("n", "gd", vim.lsp.buf.definition, { buffer = ev.buf, desc = "Go to [d]efinition" }) vim.keymap.set("n", "gi", vim.lsp.buf.implementation, { buffer = ev.buf, desc = "Go to [i]mplementation" }) vim.keymap.set("n", "gr", vim.lsp.buf.references, { buffer = ev.buf, desc = "Go to [r]eferences" }) vim.keymap.set( "n", "K", function() vim.lsp.buf.hover { border = "rounded", max_width = 250 } end, opts) vim.keymap.set( "n", "", function() vim.lsp.buf.signature_help { border = "rounded", max_width = 250 } end, {buffer = ev.buf, desc = "Signature help"} ) vim.keymap.set("n", "wa", vim.lsp.buf.add_workspace_folder, opts) vim.keymap.set("n", "wr", vim.lsp.buf.remove_workspace_folder, opts) vim.keymap.set( "n", "wl", function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, opts ) vim.keymap.set("n", "D", vim.lsp.buf.type_definition, { buffer = ev.buf, desc = "Type [D]efinition" }) vim.keymap.set("n", "rn", vim.lsp.buf.rename, { buffer = ev.buf, desc = "LSP [r]e[n]ame" }) vim.keymap.set("n", "ca", vim.lsp.buf.code_action, { buffer = ev.buf, desc = "Show [c]ode [a]ction"}) vim.keymap.set( "n", "F", function() require("conform").format({ bufnr = bufnr }) end, { buffer = ev.buf, desc = "[F]ormat file" } ) if client.server_capabilities.inlayHintProvider then vim.keymap.set("n", "h", function() vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled()) end, desc("LSP toggle inlay [h]ints")) end end, })