在 powershell 中无缝调用 wsl 中的 neovim
2019年11月30日 · 651 字 · 2 分钟
注 1:neovim 亦可换为 vim
注 2:最新版本的 pwsh 脚本请点此获取
在如今的 Windows 中,wsl 无疑能够极大提升我的开发体验。vim 则是任何人都绕不开的 TUI 编辑器。
不可否认,zsh/bash/fish 等 Linux 下的终端非常便捷好用,但我也是非常喜欢 powershell 的。在 之前的文章 中,我对 powershell 进行了很多自定义配置,我也越来越离不开 powershell 了。
既然在我的 wsl 中我已经配好了 neovim,如果我再在 Windows 之上配置一份,无疑是多此一举。
那么该如何无缝调用呢?
主要问题
- 使用
wsl nvim filename
的话过于啰嗦 - Windows 中如果使用自动补全路径,文件路径使用的
\
,neovim 会将其识别为文件名的一部分
解决方案
话不多说,来看代码:
function vim {
param($fileName = '.')
wsl -e nvim $filename.Replace('\','/').Replace('C:','/mnt/c')
}
将上面的代码写入 powershell 的配置文件保存(notepad.exe $PROFILE
),之后新开一个 powershell 终端,就能无缝体验啦。
对代码的解释
下面是解释。
第一行的 function vim
可以视为 Linux 之中的 alias,让我们每次在 powershell 中输入 vim 时,自动转换为下面的命令。
第二行的 param($fileName = '.')
则定义了 vim
所接收的参数,即要编辑的文件名。当未传入参数时,默认传入当前目录。
第三行的 wsl -e nvim $filename.Replace('\','/')
则是真正起作用的代码。$filename.Replace('\','/')
将 \
全部替换为 /
,让 wsl 中的 neovim 能够识别我们真正要编辑的文件。wsl -e nvim
则是调用 wsl 中的 neovim 的命令,感兴趣的读者还可阅读 wsl --help
来查看更多用法。
仍存在的问题
对所要编辑的文件只能使用相对路径,而不能是绝对路径[solved]
通过 .Replace('C:','/mnt/c')
将 C 盘的绝对路径转为 wsl 中的相对路径,可实现对绝对路径文件的转译(注:由于本人电脑只有 C 盘,因此并未对其他盘符做兼容处理)