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' 防止死角回弹)。编辑器和复用器一套移动键,这是我整套环境的基调。