mirror of
https://github.com/jdhao/nvim-config.git
synced 2025-06-08 14:14:33 +02:00
For TextYankPost event, it includes both yank and delete, we should only restore cursor position for yank, not for delete. Otherwise, it messes up with text deletion when you visually select multiple lines and delete them. See also issue reported here: https://github.com/jdhao/nvim-config/pull/222#issuecomment-1698634645
86 lines
2.6 KiB
Lua
86 lines
2.6 KiB
Lua
local fn = vim.fn
|
|
local api = vim.api
|
|
|
|
local utils = require("utils")
|
|
|
|
-- Display a message when the current file is not in utf-8 format.
|
|
-- Note that we need to use `unsilent` command here because of this issue:
|
|
-- https://github.com/vim/vim/issues/4379
|
|
api.nvim_create_autocmd({ "BufRead" }, {
|
|
pattern = "*",
|
|
group = api.nvim_create_augroup("non_utf8_file", { clear = true }),
|
|
callback = function()
|
|
if vim.bo.fileencoding ~= "utf-8" then
|
|
vim.notify("File not in UTF-8 format!", vim.log.levels.WARN, { title = "nvim-config" })
|
|
end
|
|
end,
|
|
})
|
|
|
|
-- highlight yanked region, see `:h lua-highlight`
|
|
local yank_group = api.nvim_create_augroup("highlight_yank", { clear = true })
|
|
api.nvim_create_autocmd({ "TextYankPost" }, {
|
|
pattern = "*",
|
|
group = yank_group,
|
|
callback = function()
|
|
vim.highlight.on_yank { higroup = "YankColor", timeout = 300 }
|
|
end,
|
|
})
|
|
|
|
api.nvim_create_autocmd({ "CursorMoved" }, {
|
|
pattern = "*",
|
|
group = yank_group,
|
|
callback = function()
|
|
vim.g.current_cursor_pos = vim.fn.getcurpos()
|
|
end,
|
|
})
|
|
|
|
api.nvim_create_autocmd("TextYankPost", {
|
|
pattern = "*",
|
|
group = yank_group,
|
|
callback = function(ev)
|
|
if vim.v.event.operator == 'y' then
|
|
vim.fn.setpos('.', vim.g.current_cursor_pos)
|
|
end
|
|
end,
|
|
})
|
|
|
|
-- Auto-create dir when saving a file, in case some intermediate directory does not exist
|
|
api.nvim_create_autocmd({ "BufWritePre" }, {
|
|
pattern = "*",
|
|
group = api.nvim_create_augroup("auto_create_dir", { clear = true }),
|
|
callback = function(ctx)
|
|
local dir = fn.fnamemodify(ctx.file, ":p:h")
|
|
utils.may_create_dir(dir)
|
|
end,
|
|
})
|
|
|
|
-- Automatically reload the file if it is changed outside of Nvim, see https://unix.stackexchange.com/a/383044/221410.
|
|
-- It seems that `checktime` does not work in command line. We need to check if we are in command
|
|
-- line before executing this command, see also https://vi.stackexchange.com/a/20397/15292 .
|
|
api.nvim_create_augroup("auto_read", { clear = true })
|
|
|
|
api.nvim_create_autocmd({ "FileChangedShellPost" }, {
|
|
pattern = "*",
|
|
group = "auto_read",
|
|
callback = function()
|
|
vim.notify("File changed on disk. Buffer reloaded!", vim.log.levels.WARN, { title = "nvim-config" })
|
|
end,
|
|
})
|
|
|
|
api.nvim_create_autocmd({ "FocusGained", "CursorHold" }, {
|
|
pattern = "*",
|
|
group = "auto_read",
|
|
callback = function()
|
|
if fn.getcmdwintype() == "" then
|
|
vim.cmd("checktime")
|
|
end
|
|
end,
|
|
})
|
|
|
|
-- Resize all windows when we resize the terminal
|
|
api.nvim_create_autocmd("VimResized", {
|
|
group = api.nvim_create_augroup("win_autoresize", { clear = true }),
|
|
desc = "autoresize windows on resizing operation",
|
|
command = "wincmd =",
|
|
})
|