feat: a lot of configs

Signed-off-by: d0zingcat <iamtangli42@gmail.com>
This commit is contained in:
2026-02-12 21:51:05 +08:00
parent 77c245dce2
commit 4eaabf5fb8
22 changed files with 1293 additions and 524 deletions

View File

@@ -1,26 +1,116 @@
-- Autocmds are automatically loaded on the VeryLazy event
-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
--
-- Add any additional autocmds here
-- with `vim.api.nvim_create_autocmd`
--
-- Or remove existing autocmds by their group name (which is prefixed with `lazyvim_` for the defaults)
-- e.g. vim.api.nvim_del_augroup_by_name("lazyvim_wrap_spell")
-- autocmds.lua - 自动命令配置
vim.cmd('filetype plugin indent on')
-- 创建自动命令组
local augroup = vim.api.nvim_create_augroup("MyCustomGroup", { clear = true })
-- Create a group for our autocommands
local augroup = vim.api.nvim_create_augroup("CustomSettings", { clear = true })
-- 自动设置光标行
vim.api.nvim_create_autocmd({ "InsertLeave", "WinEnter" }, {
pattern = "*",
group = augroup,
callback = function()
if vim.bo.buftype ~= "terminal" then
vim.opt_local.cursorline = true
end
end,
})
-- FileType autocommands
vim.api.nvim_create_autocmd({ "InsertEnter", "WinLeave" }, {
pattern = "*",
group = augroup,
callback = function()
if vim.bo.buftype ~= "terminal" then
vim.opt_local.cursorline = false
end
end,
})
-- 高亮复制文本
vim.api.nvim_create_autocmd("TextYankPost", {
pattern = "*",
group = augroup,
callback = function()
vim.highlight.on_yank({ higroup = "IncSearch", timeout = 200 })
end,
})
-- 自动切换工作目录
vim.api.nvim_create_autocmd({ "BufEnter" }, {
pattern = "*",
group = augroup,
desc = "自动切换到文件所在目录",
callback = function()
local buftype = vim.bo.buftype
if buftype ~= "terminal" and buftype ~= "nofile" and buftype ~= "prompt" then
vim.cmd("silent! lcd %:p:h")
end
end,
})
-- 自动恢复光标位置
vim.api.nvim_create_autocmd("BufReadPost", {
group = augroup,
desc = "恢复光标位置",
callback = function()
local mark = vim.api.nvim_buf_get_mark(0, '"')
local lcount = vim.api.nvim_buf_line_count(0)
if mark[1] > 0 and mark[1] <= lcount then
pcall(vim.api.nvim_win_set_cursor, 0, mark)
end
end,
})
-- 自动关闭某些窗口的 q 键
vim.api.nvim_create_autocmd("FileType", {
pattern = {
"qf",
"help",
"man",
"notify",
"lspinfo",
"startuptime",
"tsplayground",
"spectre_panel",
"PlenaryTestPopup",
},
group = augroup,
callback = function(event)
vim.bo[event.buf].buflisted = false
vim.keymap.set("n", "q", "<cmd>close<cr>", { buffer = event.buf, silent = true })
end,
})
-- 在保存时自动删除行尾空白字符
vim.api.nvim_create_autocmd("BufWritePre", {
pattern = "*",
group = augroup,
desc = "删除行尾空白字符",
callback = function()
-- 保存当前位置
local cursor_pos = vim.api.nvim_win_get_cursor(0)
-- 保存搜索寄存器
local search = vim.fn.getreg("/")
-- 替换所有行尾空白字符
vim.cmd([[%s/\s\+$//e]])
-- 恢复搜索寄存器
vim.fn.setreg("/", search)
-- 恢复光标位置
vim.api.nvim_win_set_cursor(0, cursor_pos)
end,
})
-- 自动设置文件类型的选项
vim.api.nvim_create_autocmd("FileType", {
pattern = "python",
group = augroup,
callback = function()
vim.opt_local.tabstop = 4
vim.opt_local.expandtab = true
vim.opt_local.shiftwidth = 4
vim.opt_local.tabstop = 4
vim.opt_local.softtabstop = 4
vim.opt_local.textwidth = 120
vim.opt_local.textwidth = 88 -- 符合 black 格式化
vim.opt_local.colorcolumn = "88"
end,
})
@@ -28,112 +118,20 @@ vim.api.nvim_create_autocmd("FileType", {
pattern = "go",
group = augroup,
callback = function()
vim.opt_local.tabstop = 4
vim.opt_local.shiftwidth = 4
vim.opt_local.softtabstop = 4
vim.opt_local.textwidth = 120
vim.opt_local.expandtab = false
vim.opt_local.shiftwidth = 4
vim.opt_local.tabstop = 4
end,
})
vim.api.nvim_create_autocmd("FileType", {
pattern = { "json", "jsonnet" },
pattern = { "javascript", "typescript", "javascriptreact", "typescriptreact", "json", "html", "css", "yaml", "markdown" },
group = augroup,
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.expandtab = true
end,
})
vim.api.nvim_create_autocmd("FileType", {
pattern = "yaml",
group = augroup,
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.textwidth = 0
vim.opt_local.expandtab = true
end,
})
vim.api.nvim_create_autocmd("FileType", {
pattern = "gotmpl",
group = augroup,
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.textwidth = 0
vim.opt_local.expandtab = true
end,
})
vim.api.nvim_create_autocmd("FileType", {
pattern = "php",
group = augroup,
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.textwidth = 120
end,
})
vim.api.nvim_create_autocmd("FileType", {
pattern = { "html", "htmldjango", "xhtml", "haml" },
group = augroup,
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.textwidth = 0
end,
})
vim.api.nvim_create_autocmd("FileType", {
pattern = "ruby",
group = augroup,
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.textwidth = 120
end,
})
vim.api.nvim_create_autocmd("FileType", {
pattern = { "less", "sass", "scss", "css" },
group = augroup,
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.textwidth = 120
end,
})
vim.api.nvim_create_autocmd("FileType", {
pattern = { "javascript", "javascript.jsx", "javascriptreact", "typescript", "typescriptreact" },
group = augroup,
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.expandtab = true
end,
})
vim.api.nvim_create_autocmd("FileType", {
pattern = "NvimTree",
group = augroup,
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.textwidth = 0
end,
})
@@ -142,23 +140,73 @@ vim.api.nvim_create_autocmd("FileType", {
group = augroup,
callback = function()
vim.opt_local.expandtab = false
vim.opt_local.shiftwidth = 8
vim.opt_local.softtabstop = 0
end,
})
-- File pattern autocommands
vim.api.nvim_create_autocmd({ "BufNewFile", "BufRead" }, {
pattern = "*.proto",
group = augroup,
command = "setfiletype proto",
})
vim.api.nvim_create_autocmd("FileType", {
pattern = "proto",
-- 为新文件创建模板
vim.api.nvim_create_autocmd("BufNewFile", {
pattern = "*.py",
group = augroup,
callback = function()
vim.opt_local.shiftwidth = 2
vim.opt_local.expandtab = true
local lines = {
"#!/usr/bin/env python3",
"# -*- coding: utf-8 -*-",
"\"\"\"",
"Description: ",
"\"\"\"",
"",
"",
"def main():",
" pass",
"",
"",
"if __name__ == \"__main__\":",
" main()",
"",
}
vim.api.nvim_buf_set_lines(0, 0, 0, false, lines)
vim.api.nvim_win_set_cursor(0, { 4, 13 })
end,
})
})
vim.api.nvim_create_autocmd("BufNewFile", {
pattern = "*.go",
group = augroup,
callback = function()
local package_name = vim.fn.fnamemodify(vim.fn.expand("%:p:h:t"), ":r")
local lines = {
"package " .. package_name,
"",
"import (",
"\t\"fmt\"",
")",
"",
"// TODO: Add description here",
"",
"",
}
vim.api.nvim_buf_set_lines(0, 0, 0, false, lines)
vim.api.nvim_win_set_cursor(0, { 7, 27 })
end,
})
-- 在外部更改时自动重新加载文件
vim.api.nvim_create_autocmd({ "FocusGained", "BufEnter", "CursorHold", "CursorHoldI" }, {
pattern = "*",
group = augroup,
callback = function()
if vim.fn.mode() ~= "c" and not vim.bo.readonly then
vim.cmd("checktime")
end
end,
})
-- 当 checktime 检测到文件已更改时通知
vim.api.nvim_create_autocmd("FileChangedShellPost", {
pattern = "*",
group = augroup,
callback = function()
vim.notify("File changed on disk. Buffer reloaded!", vim.log.levels.WARN)
end,
})