From e9a3d16260ffe25590dfef4d52f9c6d8226263e8 Mon Sep 17 00:00:00 2001 From: jdhao Date: Sat, 20 Aug 2022 15:00:10 +0800 Subject: [PATCH] refactor: move part of autocmd to lua script --- core/autocommands.vim | 40 ++---------------- lua/custom-autocmd.lua | 92 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 37 deletions(-) create mode 100644 lua/custom-autocmd.lua diff --git a/core/autocommands.vim b/core/autocommands.vim index c0c01d2..0fad842 100644 --- a/core/autocommands.vim +++ b/core/autocommands.vim @@ -41,26 +41,6 @@ function s:resume_cursor_position() abort endif endfunction -" 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 -augroup non_utf8_file_warn - autocmd! - " we can not use `lua vim.notify()`: it will error out E5107 parsing lua. - autocmd BufRead * if &fileencoding != 'utf-8' | call v:lua.vim.notify('File not in UTF-8 format!', 'warn', {'title': 'nvim-config'}) | endif -augroup END - -" Automatically reload the file if it is changed outside of Nvim, see -" https://unix.stackexchange.com/a/383044/221410. It seems that `checktime` -" command 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. -augroup auto_read - autocmd! - autocmd FileChangedShellPost * call v:lua.vim.notify("File changed on disk. Buffer reloaded!", 'warn', {'title': 'nvim-config'}) - autocmd FocusGained,CursorHold * if getcmdwintype() == '' | checktime | endif -augroup END - augroup numbertoggle autocmd! autocmd BufEnter,FocusGained,InsertLeave,WinEnter * if &nu | set rnu | endif @@ -88,12 +68,6 @@ function! s:custom_highlight() abort highlight MatchParen cterm=bold,underline gui=bold,underline endfunction -" highlight yanked region, see `:h lua-highlight` -augroup highlight_yank - autocmd! - au TextYankPost * silent! lua vim.highlight.on_yank{higroup="YankColor", timeout=300, on_visual=false} -augroup END - augroup auto_close_win autocmd! autocmd BufEnter * call s:quit_current_win() @@ -125,17 +99,6 @@ augroup git_repo_check autocmd VimEnter,DirChanged * call utils#Inside_git_repo() augroup END -" Auto-generate packer_compiled.lua file -augroup packer_auto_compile - autocmd! - autocmd BufWritePost */nvim/lua/plugins.lua source | PackerCompile -augroup END - -augroup auto_create_dir - autocmd! - autocmd BufWritePre * lua require('utils').may_create_dir(vim.fn.fnamemodify(vim.fn.expand(''), ":p:h")) -augroup END - " ref: https://vi.stackexchange.com/a/169/15292 function! s:handle_large_file() abort let g:large_file = 10485760 " 10MB @@ -155,3 +118,6 @@ augroup LargeFile autocmd! autocmd BufReadPre * call s:handle_large_file() augroup END + +" Load auto-command defined in Lua +lua require("custom-autocmd") diff --git a/lua/custom-autocmd.lua b/lua/custom-autocmd.lua new file mode 100644 index 0000000..87ed449 --- /dev/null +++ b/lua/custom-autocmd.lua @@ -0,0 +1,92 @@ +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_augroup("non_utf8_file", { + clear = true +}) + +api.nvim_create_autocmd({ "BufRead" }, { + pattern = "*", + group = "non_utf8_file", + 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_augroup("highlight_yank", { + clear = true +}) + +api.nvim_create_autocmd({ "TextYankPost" }, { + pattern = "*", + group = "highlight_yank", + callback = function() + vim.highlight.on_yank { higroup = "YankColor", timeout = 300, on_visual = false } + end +}) + +-- Auto-generate packer_compiled.lua file +api.nvim_create_augroup("packer_auto_compile", { + clear = true +}) + +api.nvim_create_autocmd({ "BufWritePost" }, { + pattern = "*/nvim/lua/plugins.lua", + group = "packer_auto_compile", + callback = function() + local fpath = fn.expand("") + local cmd = "source " .. fpath + vim.cmd(cmd) + vim.cmd("PackerCompile") + end +}) + +-- Auto-create dir when saving a file, in case some intermediate directory does not exist +api.nvim_create_augroup("auto_create_dir", { + clear = true +}) + +api.nvim_create_autocmd({ "BufWritePre" }, { + pattern = "*", + group = "auto_create_dir", + callback = function() + local fpath = fn.expand('') + local dir = fn.fnamemodify(fpath, ":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 +})