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.o.exrc = true 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" }) -- 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", "", "h", { desc = "Move to left window" }) vim.keymap.set("n", "", "l", { desc = "Move to right window" }) vim.keymap.set("n", "", "k", { desc = "Move to top window" }) vim.keymap.set("n", "", "j", { desc = "Move to bottom window" }) --- indenting in visual mode -- vim.keymap.set("v", "<", "", ">gv", { desc = "Indent right and reselect" }) local augroup = vim.api.nvim_create_augroup("UserConfig", {}) -- 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, }) --- close terminal when process exits vim.api.nvim_create_autocmd("TermClose", { group = augroup, callback = function() if vim.v.event.status == 0 then vim.api.nvim_buf_delete(0, {}) end end, }) -- Disable syntax highlighting for large files vim.api.nvim_create_autocmd("BufReadPre", { pattern = "*", callback = function() local size = vim.fn.getfsize(vim.fn.expand("")) if size > 1024 * 1024 then -- 1MB threshold vim.cmd("syntax off") vim.opt_local.wrap = false vim.opt_local.number = false vim.opt_local.relativenumber = false end end, }) --- create directory when saving files -- vim.api.nvim_create_autocmd("BufWritePre", { -- group = augroup, -- callback = function() -- local dir = vim.fn.expand(":p:h") -- if vim.fn.isdirectory(dir) == 0 and dir ~= "oil:" then -- vim.fn.mkdir(dir, "p") -- end -- end, -- }) --- command line completion vim.opt.wildmenu = true vim.opt.wildmode = "longest:full,full" vim.opt.wildignore:append({ "*.o", "*.obj", "*.pyc", "*.class", "*.jar" })