128 lines
2.9 KiB
Lua
128 lines
2.9 KiB
Lua
local function augroup(name)
|
|
return vim.api.nvim_create_augroup('marleyvim_' .. name, { clear = true })
|
|
end
|
|
|
|
local autocmd = vim.api.nvim_create_autocmd
|
|
|
|
autocmd({ 'FocusGained', 'TermClose', 'TermLeave' }, {
|
|
desc = 'Reload file when changed if needed',
|
|
group = augroup('checktime'),
|
|
callback = function()
|
|
if vim.o.buftype ~= 'nofile' then
|
|
vim.cmd('checktime')
|
|
end
|
|
end,
|
|
})
|
|
|
|
autocmd({ 'TextYankPost' }, {
|
|
desc = 'Highlight on yank',
|
|
group = augroup('highlight_yank'),
|
|
callback = function()
|
|
(vim.hl or vim.highlight).on_yank()
|
|
end,
|
|
})
|
|
|
|
autocmd({ 'VimResized' }, {
|
|
desc = 'Resize splits on window resize',
|
|
group = augroup('resize_splits'),
|
|
callback = function()
|
|
local current_tab = vim.fn.tabpagenr()
|
|
|
|
vim.cmd('tabdo wincmd =')
|
|
vim.cmd('tabnext ' .. current_tab)
|
|
end,
|
|
})
|
|
|
|
autocmd({ 'BufReadPost' }, {
|
|
desc = 'Go to last location when opening a buffer',
|
|
group = augroup('last_loc'),
|
|
callback = function(event)
|
|
local exclude = { 'gitcommit' }
|
|
local buf = event.buf
|
|
|
|
if
|
|
vim.tbl_contains(exclude, vim.bo[buf].filetype)
|
|
or vim.b[buf].marleyvim_last_loc
|
|
then
|
|
return
|
|
end
|
|
|
|
vim.b[buf].marleyvim_last_loc = true
|
|
|
|
local mark = vim.api.nvim_buf_get_mark(buf, '"')
|
|
local lcount = vim.api.nvim_buf_line_count(buf)
|
|
|
|
if mark[1] > 0 and mark[1] <= lcount then
|
|
pcall(vim.api.nvim_win_set_cursor, 0, mark)
|
|
end
|
|
end,
|
|
})
|
|
|
|
autocmd({ 'FileType' }, {
|
|
desc = 'Close some filetypes with <q>',
|
|
group = augroup('close_with_q'),
|
|
pattern = {
|
|
'PlenaryTestPopup',
|
|
'checkhealth',
|
|
'dbout',
|
|
'gitsigns-blame',
|
|
'grug-far',
|
|
'help',
|
|
'lspinfo',
|
|
'neotest-output',
|
|
'neotest-output-panel',
|
|
'neotest-summary',
|
|
'notify',
|
|
'qf',
|
|
'snacks_win',
|
|
'spectre_panel',
|
|
'startuptime',
|
|
'tsplayground',
|
|
},
|
|
callback = function(event)
|
|
vim.bo[event.buf].buflisted = false
|
|
|
|
vim.schedule(function()
|
|
vim.keymap.set({ 'n' }, 'q', function()
|
|
vim.cmd('close')
|
|
pcall(vim.api.nvim_buf_delete, event.buf, { force = true })
|
|
end, {
|
|
desc = 'Quit buffer',
|
|
buffer = event.buf,
|
|
silent = true,
|
|
})
|
|
end)
|
|
end,
|
|
})
|
|
|
|
autocmd({ 'FileType' }, {
|
|
desc = 'Make it easier to close man-files',
|
|
group = augroup('man_unlisted'),
|
|
pattern = { 'man' },
|
|
callback = function(event)
|
|
vim.bo[event.buf].buflisted = false
|
|
end,
|
|
})
|
|
|
|
autocmd({ 'FileType' }, {
|
|
desc = 'Fix conceallevel for JSON files',
|
|
group = augroup('json_conceal'),
|
|
pattern = { 'json', 'jsonc', 'json5' },
|
|
callback = function()
|
|
vim.opt_local.conceallevel = 0
|
|
end,
|
|
})
|
|
|
|
autocmd({ 'BufWritePre' }, {
|
|
desc = 'Auto create missing directories when saving a file',
|
|
group = augroup('auto_create_dir'),
|
|
callback = function(event)
|
|
if event.match:match('^%w%w+:[\\/][\\/') then
|
|
return
|
|
end
|
|
|
|
local file = vim.uv.fs_realpath(event.match) or event.match
|
|
|
|
vim.fn.mkdir(vim.fn.fnamemodify(file, ':p:h'), 'p')
|
|
end,
|
|
})
|