add autocmds
This commit is contained in:
parent
d886889d3c
commit
7a7c6dbcdf
3 changed files with 126 additions and 0 deletions
|
@ -89,6 +89,7 @@ in {
|
||||||
|
|
||||||
extraLuaModules = [
|
extraLuaModules = [
|
||||||
"config.undodir"
|
"config.undodir"
|
||||||
|
"custom_autocmd"
|
||||||
];
|
];
|
||||||
|
|
||||||
vim.g.isDesktop = config.isDesktop;
|
vim.g.isDesktop = config.isDesktop;
|
||||||
|
|
66
config/programs/vim/modules/lua/custom_autocmd.lua
Normal file
66
config/programs/vim/modules/lua/custom_autocmd.lua
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
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`
|
||||||
|
api.nvim_create_autocmd({ "TextYankPost" }, {
|
||||||
|
pattern = "*",
|
||||||
|
group = api.nvim_create_augroup("highlight_yank", { clear = true }),
|
||||||
|
callback = function()
|
||||||
|
vim.highlight.on_yank { higroup = "YankColor", timeout = 300 }
|
||||||
|
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 =",
|
||||||
|
})
|
59
config/programs/vim/modules/lua/utils.lua
Normal file
59
config/programs/vim/modules/lua/utils.lua
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
local fn = vim.fn
|
||||||
|
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
function M.executable(name)
|
||||||
|
if fn.executable(name) > 0 then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
--- check whether a feature exists in Nvim
|
||||||
|
--- @feat: string
|
||||||
|
--- the feature name, like `nvim-0.7` or `unix`.
|
||||||
|
--- return: bool
|
||||||
|
M.has = function(feat)
|
||||||
|
if fn.has(feat) == 1 then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Create a dir if it does not exist
|
||||||
|
function M.may_create_dir(dir)
|
||||||
|
local res = fn.isdirectory(dir)
|
||||||
|
|
||||||
|
if res == 0 then
|
||||||
|
fn.mkdir(dir, "p")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Generate random integers in the range [Low, High], inclusive,
|
||||||
|
--- adapted from https://stackoverflow.com/a/12739441/6064933
|
||||||
|
--- @low: the lower value for this range
|
||||||
|
--- @high: the upper value for this range
|
||||||
|
function M.rand_int(low, high)
|
||||||
|
-- Use lua to generate random int, see also: https://stackoverflow.com/a/20157671/6064933
|
||||||
|
math.randomseed(os.time())
|
||||||
|
|
||||||
|
return math.random(low, high)
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Select a random element from a sequence/list.
|
||||||
|
--- @seq: the sequence to choose an element
|
||||||
|
function M.rand_element(seq)
|
||||||
|
local idx = M.rand_int(1, #seq)
|
||||||
|
|
||||||
|
return seq[idx]
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.add_pack(name)
|
||||||
|
local status, error = pcall(vim.cmd, "packadd " .. name)
|
||||||
|
|
||||||
|
return status
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
Loading…
Reference in a new issue