12-functions.lua - dotfiles - dark dots
HTML git clone https://git.drkhsh.at/dotfiles
DIR Log
DIR Files
DIR Refs
DIR Submodules
DIR README
DIR LICENSE
---
12-functions.lua (2884B)
---
1 local autocmd = vim.api.nvim_create_autocmd
2 local augroup = vim.api.nvim_create_augroup
3
4 -- restore cursor position when opening file
5 -- https://github.com/neovim/neovim/issues/16339
6 autocmd("BufRead", {
7 callback = function(opts)
8 vim.api.nvim_create_autocmd("BufWinEnter", {
9 once = true,
10 buffer = opts.buf,
11 callback = function()
12 local ft = vim.bo[opts.buf].filetype
13 local last_known_line = vim.api.nvim_buf_get_mark(opts.buf, '"')[1]
14 if
15 not (ft:match("commit") and ft:match("rebase"))
16 and last_known_line > 1
17 and last_known_line <= vim.api.nvim_buf_line_count(opts.buf)
18 then
19 vim.api.nvim_feedkeys([[g`"]], "nx", false)
20 end
21 end,
22 })
23 end,
24 })
25
26 -- show tabline only when >1 tab
27 autocmd("BufEnter", {
28 callback = vim.schedule_wrap(function()
29 local n_listed_bufs = 0
30 for _, buf_id in ipairs(vim.api.nvim_list_bufs()) do
31 if vim.fn.buflisted(buf_id) == 1 then
32 n_listed_bufs = n_listed_bufs + 1
33 end
34 end
35
36 vim.o.showtabline = n_listed_bufs > 1 and 2 or 0
37 end),
38 desc = "Update tabline based on the number of listed buffers",
39 })
40
41 -- highlights yanked text
42 autocmd("TextYankPost", {
43 callback = function()
44 vim.highlight.on_yank({
45 higroup = "IncSearch",
46 timeout = 40,
47 })
48 end,
49 })
50
51 -- resize splits with terminal window
52 autocmd({ "VimResized" }, {
53 group = vim.api.nvim_create_augroup("EqualizeSplits", {}),
54 callback = function()
55 local current_tab = vim.api.nvim_get_current_tabpage()
56 vim.cmd("tabdo wincmd =")
57 vim.api.nvim_set_current_tabpage(current_tab)
58 end,
59 desc = "Resize splits with terminal window",
60 })
61
62 -- create directories when needed, when saving a file
63 vim.api.nvim_create_autocmd("BufWritePre", {
64 group = vim.api.nvim_create_augroup("auto_create_dir", { clear = true }),
65 callback = function(event)
66 local file = vim.loop.fs_realpath(event.match) or event.match
67
68 vim.fn.mkdir(vim.fn.fnamemodify(file, ":p:h"), "p")
69 local backup = vim.fn.fnamemodify(file, ":p:~:h")
70 backup = backup:gsub("[/\\]", "%%")
71 vim.go.backupext = backup
72 end,
73 })
74
75 -- show cursor line only in active window
76 vim.api.nvim_create_autocmd({ "InsertLeave", "WinEnter" }, {
77 callback = function()
78 local ok, cl = pcall(vim.api.nvim_win_get_var, 0, "auto-cursorline")
79 if ok and cl then
80 vim.wo.cursorline = true
81 vim.api.nvim_win_del_var(0, "auto-cursorline")
82 end
83 end,
84 })
85 vim.api.nvim_create_autocmd({ "InsertEnter", "WinLeave" }, {
86 callback = function()
87 local cl = vim.wo.cursorline
88 if cl then
89 vim.api.nvim_win_set_var(0, "auto-cursorline", cl)
90 vim.wo.cursorline = false
91 end
92 end,
93 })
94
95 -- auto insert in :terminal
96 vim.api.nvim_create_autocmd({ "TermOpen", "WinEnter" }, { pattern = "term://*", command = "startinsert" })
97
98 -- TODO.txt
99 vim.api.nvim_create_autocmd({'BufRead', 'BufNewFile'}, {
100 pattern = 'TODO*.txt',
101 command = 'set filetype=todotxt'
102 })