这两年一直在服务器上使用 neovim,最近尝试把它放到 Windows 上用。
一旦习惯图形化界面,就很难第一时间想到完全使用 TUI 工具。
启动 nvim 的方式很多
首先是 nvim 的启动问题,只要在终端上工作,启动 nvim 非常自然,但是在 Windows 上体验很不好,选择/流程太多:
- 随 nvim 附带的
nvim-qt.exe
是非常好的 GUI 工具,它给你最大的好处是用于关联文件类型。 直接在资源管理器中双击一个文件,就能用 nvim 打开。有以下一些缺点:- 首次使用它,需要配置
ginit.vim
- 初次打开新的文件类型,需要每次关联
- GUI 的启动速度比 TUI 慢
- 首次使用它,需要配置
- Windows 有 cmd 和 powershell 两种终端,而 powershell 有 旧界面的终端、新界面的终端 或者自己安装的 alacritty 之类的模拟器,从而每种终端界面使用相同的 nvim,体验都不一样,比如
- 从 TUI 打开一个文件很麻烦,在资源管理器找到一个文件,又有至少两种方式从终端打开它:
- 右键鼠标打开新的终端(通常你不会想要很多终端窗口)
- 复制文件路径到已有的一个终端
- 如果你的文件放在资源管理器左侧的快捷文件夹,又得右键打开所在目录(或者查看属性)去复制路径: 因为地址栏对快捷文件夹不显示完整的源路径!
- 从 TUI 打开一个文件很麻烦,在资源管理器找到一个文件,又有至少两种方式从终端打开它:
此外,对于一个最基本的实际使用需求:
- 在服务器上使用 nvim,你基本上只用一种 SSH 客户端连接,从而从 nvim 外复制粘贴到 nvim 内、从 nvim 内复制粘贴到 nvim 外都能很快习惯;即便不同的 SSH 客户端,基本都有类似的设计
- 而在 Windows 上,你 必须 选好一种方式去习惯,每种终端界面都有自己的快捷键怪癖!对于 nvim 这种严重依赖快捷键的程序,更改一次快捷键习惯,就是一次自找麻烦:
- 选择 alacritty 终端界面:使用
Ctrl-Shift-C/V
从 nvim 复制到系统粘贴板/从系统粘贴板粘贴到 nvim - 选择 nvim-qt:使用原始的
+
寄存器,你得习惯"+y
、<c-r>+
等方式做上面的事情 - 默认没有直接选中文字就复制到系统粘贴板和直接右键就粘贴到 nvim 这样人性化的操作,你需要它们就得折腾 —— 所有 SSH 客户端都会开箱即用地提供这个吧 :)
- 选择 alacritty 终端界面:使用
跨平台配置需要统一
讲完初步的界面使用区别,再谈一个跨平台最常见的难题:路径字符串。
众所周知,unix 使用 /
作为路径分隔符,而 Windows 使用 \\
。单一平台下工作时,你从来不用理会这种差异,从而 配置文件里面随便用 /
拼接路径,但一旦在 Windows 重用 unix 的 nvim 配置文件,则需要改写所有相关代码。
而遗憾的是, nvim 没有内置统一的路径拼接函数,从而每个插件都可能有不同的做法:
- 判断不同的平台(
vim.loop.os_uname().version:match 'Windows'
、jit.os == 'Windows'
),然后gsub
全部替换(path:gsub('\\', '/')
) - 使用插件/外部库:
require 'plenary.path'
1
2
3
4
5
local path = require 'plenary.path'
local p = path:new("c:\\a","b")
print(p)
print(p:exists())
print(p:joinpath("d"))