Sat, 11 Mar 2023 01:51:23 -0500
port custom autocmds to lua
--- a/.config/nvim/init.lua +++ b/.config/nvim/init.lua @@ -4,6 +4,8 @@ require("config.options") require("lazy-bootstrap") require("config.maps") require("config.lsp") +require("config.autocmds") + require("local.tig").setup() -- >> Builtin
new file mode 100644 --- /dev/null +++ b/.config/nvim/lua/config/autocmds.lua @@ -0,0 +1,76 @@ +local cmd = vim.cmd +local fn = vim.fn + +local vimrc = vim.api.nvim_create_augroup("vimrc", { clear = true }) + +local function autocmd(event, pattern, opts) + vim.api.nvim_create_autocmd(event, + vim.tbl_extend("keep", opts, { + group = vimrc, + pattern = pattern, + }) + ) +end + +local function cb(func) + return { callback = function(_) func() end } +end + +-- >> neovim specific +-- Always start terminals in insert/terminal mode +autocmd("TermOpen", "*", cb(cmd.startinsert)) + +-- neovim's autoread doesn't do this by default. +autocmd("FocusGained", "*", cb(cmd.checktime)) + +-- >> autowriteall improvment +-- Stopinsert on leave, or autowriteall doesn't work. +autocmd({"WinLeave", "FocusLost"}, "*", { callback = function(_) + if not fn.pumvisible() then + fn.stopinsert() + end +end }) + +-- write all on leave +autocmd("FocusLost", "*", cb(cmd.wa)) + + +-- >> auto mkpath on write +autocmd("BufWritePre", "*", { callback = function(ctx) + if vim.bo[ctx.buf].buftype == "" + and not string.match(ctx.file, "^[%w]+:") + then + fn.mkdir(fn.fnamemodify(ctx.file, ":p:h"), "p") + end +end }) + +-- >> auto session ? + +-- >> jump to last position on open +autocmd("BufReadPost", "*", { callback = function(_) + local ft = vim.bo.filetype + if ft == "mail" or string.match(ft, "^git") or string.match(ft, "^hg") then + return '' + end + + local lastpos = fn.line([['"]]) + if lastpos >= 1 and lastpos <= fn.line("$") then + vim.cmd([[normal! g`"]]) + end +end }) + +-- >> simple highlight conflict markers +autocmd("BufReadPost", "*", { callback = function(_) + fn.matchadd("Error", [[^\([<>|]\)\{7} \@=\|^=\{7}$]]) +end }) + +-- >> nicer quickfix +autocmd("BufReadPost", "quickfix", { callback = function(ctx) + -- simplify noisy :ltag output + if string.match(vim.w.quickfix_title, "^ltag") then + fn.matchadd("Conceal", [[|\zs\^\\V\|\\$|.*]]) + end + + -- easy close + vim.keymap.set("n", "q", "<C-w>q", {buffer = true}) +end })
--- a/.config/nvim/plugin/vimrc/autocmds.vim +++ b/.config/nvim/plugin/vimrc/autocmds.vim @@ -1,49 +1,3 @@ -augroup vimrc - autocmd! - - autocmd TermOpen * startinsert - - autocmd WinLeave,FocusLost * if !pumvisible() | stopinsert | endif - - " complement to autoread? - autocmd FocusGained * silent! checktime - - " complement to autowriteall - autocmd FocusLost * silent! wa - - " Make paths when writing, as necessary - autocmd BufWritePre * :call vimrc#MkNonExDir(expand('<afile>'), +expand('<abuf>')) - - if ! &diff - " set and load a session based on servername - autocmd VimEnter * nested call vimrc#AutoSessionCheck() - - " Jump to last known pos - autocmd BufReadPost * - \ if &filetype !~# 'mail\|^git\|^hg' && line("'\"") >= 1 && line("'\"") <= line("$") | - \ exe "normal! g`\"" | - \ endif - - " Simple highlight conflict markers - autocmd BufReadPost * - \ match Error "^\([<>|]\)\{7} \@=\|^=\{7}$" - endif - - " Simplify noisy ltag output - autocmd BufReadPost quickfix - \ if w:quickfix_title =~# '^:ltag' | - \ setl modifiable | - \ silent exe ':%s/\^\\V\s*\|\\\$|.*//g' | - \ setl nomodifiable | - \ endif - - " easy close quickfix - autocmd BufReadPost quickfix nmap <buffer> q <C-w>c - - " Neomutt changed their tmpfile pattern, ugh - autocmd BufNewFile,BufRead neomutt-*-\w\+ setf mail -augroup END - " https://mjj.io/2015/01/27/encrypting-files-with-gpg-and-vim/ " hacked to work with vimwiki augroup encrypted