vim.opt.autowrite = true vim.opt.backspace = 'indent,eol,start' vim.opt.confirm = true vim.opt.completeopt = { 'menu', 'menuone', 'noselect' } vim.opt.cmdheight = 1 vim.opt.diffopt = 'internal,filler,closeoff,inline:char' vim.opt.expandtab = true -- insert tabs as spaces vim.opt.inccommand = 'split' -- incremental live completion vim.opt.list = true vim.opt.nrformats:append('alpha') -- let Ctrl-a do letters as well vim.opt.path:append('**') -- enable fuzzy :find ing vim.opt.relativenumber = true vim.opt.shadafile = 'NONE' -- disable shada vim.opt.shiftwidth = 0 -- >> shifts by tabstop vim.opt.showmatch = true -- highlight matching brackets vim.opt.signcolumn = 'no' vim.opt.softtabstop = -1 -- backspace removes tabstop vim.opt.swapfile = false vim.opt.tabstop = 2 -- 2 space tabs are based vim.opt.updatetime = 250 -- decrease update time vim.opt.virtualedit = 'onemore' vim.opt.winborder = 'single' -- Switch tab length on the fly vim.keymap.set('n', '\\t', function() vim.o.tabstop = vim.o.tabstop == 8 and 2 or 2 * vim.o.tabstop end, { silent = true, desc = 'toggle tabstop' }) -- autocmd ---------------------------------------- local undopath = vim.fn.stdpath('data') .. 'undo' vim.api.nvim_create_autocmd('VimEnter', { command = 'silent !mkdir -p ' .. undopath, group = vim.api.nvim_create_augroup('Init', {}), }) -- open :h in buffers vim.api.nvim_create_autocmd('BufWinEnter', { pattern = '*', callback = function(event) if vim.bo[event.buf].filetype == 'help' then vim.cmd.only() vim.keymap.set('n', 'q', vim.cmd.bdelete, { noremap = true, silent = true }) vim.bo.buflisted = true end end, }) -- Configure Neovim diagnostic messages vim.diagnostic.config { virtual_text = true, underline = true, severity_sort = true, float = { focusable = false, style = 'minimal', source = 'if_many', }, } -- Allow basic deletion in qflist vim.api.nvim_create_autocmd({ 'FileType' }, { pattern = "qf", callback = function() vim.keymap.set({ "n", "i" }, 'dd', function() local ln = vim.fn.line('.') local qf = vim.fn.getqflist() if #qf == 0 then return end table.remove(qf, ln) vim.fn.setqflist(qf, 'r') vim.cmd('copen') -- move cursor to stay at same index (or up one if at EOF) vim.api.nvim_win_set_cursor(vim.fn.win_getid(), { ln < #qf and ln or math.max(ln - 1, 1), 0 }) end, { buffer = true }) end, }) -- random keymaps vim.keymap.set({ 'v', 'i' }, 'wq', 'l', { noremap = true, silent = true }) vim.keymap.set('n', '', vim.cmd.bnext, { noremap = true, silent = true }) vim.keymap.set('n', '', vim.cmd.bprev, { noremap = true, silent = true }) vim.keymap.set('v', '<', '', '>gv') vim.keymap.set('v', 'q:', '