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

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",
})