151 lines
4.4 KiB
Lua
151 lines
4.4 KiB
Lua
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" }, "<leader>d", '"_d', { desc = "Delete without yanking" })
|
|
vim.keymap.set({ "n", "v" }, "<C-c>", '"+y', { desc = "Copy to clipboard" })
|
|
|
|
-- Wayland clipboard mappings
|
|
vim.keymap.set({ "n", "v" }, "<leader>y", '"+y', { desc = "Yank to system clipboard" })
|
|
vim.keymap.set("n", "<leader>Y", '"+Y', { desc = "Yank line to system clipboard" })
|
|
vim.keymap.set({ "n", "v" }, "<leader>p", '"+p', { desc = "Paste from system clipboard" })
|
|
vim.keymap.set({ "n", "v" }, "<leader>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", "<C-d>", "<C-d>zz", { desc = "Half page down (centered)" })
|
|
vim.keymap.set("n", "<C-u>", "<C-u>zz", { desc = "Half page up (centered)" })
|
|
|
|
--- window navigation
|
|
vim.keymap.set("n", "<C-h>", "<C-w>h", { desc = "Move to left window" })
|
|
vim.keymap.set("n", "<C-l>", "<C-w>l", { desc = "Move to right window" })
|
|
vim.keymap.set("n", "<C-k>", "<C-w>k", { desc = "Move to top window" })
|
|
vim.keymap.set("n", "<C-j>", "<C-w>j", { desc = "Move to bottom window" })
|
|
|
|
--- indenting in visual mode
|
|
-- vim.keymap.set("v", "<", "<gv", { desc = "Indent left and reselect" })
|
|
-- 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("<afile>"))
|
|
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("<afile>: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" })
|