在 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 盘,因此并未对其他盘符做兼容处理)