vim.opt.number = true vim.opt.relativenumber = true vim.opt.cursorline = true vim.opt.wrap = false vim.opt.scrolloff = 10 vim.opt.sidescrolloff = 8 vim.opt.tabstop = 4 vim.opt.shiftwidth = 4 vim.opt.softtabstop = 4 vim.opt.expandtab = true vim.opt.smartindent = true vim.opt.autoindent = true vim.opt.ignorecase = true vim.opt.smartcase = true vim.opt.hlsearch = false vim.opt.incsearch = true vim.opt.termguicolors = true vim.opt.signcolumn = "yes" vim.opt.colorcolumn = "120" vim.opt.showmatch = false --- vim.opt.matchtime = 2 vim.opt.conceallevel = 0 vim.opt.concealcursor = "" vim.opt.synmaxcol = 1000 vim.opt.isfname:append("@-@") vim.opt.backup = false vim.opt.writebackup = false vim.opt.swapfile = false vim.opt.undofile = true vim.opt.undodir = vim.fn.expand("~/.cache/vim/undodir") vim.opt.updatetime = 100 vim.opt.timeoutlen = 500 vim.opt.ttimeoutlen = 0 vim.opt.autoread = true vim.opt.autowrite = false vim.opt.hidden = true --- vim.opt.errorbells = false vim.opt.backspace = "indent,eol,start" vim.opt.autochdir = false vim.opt.path:append("**") vim.opt.selection = "exclusive" vim.opt.mouse = "a" vim.opt.modifiable = true vim.opt.encoding = "UTF-8" -- Split behavior vim.opt.splitbelow = true vim.opt.splitright = true vim.g.mapleader = " " vim.g.maplocalleader = vim.api.nvim_replace_termcodes("", false, false, true) vim.o.exrc = true vim.o.showtabline = 2 vim.cmd("set title") vim.cmd("set ic") -- Delete without yanking vim.keymap.set({ "n", "v" }, "d", '"_d', { desc = "Delete without yanking" }) vim.keymap.set({ "n", "v" }, "", '"+y', { desc = "Copy to clipboard" }) vim.keymap.set("x", "p", '"_dP', { desc = "Replace without yanking" }) -- Wayland clipboard mappings vim.keymap.set({ "n", "v" }, "y", '"+y', { desc = "Yank to system clipboard" }) vim.keymap.set("n", "Y", '"+Y', { desc = "Yank line to system clipboard" }) vim.keymap.set({ "n", "v" }, "p", '"+p', { desc = "Paste from system clipboard" }) vim.keymap.set({ "n", "v" }, "P", '"+P', { desc = "Paste from system clipboard before cursor" }) -- Better J behavior vim.keymap.set("n", "J", "mzJ`z", { desc = "Join lines and keep cursor position" }) --- center when jumping vim.keymap.set("n", "n", "nzzzv", { desc = "Next search result (centered)" }) vim.keymap.set("n", "N", "Nzzzv", { desc = "Previous search result (centered)" }) vim.keymap.set("n", "", "zz", { desc = "Half page down (centered)" }) vim.keymap.set("n", "", "zz", { desc = "Half page up (centered)" }) --- window navigation vim.keymap.set("n", "Left", "h", { desc = "Move to left window" }) vim.keymap.set("n", "Right", "l", { desc = "Move to right window" }) vim.keymap.set("n", "Top", "k", { desc = "Move to top window" }) vim.keymap.set("n", "Down", "j", { desc = "Move to bottom window" }) vim.keymap.set("t", "", "", { desc = "Exit terminal mode" }) vim.keymap.set("n", "tn", "$tabnew", { desc = "create tab" }) vim.keymap.set("n", "n", function() vim.cmd("tabnext 1") end, { desc = "Go to tab 1" }) vim.keymap.set("n", "e", function() vim.cmd("tabnext 2") end, { desc = "Go to tab 2" }) vim.keymap.set("n", "i", function() vim.cmd("tabnext 3") end, { desc = "Go to tab 3" }) vim.keymap.set("n", "a", function() vim.cmd("tabnext 4") end, { desc = "Go to tab 4" }) vim.keymap.set({ "n", "t" }, "", function() vim.cmd("tabnext #") end, { desc = "Go to previous tab" }) vim.keymap.set({ "n", "t" }, "", "p", { desc = "Go to previous pane" }) vim.keymap.set("n", "v", "vsplit", { desc = "split (vertical line)" }) vim.keymap.set("n", "h", "split", { desc = "split (horizontal line)" }) vim.keymap.set("n", "", "w", { desc = "save buffer" }) vim.diagnostic.config({ virtual_text = false, virtual_lines = true, signs = true, underline = true, update_in_insert = false, severity_sort = true, }) -- Highlight yanked text vim.api.nvim_create_autocmd("TextYankPost", { group = augroup, callback = function() vim.highlight.on_yank() end, }) --- return to last edit position when opening files vim.api.nvim_create_autocmd("BufReadPost", { group = augroup, callback = function() local mark = vim.api.nvim_buf_get_mark(0, '"') local lcount = vim.api.nvim_buf_line_count(0) if mark[1] > 0 and mark[1] <= lcount then pcall(vim.api.nvim_win_set_cursor, 0, mark) end end, }) --- command line completion vim.opt.wildmenu = true vim.opt.wildmode = "longest:full,full" vim.opt.wildignore:append({ "*.o", "*.obj", "*.pyc", "*.class", "*.jar", "*.lock" })