nvim/lua/options.lua
xfy 6b1cb2d794 fix: 清理配置死代码与修正 foldmethod 作用域
- 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* 命名空间一致
2026-06-16 09:56:47 +08:00

119 lines
5.7 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- =============================================================================
-- 全局选项配置 (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 RGBcolorscheme 需要此选项才能正确渲染
vim.opt.termguicolors = true
-- ---------------------------------------------------------------------------
-- 10. 折叠设置
-- ---------------------------------------------------------------------------
-- foldlevel = 99 表示默认展开所有折叠。
-- 实际的 foldmethod 和 foldexpr 在 autocmds.lua 中按 buffer 延迟设置,
-- 避免启动时加载 treesitter 模块。
vim.opt.foldlevel = 99