Neovim 总览

编辑器是 Neovim,在 LazyVim 上做的。选发行版而不是从零搭,是因为 LSP、Treesitter、格式化、调试这些早被人配好了,我没必要重造;代价是我自己的配置很薄——init.lua 就一行,真正属于我的只有 lua/config/options.lua 几处设置、lazyvim.json 里勾的语言,和 lua/plugins/ 里加的十来个插件(下一篇讲)。

语言基本"勾个 extra 就齐活"——LazyVim 的每个 lang.* extra 会把对应的 LSP、Treesitter parser、formatter、DAP 一次配齐,我只在 lazyvim.json 里勾。平时开着这几样:

  • rust → rustaceanvim(比裸 rust-analyzer 多了 runnables/debuggables、宏展开、:RustLsp)+ crates.nvim 在 Cargo.toml 里提示版本。
  • go → gopls + delve 调试 + 自动 goimports
  • dotnet / C# → 走 roslyn.nvim,大 solution 下比 omnisharp 稳。
  • clangd → C/C++ 的 LSP,跨编译单元跳转、clang-format 对接 .clang-format
  • java → jdtls(它自己是个 Eclipse 跑出来的 LSP,启动稍重)。
  • typescript → vtsls,前端项目的补全/重命名/code action。

勾 extra 而不是手配的好处是:LSP 装哪个版本、formatter 怎么接、DAP adapter 哪来,LazyVim 都有合理默认,我不用为每门语言重写一遍 boilerplate。

options 里有三处是按我的工作方式定的,值得单说:

剪贴板走 OSC52——用终端转义序列复制。这意味着哪怕在 SSH 或 Wayland 下,yank 也能进系统剪贴板,不依赖 xclip/wl-copy 那条经常出问题的链路。

autoformat 关掉⁠。我不喜欢保存时悄悄改一堆东西,宁可手动或按项目触发,免得提交里混进无关的格式 diff。

还检测了 Windows,遇到就把 shell 切 pwsh、设好 UTF-8。同一份配置经 chezmoi 在那台 Windows 上照跑。

最后一处不在 options 里但很关键:Ctrl+hjkl 切窗口、到边界跨进 Zellij 面板,靠 smart-splits 实现(at_edge='stop' 防止死角回弹)。编辑器和复用器一套移动键,这是我整套环境的基调。