mirror of
https://github.com/d0zingcat/dotfiles.git
synced 2026-05-13 15:09:34 +00:00
feat: a lot of configs
Signed-off-by: d0zingcat <iamtangli42@gmail.com>
This commit is contained in:
@@ -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,
|
||||
})
|
||||
Reference in New Issue
Block a user