-- General ===================================================================== vim.g.mapleader = ' ' -- Use `` as key vim.o.undofile = true -- Enable persistent undo vim.o.shada = "'100,<50,s10,:1000,/100,@100,h" -- Limit ShaDa file (for startup) -- UI ========================================================================== vim.o.breakindent = true -- Indent wrapped lines to match line start vim.o.breakindentopt = 'list:-1' -- Add padding for lists (if 'wrap' is set) vim.o.cursorline = true -- Enable current line highlighting vim.o.linebreak = true -- Wrap lines at 'breakat' (if 'wrap' is set) vim.o.list = true -- Show helpful text indicators vim.o.number = true -- Show line numbers vim.o.pumheight = 10 -- Make popup menu smaller vim.o.pummaxwidth = 100 -- Make popup menu not too wide vim.o.shortmess = 'CFOSWaco' -- Disable some built-in completion messages vim.o.signcolumn = 'yes' -- Always show signcolumn (less flicker) vim.o.splitbelow = true -- Horizontal splits will be below vim.o.splitkeep = 'screen' -- Reduce scroll during window split vim.o.splitright = true -- Vertical splits will be to the right vim.o.wrap = false -- Don't visually wrap lines (toggle with \w) vim.o.winborder = 'rounded' -- Use border in floating windows vim.o.pumborder = 'rounded' -- Use border in popup menu vim.o.cmdheight = 0 -- Hide the command line when not in use vim.cmd('syntax off') -- Disable legacy syntax highlighting require("vim._core.ui2").enable({ -- Enable new ui (requires nightly) msg = { targets = "msg" } }) -- Editing ===================================================================== vim.o.expandtab = true -- Convert tabs to spaces vim.o.formatoptions = 'rqnl1j' -- Improve comment editing vim.o.ignorecase = true -- Ignore case during search vim.o.infercase = true -- Infer case in built-in completion vim.o.shiftwidth = 2 -- Use this number of spaces for indentation vim.o.smartcase = true -- Respect case if search pattern has upper case vim.o.spelloptions = 'camel' -- Treat camelCase word parts as separate words vim.o.tabstop = 2 -- Show tab as this number of spaces vim.o.virtualedit = 'block' -- Allow going past end of line in blockwise mode vim.opt.autoread = true -- Do not prompt to reread files on update -- Pattern for a start of numbered list (used in `gw`). vim.o.formatlistpat = [[^\s*[0-9\-\+\*]\+[\.\)]*\s\+]] -- Built-in completion vim.o.complete = '.,w,b,kspell' -- Use less sources vim.o.completeopt = 'menuone,noselect,fuzzy,nosort' -- Use custom behavior vim.o.completetimeout = 100 -- Limit sources delay -- Autocommands ================================================================ Config.autocmd('TextYankPost', '*', function() vim.hl.hl_op() end, 'Highlight yanked text') Config.autocmd('TermOpen', '*', function() vim.cmd('startinsert') end, 'Start insert mode when terminal opens') -- Diagnostics ================================================================= Config.later(function() vim.diagnostic.config({ signs = { priority = 9999, severity = { min = 'WARN', max = 'ERROR' }, text = { [vim.diagnostic.severity.ERROR] = '', [vim.diagnostic.severity.WARN] = '', [vim.diagnostic.severity.INFO] = '', [vim.diagnostic.severity.HINT] = '', }, }, underline = { severity = { min = 'HINT', max = 'ERROR' } }, virtual_lines = false, virtual_text = { current_line = true, severity = { min = 'ERROR', max = 'ERROR' }, }, update_in_insert = false, }) local dap_signs = { DapBreakpoint = { text = '', texthl = 'DapBreakpoint', linehl = '', numhl = '' }, DapBreakpointCondition = { text = '', texthl = 'DapBreakpointCondition', linehl = '', numhl = '' }, DapLogPoint = { text = '', texthl = 'DapLogPoint', linehl = '', numhl = '' }, DapStopped = { text = '', texthl = 'DapStopped', linehl = 'DapStoppedLine', numhl = '' }, DapBreakpointRejected = { text = '', texthl = 'DapBreakpointRejected', linehl = '', numhl = '' }, } for name, sign in pairs(dap_signs) do vim.fn.sign_define(name, sign) end end)