-- Non-plugin autocommands (minimal placeholder for bootstrap) local aug = vim.api.nvim_create_augroup("UserDefaults", { clear = true }) -- Phase 10.3: Templates (auto-populate new files from templates) local template_aug = vim.api.nvim_create_augroup("Templates", { clear = true }) vim.api.nvim_create_autocmd("BufNewFile", { group = template_aug, pattern = "*.sh", callback = function() -- Read template at top of file, then move to end vim.cmd("0read ~/.config/nvim/templates/template.sh") vim.cmd("normal! G") end, }) -- Phase 9.4: Per-filetype indentation settings to match formatters -- PHP: WordPress coding standards (tabs, displayed as 2 spaces) vim.api.nvim_create_autocmd("FileType", { group = aug, pattern = "php", callback = function() vim.opt_local.expandtab = false -- Use actual tabs (WordPress standard) vim.opt_local.tabstop = 2 -- Display tabs as 2 spaces wide vim.opt_local.shiftwidth = 2 -- Indent/outdent by 2 columns (one tab) vim.opt_local.softtabstop = 2 -- Tab key inserts 2 columns (one tab) end, }) -- JavaScript, TypeScript, JSON, CSS: Prettier defaults (2 spaces) vim.api.nvim_create_autocmd("FileType", { group = aug, pattern = { "javascript", "javascriptreact", "typescript", "typescriptreact", "json", "css", "scss", "html" }, callback = function() vim.opt_local.expandtab = true -- Use spaces (Prettier default) vim.opt_local.tabstop = 2 -- Display as 2 spaces vim.opt_local.shiftwidth = 2 -- Indent by 2 vim.opt_local.softtabstop = 2 end, }) -- Lua: stylua defaults (2 spaces) vim.api.nvim_create_autocmd("FileType", { group = aug, pattern = "lua", callback = function() vim.opt_local.expandtab = true -- Use spaces (common for Lua configs) vim.opt_local.tabstop = 2 -- Display as 2 spaces vim.opt_local.shiftwidth = 2 -- Indent by 2 vim.opt_local.softtabstop = 2 end, }) -- Markdown: Prettier defaults (2 spaces) + spellcheck vim.api.nvim_create_autocmd("FileType", { group = aug, pattern = "markdown", callback = function() vim.opt_local.expandtab = true -- Use spaces vim.opt_local.tabstop = 2 -- Display as 2 spaces vim.opt_local.shiftwidth = 2 -- Indent by 2 vim.opt_local.softtabstop = 2 vim.opt_local.spell = true -- Enable spellcheck for markdown end, }) -- Python: Black defaults (4 spaces) vim.api.nvim_create_autocmd("FileType", { group = aug, pattern = "python", callback = function() vim.opt_local.expandtab = true -- Use spaces (PEP 8) vim.opt_local.tabstop = 4 -- Display as 4 spaces vim.opt_local.shiftwidth = 4 -- Indent by 4 vim.opt_local.softtabstop = 4 end, }) -- Phase 11.8: Colorize diagnostic severity in quickfix/location list vim.api.nvim_create_autocmd("FileType", { group = aug, pattern = "qf", -- Applies to both quickfix and location list callback = function() -- Use matchadd() for higher priority highlighting -- This will override the default qf syntax vim.fn.matchadd("qfError", "\\", 10) vim.fn.matchadd("qfWarning", "\\", 10) vim.fn.matchadd("qfInfo", "\\", 10) vim.fn.matchadd("qfHint", "\\", 10) vim.fn.matchadd("qfNote", "\\", 10) -- Also match uppercase variants vim.fn.matchadd("qfError", "\\", 10) vim.fn.matchadd("qfWarning", "\\", 10) vim.fn.matchadd("qfInfo", "\\", 10) vim.fn.matchadd("qfHint", "\\", 10) vim.fn.matchadd("qfNote", "\\", 10) end, }) -- Session management: auto-load on startup, auto-save on exit (only if Session.vim exists) local session_aug = vim.api.nvim_create_augroup("SessionManagement", { clear = true }) -- Auto-load Session.vim if it exists in the current directory vim.api.nvim_create_autocmd("VimEnter", { group = session_aug, pattern = "*", nested = true, -- Allow other autocmds to fire after loading session callback = function() -- Only auto-load if: -- 1. Session.vim exists in cwd -- 2. No files were specified on command line (vim.fn.argc() == 0) -- 3. Not started with nvim -S (check if we already loaded a session) if vim.fn.argc() == 0 and vim.fn.filereadable("Session.vim") == 1 and vim.v.this_session == "" then vim.cmd("source Session.vim") end end, }) -- Auto-save session on exit, but ONLY if Session.vim already exists vim.api.nvim_create_autocmd("VimLeavePre", { group = session_aug, pattern = "*", callback = function() -- Only save if Session.vim exists (user manually created it) if vim.fn.filereadable("Session.vim") == 1 then vim.cmd("mksession! Session.vim") end end, }) return {}