-- @section commands
-- Custom user commands migrated from LunarVim's config.lua vim.cmd block
--- @section commands-grep
-- Gr: Search with grep and show results in quickfix list
vim.api.nvim_create_user_command("Gr", function(input)
vim.cmd("silent execute 'grep! " .. input.args .. " | copen'")
end, { nargs = "+", desc = "Grep and open quickfix list" })
-- Grc: Raw grep command (no quickfix auto-open)
vim.api.nvim_create_user_command("Grc", function(input)
vim.cmd("grep " .. input.args)
end, { nargs = "*", desc = "Run grep without quickfix" })
--- @section commands-file
-- Header: Add file header via external script
vim.api.nvim_create_user_command("Header", function()
vim.cmd("0r!file-header '%'")
end, { desc = "Add file header from external file-header script" })
-- Termw: Open konsole terminal emulator
vim.api.nvim_create_user_command("Termw", function()
vim.cmd("!konsole -e bash-session &")
end, { desc = "Open konsole terminal" })
-- Term: Open embedded terminal in a horizontal split
vim.api.nvim_create_user_command("Term", function()
vim.cmd("sp | term")
end, { desc = "Open terminal in split window" })
-- EditSnippet: Open LuaSnip snippet files for editing
vim.api.nvim_create_user_command("EditSnippet", function()
require("luasnip.loaders").edit_snippet_files()
end, { desc = "Edit LuaSnip snippet files" })
-- Cwd: Change working directory to current file's directory
vim.api.nvim_create_user_command("Cwd", function()
vim.cmd("cd %:p:h")
end, { desc = "Change directory to current file" })
-- Tcd: Change tab-local working directory to current file's directory
vim.api.nvim_create_user_command("Tcd", function()
vim.cmd(":tcd %:p:h")
end, { desc = "Change tab directory to current file" })
-- Reload: Reload all buffers from disk
vim.api.nvim_create_user_command("Reload", function()
vim.cmd("bufdo execute 'checktime . bufnr('%')'")
end, { desc = "Reload all buffers" })
-- Rm: Delete current file from disk and close buffer
vim.api.nvim_create_user_command("Rm", function()
vim.cmd("!rm % | bd")
end, { desc = "Delete file and close buffer" })
-- CopyFilename: Copy current file path to system clipboard
vim.api.nvim_create_user_command("CopyFilename", function()
vim.fn.setreg("+", vim.fn.expand("%"))
end, { desc = "Copy file path to clipboard" })
-- Code: Open current file in VS Code at current line
vim.api.nvim_create_user_command("Code", function()
vim.cmd("!code ./ -g %:" .. (vim.fn.line(".") + 1))
end, { desc = "Open in VS Code at current line" })
--- @section keymaps-grep (defined as keymap in vim.cmd, moved here for clarity)
-- : Search word under cursor with custom Gr command
vim.keymap.set("n", "", function()
vim.cmd("Gr " .. vim.fn.expand(""))
end, { desc = "Grep word under cursor (custom Gr)" })
-- : Live grep word under cursor via Snacks picker
vim.keymap.set("n", "", function()
LazyVim.pick("live_grep", { default_text = vim.fn.expand("") })()
end, { desc = "Snacks grep word under cursor" })
-- @section autocmds-filetype
-- Caddyfile: Set filetype for Caddyfile (any path, any name containing "Caddyfile")
vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, {
pattern = "*Caddyfile",
callback = function()
vim.bo.filetype = "caddy"
end,
desc = "Detect Caddyfile filetype",
})
-- @section autocmds-emmet
-- Emmet: Enable Emmet for web development filetypes (migrated from LunarVim)
-- Disabled by default for all filetypes; enabled only for these specific filetypes.
vim.api.nvim_create_autocmd("FileType", {
pattern = { "html", "css", "vue", "jsx", "php", "javascriptreact" },
callback = function()
vim.cmd("EmmetInstall")
end,
desc = "Enable Emmet for web filetypes",
})
-- @section config-grepprg
-- Set grep program to `ag` (preserved from LunarVim)
-- LazyVim defaults to `rg --vimgrep`. This overrides it.
vim.opt.grepprg = "ag --vimgrep"