aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/nvim/.config/nvim/lua/tobyvin/autocmds.lua
blob: 71560a807ef7217d677d0556c16dd37779a85800 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
local M = {}

M.setup = function()
	local group = vim.api.nvim_create_augroup("tobyvin", { clear = true })

	vim.api.nvim_create_autocmd("User", {
		group = group,
		pattern = "bdelete",
		callback = function(opts)
			local windows = vim.tbl_filter(function(win)
				return vim.api.nvim_win_get_buf(win) == opts.bufnr
			end, vim.api.nvim_list_wins())

			local buffers = vim.tbl_filter(function(buf)
				return vim.api.nvim_buf_is_valid(buf) and vim.bo[buf].buflisted
			end, vim.api.nvim_list_bufs())

			if buffers ~= nil and #buffers > 1 then
				local next_buffer = vim.fn.winbufnr(vim.fn.winnr("#"))

				if not next_buffer then
					for i, v in ipairs(buffers) do
						if v == opts.bufnr then
							next_buffer = buffers[i % #buffers + 1]
							break
						end
					end
				end

				for _, win in ipairs(windows) do
					vim.api.nvim_win_set_buf(win, next_buffer)
				end
			end
		end,
		desc = "Sets the window to the alternate buffer for bdelete",
	})

	vim.api.nvim_create_autocmd("TextYankPost", {
		group = group,
		pattern = "*",
		callback = function()
			vim.highlight.on_yank()
		end,
		desc = "Highlight yank",
	})

	vim.api.nvim_create_autocmd("BufWritePre", {
		group = group,
		pattern = "*",
		callback = function()
			local cursor = vim.api.nvim_win_get_cursor(0)
			vim.cmd("%s/\\s\\+$//e")
			vim.api.nvim_win_set_cursor(0, cursor)
		end,
		desc = "Trim whitespace on write",
	})

	vim.api.nvim_create_autocmd("FileType", {
		group = group,
		pattern = "help",
		callback = function()
			vim.opt_local.wrap = true
			vim.opt_local.textwidth = 120
			vim.opt_local.colorcolumn = nil
			vim.cmd("wincmd L")
			vim.cmd("vertical resize " .. vim.opt.textwidth:get())
		end,
		desc = "Resize help window",
	})

	vim.api.nvim_create_autocmd("FileType", {
		group = group,
		pattern = "qf",
		callback = function()
			vim.opt_local.buflisted = false
		end,
		desc = "Hide filetype from buffer list",
	})

	vim.api.nvim_create_autocmd("FileType", {
		group = group,
		pattern = { "sh", "zsh", "xml", "html", "xhtml", "css", "scss", "javascript", "lua", "dart", "markdown" },
		callback = function()
			vim.opt_local.tabstop = 2
		end,
		desc = "Set file specific tabstop",
	})

	local augroup_search_highlighting = vim.api.nvim_create_augroup("SearchHighlighting", { clear = true })

	vim.api.nvim_create_autocmd("CmdlineEnter", {
		group = augroup_search_highlighting,
		pattern = "/,?",
		callback = function()
			vim.opt.hlsearch = true
		end,
		desc = "Enable hlsearch on input",
	})

	vim.api.nvim_create_autocmd("CmdlineLeave", {
		group = augroup_search_highlighting,
		pattern = "/,?",
		callback = function()
			vim.opt.hlsearch = false
		end,
		desc = "Disable hlsearch on exit",
	})

	-- TODO: figure out how to do this correctly
	-- config reloading
	-- local configs = vim.api.nvim_create_augroup("Configs", { clear = true })
	--
	-- vim.api.nvim_create_autocmd("BufWritePost", {
	-- 	group = configs,
	-- 	pattern = ".nvimrc.lua",
	-- 	command = "source <afile>",
	-- })
	--
	-- vim.api.nvim_create_autocmd("BufWritePost", {
	-- 	group = configs,
	-- 	pattern = os.getenv("HOME") .. "/.config/nvim/*/*.lua",
	-- 	command = "source $MYVIMRC",
	-- })
end

return M