在 Vim 中,我可以使用以下命令打开活动文件的目录:
:silent ! start %:p:h
但是,如果目录包含特殊字符(如斯堪的纳维亚字母),我就会收到错误。下面是示例的链接。
错误信息类似于“无法找到目标。请确保输入正确,然后重试。”(芬兰语)。上例中的目录是D:\ölöälä,但如您所见,ö 和 ä 字母在 cmd 中无法正确显示。我认为这导致了错误。
我该如何解决这个问题?我使用的是 64 位 Win 7。
答案1
这是一个vim
错误。
romainl
与问题评论中所说的相反,这根本不是问题。事实上,cmd
这与无关。和都按设计运行。cmd
cmd
start
问题在于,它vim
使用 UTF-8(参见:help unicode
.)来存储和操作命令字符串,并将该 UTF-8 字符串原封不动地传递给编程 API,而该 API 一开始就不接受 UTF-8。具体来说:它最终将 UTF-8 字符串传递给函数CreateProcessA()
。但CreateProcessA()
接受以Windows 代码页。 vim
应该预先将字符串从 UTF-8 转换为适当的代码页(或转换为 Unicode 并调用CreateProcessW()
)。但是它没有。
因此,由vim
from构造的 UTF-8 路径名中的字节序列被当作 Windows 代码页中的字节序列来%:p:h
处理。您可以看到结果。CreateProcessA()
可能没有本地修复对此。使用 8.3 名称 ( :8
) 根本无法解决这个问题。但摆弄 的vim
变量encoding
可能会在一定程度上改善它(尽管它会影响不止这一点,并且不是解决问题的正确方法)。您必须与 Bram Moolenaar 交谈。(查阅vim
7.3 错误列表,我发现您也可以与这个人,尽管让 M. Moolenaar 相信 kikuchan 并不孤单仍然是一个好主意。)