在 Windows 终端上单击 vim 打开文本文件

在 Windows 终端上单击 vim 打开文本文件

我想在 Windows 10 上使用 Vim 作为我的默认文本编辑器(不是 gVim,而是我在 wsl 上安装的终端版本)。我已经通过 cmd.exe 进行了以下设置:

>ftype txtfile
txtfile=wt ubuntu1804.exe run vim %1

现在,每当我单击文本文件时,vim 都会在 wsl 中打开,但 vim 会创建一个空缓冲区,因为路径混乱了:例如,缓冲区标题不是“C:\Users\Dominik\myfile”,而是“C:\UsersDominikmyfile”。如何为 vim 提供正确的路径名?

答案1

不幸的是(对我来说,对你来说不是),ftype/assoc已被弃用,尤其是在 Windows 11 上。其他注册表项会覆盖通过这个古老ftype命令更改默认行为的任何尝试。我很高兴听到它们仍然对你有用,但请注意,你可能需要在未来过渡到其他技术。

因此,由于我自己无法使用ftype,我无法测试这个解决方案,但我将首先提出以下建议:

ftype txtfile=wsl -e sh -c "vi \"$(wslpath '%1')\""

希望我引用/转义正确。我至少在 CMD 中使用硬编码的 Windows 路径(带空格)对其进行了测试。

此版本:

  • 用途wsl而不是ubuntuwsl.exe是启动 WSL 实例(任何发行版)的替代命令,并且比<distribution>.exe版本灵活得多。

  • 通过使用我们需要的实际命令行( )执行( -e)实例来启动 WSL ,它……sh-c

  • 使用wslpath命令将传入的 Windows 样式路径转换为 ​​WSL 等效路径。例如,以C:\readme.txt这种方式启动将允许 Vim 打开/mnt/C/readme.txt

  • 请注意,以这种方式启动时,不会从 shell 读取任何配置文件或 rc(启动)脚本,因此,如果您在 Vim 中设置了任何环境变量定义(或别名等),请注意这一点。如果您经常从 Vim 切换到 bash,这可能会给您带来麻烦。否则,这可能不是问题。如果这是个问题,您可以对命令行进行一些调整,但这确实会使启动时间略长。

如果将来你发现这ftype不再适合你,请参阅这个答案这是我两天前刚刚提出的替代方案。那时,我完全忘记了ftype自己,直到你的问题提醒了我。

相关内容