青冥上河图
题记
与海珀蓝不同,NeoVim 不太好找到一个比较好的中文翻译。我能想到的一个比较拙劣的叫“青冥”,虽然不是特别有道理,除了第一个字的字义“青春”和第二个字的音 /miŋ/ 可以勉强对应上(如果认为 /ŋ/ 可以近似 /m/ 而且 /m/ 可以近似普通话中不存在的 /v/ 的话);由于 NeoVim 的 Logo 是青蓝色的,这个翻译也算是有点道理吧。
很巧不巧的是,《梦游天姥吟留别》里“青冥浩荡不见底”的句子,倒是挺贴切 NeoVim 这个“浩瀚无边”的编辑器;乘上 Vim 的长风,我也将成为“霓为衣兮风为马”的“神人”。
我现在使用的是 LazyVim,它是一个比较流行的 NeoVim 配置框架,基于 lazy.nvim 插件管理器。我的 NeoVim 也是在它的基础上配置了。简单的配置我就不再赘述了。
关于 NeoVim 的杂谈
NeoVim 适合什么样的编程场景呢?
- NeoVim 适合大部分文字由自己编写的场景,比如传统的代码编写、文档编写;
- 个人觉得 NeoVim 不太适合 Vibe Coding,主要 AI 完成的代码还是用 VS Code, Cursor 之类的编辑器比较合适;(没用过 Codex,有没有人送我?)
- Vim 类编辑器具有很强的 navigation 能力;
总纲
下面列举一些我最近想完成的事情(最近的含义可能指寒假了,因为期末周还是有更重要的事情要做):
在部分目录中排除 Copilot 的使用,比如比较敏感或者不需要 Copilot 的内容;在 Normal 模式下可以很方便地使用fcitx永远使用英文输入法,而在 Insert 模式下保存上一次使用的输入法状态;keaising/im-select.nvim这个插件解决;- 自己部署 Hakatime 代替 Wakatime 的时间统计;
把中文换行问题解决掉(已经基本解决了,不过是以牺牲英语正确换行为代价的,不过影响不大;- 在 NeoVim 中渲染 MkDocs Material 风格的扩展语法,比如 Admonition(这一点需要写 custom handler,难度较大);
- 复习一下 Vim 的基本快捷键和使用方法,免得陷入一种“模式崩溃”;
- 学习一下 Lua 和基本的 NeoVim 插件编写方法;
在部分目录中排除 Copilot
众所周知,nvim 具有强大的可拓展性,nvim 的插件一般都相当简洁,不会提供冗杂的各种配置参数。
这其实是 copilot.nvim 一个远古的 Issue,提出者还是有名的 ouuan。现在,这个问题可以通过配置 zbirenbaum/copilot 中的 should_attach 函数解决。
这体现了 nvim 的配置比 VS Code 配置强大的地方:VS Code 的 config.json 只有静态配置,而 nvim 的配置甚至可以是动态执行的代码!
{
"zbirenbaum/copilot.lua",
optional = true,
opts = {
should_attach = function(bufnr)
local filepath = vim.api.nvim_buf_get_name(bufnr)
-- Disabled directories
local disabled_dirs = {
vim.fn.expand("$HOME/repo/notes/日志"),
}
for _, dir in ipairs(disabled_dirs) do
if filepath:find(dir) == 1 then
return false
end
end
return true
end,
},
},