You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
3.3 KiB
152 lines
3.3 KiB
local autocmd = vim.api.nvim_create_autocmd |
|
local augroup = vim.api.nvim_create_augroup |
|
|
|
-- General autocommands |
|
local general = augroup("General", { clear = true }) |
|
|
|
-- Remove trailing whitespace on save |
|
autocmd("BufWritePre", { |
|
group = general, |
|
pattern = "*", |
|
callback = function() |
|
local save_cursor = vim.fn.getpos(".") |
|
vim.cmd([[%s/\s\+$//e]]) |
|
vim.fn.setpos(".", save_cursor) |
|
end, |
|
desc = "Remove trailing whitespace", |
|
}) |
|
|
|
-- Auto-resize splits when window is resized |
|
autocmd("VimResized", { |
|
group = general, |
|
pattern = "*", |
|
command = "wincmd =", |
|
desc = "Auto-resize splits", |
|
}) |
|
|
|
-- Return to last edit position when opening files |
|
autocmd("BufReadPost", { |
|
group = general, |
|
pattern = "*", |
|
callback = function() |
|
local mark = vim.api.nvim_buf_get_mark(0, '"') |
|
if mark[1] > 0 and mark[1] <= vim.api.nvim_buf_line_count(0) then |
|
vim.api.nvim_win_set_cursor(0, mark) |
|
end |
|
end, |
|
desc = "Return to last edit position", |
|
}) |
|
|
|
-- Create directories when saving a file if they don't exist |
|
autocmd("BufWritePre", { |
|
group = general, |
|
pattern = "*", |
|
callback = function(event) |
|
if event.match:match("^%w%w+://") then |
|
return |
|
end |
|
local file = vim.loop.fs_realpath(event.match) or event.match |
|
vim.fn.mkdir(vim.fn.fnamemodify(file, ":p:h"), "p") |
|
end, |
|
desc = "Auto-create directories", |
|
}) |
|
|
|
autocmd({ "BufWinEnter" }, { |
|
callback = function() |
|
vim.cmd("set formatoptions-=cro") |
|
end, |
|
}) |
|
|
|
autocmd({ "FileType" }, { |
|
pattern = { |
|
"netrw", |
|
"Jaq", |
|
"qf", |
|
"git", |
|
"help", |
|
"man", |
|
"lspinfo", |
|
"oil", |
|
"spectre_panel", |
|
"lir", |
|
"DressingSelect", |
|
"tsplayground", |
|
"query", |
|
"", |
|
}, |
|
callback = function() |
|
vim.cmd([[ |
|
nnoremap <silent> <buffer> q :close<CR> |
|
set nobuflisted |
|
]]) |
|
end, |
|
}) |
|
|
|
autocmd({ "CmdWinEnter" }, { |
|
callback = function() |
|
vim.cmd("quit") |
|
end, |
|
}) |
|
|
|
autocmd({ "VimResized" }, { |
|
callback = function() |
|
vim.cmd("tabdo wincmd =") |
|
end, |
|
}) |
|
|
|
autocmd({ "BufWinEnter" }, { |
|
pattern = { "*" }, |
|
callback = function() |
|
vim.cmd("checktime") |
|
end, |
|
}) |
|
|
|
autocmd({ "BufWinEnter" }, { |
|
pattern = { "*" }, |
|
callback = function() |
|
local dirname = vim.fn.getcwd():match("([^/]+)$") |
|
vim.opt.titlestring = dirname |
|
end, |
|
}) |
|
|
|
autocmd({ "TextYankPost" }, { |
|
callback = function() |
|
vim.highlight.on_yank({ higroup = "Visual", timeout = 40 }) |
|
end, |
|
}) |
|
|
|
autocmd({ "FileType" }, { |
|
pattern = { "gitcommit", "markdown", "NeogitCommitMessage" }, |
|
callback = function() |
|
vim.opt_local.wrap = true |
|
vim.opt_local.spell = true |
|
end, |
|
}) |
|
|
|
autocmd({ "CursorHold" }, { |
|
callback = function() |
|
local status_ok, luasnip = pcall(require, "luasnip") |
|
if not status_ok then |
|
return |
|
end |
|
if luasnip.expand_or_jumpable() then |
|
-- ask maintainer for option to make this silent |
|
-- luasnip.unlink_current() |
|
vim.cmd([[silent! lua require("luasnip").unlink_current()]]) |
|
end |
|
end, |
|
}) |
|
|
|
-- Window navigation in sidekick_terminal buffers |
|
autocmd({ "FileType" }, { |
|
pattern = "sidekick_terminal", |
|
callback = function() |
|
local opts = { buffer = true, noremap = true, silent = true } |
|
vim.keymap.set("t", "<m-h>", "<C-\\><C-n><C-w>h", opts) |
|
vim.keymap.set("t", "<m-j>", "<C-\\><C-n><C-w>j", opts) |
|
vim.keymap.set("t", "<m-k>", "<C-\\><C-n><C-w>k", opts) |
|
vim.keymap.set("t", "<m-l>", "<C-\\><C-n><C-w>l", opts) |
|
-- vim.keymap.set("t", "<Esc>", "<Nop>", opts) |
|
end, |
|
desc = "Window navigation in sidekick terminal", |
|
})
|
|
|