我想在 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
而不是ubuntu
。wsl.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
自己,直到你的问题提醒了我。