- options.lua: 删除 MiniDiffSign 高亮链接(mini.diff 已移除,死代码) - options.lua: 删除关于 ftplugin 的误导注释(目录不存在) - autocmds.lua: foldmethod 从 vim.o 全局改为 vim.wo window-local, 事件从 BufEnter+once 改为 FileType,避免污染 help/man/quickfix 窗口 - keymaps.lua: 4 处 vim.keymap.set 统一为 map 别名 - git.lua: codediff view 键位 hs/hu/hr/cs 统一为 ghs/ghu/ghr/gs, 与 gitsigns 的 gh* 命名空间一致
119 lines
5.7 KiB
Lua
119 lines
5.7 KiB
Lua
-- =============================================================================
|
||
-- 全局选项配置 (lua/options.lua)
|
||
-- =============================================================================
|
||
-- 本文件集中设置所有影响编辑器行为的全局选项。
|
||
-- 选项分为以下几类:
|
||
-- 1. 界面显示(行号、光标、颜色)
|
||
-- 2. 缩进与格式化(tab、空格、智能缩进)
|
||
-- 3. 搜索行为(大小写敏感)
|
||
-- 4. 窗口与分割
|
||
-- 5. 文件持久化(swap、backup、undo)
|
||
-- 6. 补全与消息
|
||
-- 7. 剪贴板(延迟初始化,避免启动阻塞)
|
||
-- 8. 折叠与 diff 高亮
|
||
-- =============================================================================
|
||
|
||
-- 禁用 netrw 横幅(netrw 本身已通过 loaded_netrw 禁用,此选项作为保险)
|
||
vim.g.netrw_banner = 0
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- 1. 界面显示
|
||
-- ---------------------------------------------------------------------------
|
||
vim.opt.nu = true -- 显示绝对行号
|
||
vim.opt.relativenumber = true -- 显示相对行号(便于配合数字 + j/k 跳转)
|
||
vim.opt.cursorline = true -- 高亮当前行
|
||
vim.opt.cursorlineopt = "both" -- 高亮当前行的行号和文本行(number + line)
|
||
vim.opt.autoread = true -- 当文件被外部修改时自动重新读取
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- 2. 缩进与格式化
|
||
-- ---------------------------------------------------------------------------
|
||
-- 使用 4 空格缩进,适用于大多数语言。
|
||
vim.opt.tabstop = 4 -- Tab 键显示的宽度(字符数)
|
||
vim.opt.softtabstop = 4 -- 插入模式下 Tab/BS 的行为宽度
|
||
vim.opt.shiftwidth = 4 -- 自动缩进和 >/< 操作的宽度
|
||
vim.opt.expandtab = true -- 将 Tab 键转换为空格
|
||
|
||
vim.opt.smartindent = true -- 基于语法的智能缩进(C-style 语言效果最佳)
|
||
vim.opt.inccommand = "split" -- 实时预览替换效果(:s 命令在分屏中显示预览)
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- 3. 窗口与分割
|
||
-- ---------------------------------------------------------------------------
|
||
vim.opt.splitbelow = true -- 水平分割时新窗口在下方
|
||
vim.opt.splitright = true -- 垂直分割时新窗口在右侧
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- 4. 搜索行为
|
||
-- ---------------------------------------------------------------------------
|
||
vim.opt.ignorecase = true -- 搜索时忽略大小写
|
||
vim.opt.smartcase = true -- 如果搜索包含大写字母,则区分大小写
|
||
-- 与 ignorecase 配合:全小写时忽略大小写,
|
||
-- 包含大写时精确匹配
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- 5. 状态栏
|
||
-- ---------------------------------------------------------------------------
|
||
vim.opt.laststatus = 3 -- 全局状态栏(所有窗口共享一个状态栏)
|
||
-- 值为 2 时每个窗口有独立状态栏
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- 6. 文件持久化
|
||
-- ---------------------------------------------------------------------------
|
||
-- 禁用 swap 和 backup 文件,使用 undofile 实现跨会话的撤销历史。
|
||
vim.opt.swapfile = false -- 禁用交换文件(.swp)
|
||
vim.opt.backup = false -- 禁用备份文件(~ 后缀)
|
||
vim.opt.undodir = vim.fn.stdpath("data") .. "/undodir" -- 撤销历史存放目录
|
||
vim.opt.undofile = true -- 启用持久化撤销(关闭文件后仍能撤销)
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- 7. 补全与消息
|
||
-- ---------------------------------------------------------------------------
|
||
-- 补全选项:
|
||
-- menuone - 即使只有一个匹配项也显示菜单
|
||
-- noselect - 不自动选择第一项(需手动选择)
|
||
-- fuzzy - 启用模糊匹配(Neovim 0.11+)
|
||
-- nosort - 保持原始顺序,不按字母排序
|
||
vim.opt.completeopt = "menuone,noselect,fuzzy,nosort"
|
||
|
||
-- shortmess: 缩短各种消息提示
|
||
-- c - 补全相关消息的缩短(如 "match 1 of 5" → "1/5")
|
||
vim.opt.shortmess:append("c")
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- 8. 剪贴板(延迟初始化)
|
||
-- ---------------------------------------------------------------------------
|
||
-- 剪贴板集成(unnamedplus)会在启动时检测外部剪贴板提供者(如 xclip、wl-copy)。
|
||
-- 在 SSH 远程环境中,此检测可能阻塞数秒。
|
||
-- 通过 vim.schedule() 将剪贴板设置推迟到启动事件循环之后,
|
||
-- 避免阻塞 startup 的关键路径。
|
||
vim.schedule(function()
|
||
vim.opt.clipboard:append("unnamedplus")
|
||
end)
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- 9. 其他杂项
|
||
-- ---------------------------------------------------------------------------
|
||
-- 将 @ 和 - 视为文件名的一部分(用于 gf/gx 等命令)
|
||
vim.opt.isfname:append("@-@")
|
||
|
||
-- 保持光标与屏幕边缘的最小距离(行数),确保上下文可见
|
||
vim.opt.scrolloff = 8
|
||
|
||
-- 禁用 colorcolumn(右侧参考线)
|
||
vim.opt.colorcolumn = "0"
|
||
|
||
-- 始终显示符号列(用于诊断、git diff 等标记),避免文本左右跳动
|
||
vim.opt.signcolumn = "yes"
|
||
|
||
-- 启用真彩色支持(24-bit RGB),colorscheme 需要此选项才能正确渲染
|
||
vim.opt.termguicolors = true
|
||
|
||
-- ---------------------------------------------------------------------------
|
||
-- 10. 折叠设置
|
||
-- ---------------------------------------------------------------------------
|
||
-- foldlevel = 99 表示默认展开所有折叠。
|
||
-- 实际的 foldmethod 和 foldexpr 在 autocmds.lua 中按 buffer 延迟设置,
|
||
-- 避免启动时加载 treesitter 模块。
|
||
vim.opt.foldlevel = 99
|