summaryrefslogtreecommitdiffstats
path: root/.config/nvim/lua/helpers/autocmds.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/nvim/lua/helpers/autocmds.lua')
-rw-r--r--.config/nvim/lua/helpers/autocmds.lua145
1 files changed, 145 insertions, 0 deletions
diff --git a/.config/nvim/lua/helpers/autocmds.lua b/.config/nvim/lua/helpers/autocmds.lua
index 11f4480..bf2c325 100644
--- a/.config/nvim/lua/helpers/autocmds.lua
+++ b/.config/nvim/lua/helpers/autocmds.lua
@@ -29,3 +29,148 @@ vim.api.nvim_create_autocmd("VimResized", {
29 }, 29 },
30 command = "wincmd =", 30 command = "wincmd =",
31}) 31})
32
33-- https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
34-- Set typst filetype
35vim.api.nvim_create_autocmd(
36 {
37 "BufNewFile",
38 "BufRead",
39 },
40 {
41 group = augroup("typst"),
42 pattern = "*.typ",
43 callback = function()
44 local buf = vim.api.nvim_get_current_buf()
45 vim.api.nvim_set_option_value("filetype", "typst", { buf = buf })
46 vim.api.nvim_set_option_value("shiftwidth", 2, { buf = buf })
47 end
48 }
49)
50
51-- Set PKGBUILD filetype
52vim.api.nvim_create_autocmd(
53 {
54 "BufNewFile",
55 "BufRead",
56 },
57 {
58 group = augroup("pkgbuild"),
59 pattern = "PKGBUILD",
60 callback = function()
61 local buf = vim.api.nvim_get_current_buf()
62 vim.api.nvim_set_option_value("filetype", "PKGBUILD", { buf = buf })
63 end
64 }
65)
66
67-- Set buku-edit filetype
68vim.api.nvim_create_autocmd(
69 {
70 "BufNewFile",
71 "BufRead",
72 },
73 {
74 group = augroup("buku-edit"),
75 pattern = "buku-edit-*",
76 callback = function()
77 local buf = vim.api.nvim_get_current_buf()
78 vim.api.nvim_set_option_value("filetype", "buku", { buf = buf })
79 end
80 }
81)
82
83-- Set mail filetype
84vim.api.nvim_create_autocmd(
85 {
86 "BufNewFile",
87 "BufRead",
88 },
89 {
90 group = augroup("mail"),
91 pattern = "/tmp/neomutt*",
92 callback = function()
93 local buf = vim.api.nvim_get_current_buf()
94 vim.api.nvim_set_option_value("autoindent", false, { buf = buf })
95 vim.api.nvim_set_option_value("filetype", "mail", { buf = buf })
96 vim.api.nvim_set_option_value("wrapmargin", 0, { buf = buf })
97 vim.api.nvim_set_option_value("textwidth", 80, { buf = buf })
98 end
99 }
100)
101
102-- Resize splits if window got resized
103vim.api.nvim_create_autocmd({ "VimResized" }, {
104 group = augroup("resize_splits"),
105 callback = function()
106 local current_tab = vim.fn.tabpagenr()
107 vim.cmd("tabdo wincmd =")
108 vim.cmd("tabnext " .. current_tab)
109 end,
110})
111
112-- go to last loc when opening a buffer
113vim.api.nvim_create_autocmd("BufReadPost", {
114 group = augroup("last_loc"),
115 callback = function(event)
116 local exclude = { "gitcommit" }
117 local buf = event.buf
118 if vim.tbl_contains(exclude, vim.bo[buf].filetype) or vim.b[buf].lazyvim_last_loc then
119 return
120 end
121 vim.b[buf].lazyvim_last_loc = true
122 local mark = vim.api.nvim_buf_get_mark(buf, '"')
123 local lcount = vim.api.nvim_buf_line_count(buf)
124 if mark[1] > 0 and mark[1] <= lcount then
125 pcall(vim.api.nvim_win_set_cursor, 0, mark)
126 end
127 end,
128})
129
130-- close some filetypes with <q>
131vim.api.nvim_create_autocmd("FileType", {
132 group = augroup("close_with_q"),
133 pattern = {
134 "PlenaryTestPopup",
135 "checkhealth",
136 "dbout",
137 "gitsigns-blame",
138 "grug-far",
139 "help",
140 "lspinfo",
141 "neotest-output",
142 "neotest-output-panel",
143 "neotest-summary",
144 "notify",
145 "qf",
146 "snacks_win",
147 "spectre_panel",
148 "startuptime",
149 "tsplayground",
150 },
151 callback = function(event)
152 vim.bo[event.buf].buflisted = false
153 vim.schedule(function()
154 vim.keymap.set("n", "q", function()
155 vim.cmd("close")
156 pcall(vim.api.nvim_buf_delete, event.buf, { force = true })
157 end, {
158 buffer = event.buf,
159 silent = true,
160 desc = "Quit buffer",
161 })
162 end)
163 end,
164})
165
166-- Auto create dir when saving a file, in case some intermediate directory does not exist
167vim.api.nvim_create_autocmd({ "BufWritePre" }, {
168 group = augroup("auto_create_dir"),
169 callback = function(event)
170 if event.match:match("^%w%w+:[\\/][\\/]") then
171 return
172 end
173 local file = vim.uv.fs_realpath(event.match) or event.match
174 vim.fn.mkdir(vim.fn.fnamemodify(file, ":p:h"), "p")
175 end,
176})