GVim :!% 命令跳出的 Windows 命令行窗口中文路径乱码,怎么解决?

发布于 2022-09-01 05:40:39 字数 212 浏览 20 评论 0

图片描述

在中文目录打开某个文件,只要 GVIM 的当前目录不是这个中文目录或文件名是中文的时候,在命令模式输入:!%就会跳出这个窗口并报错……英文文件名或英文路径都没问题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

谷夏 2022-09-08 05:40:39

最近我发现了一个好办法。之前很清楚的是,CMD 窗口是「cp936」,GVIM 传出的文件名称则是「UTF-8」。

所以,使用 GVIM 的 iconv() 函数便可以将 GVIM 内部的「UTF-8」转换成「cp936」并传给 CMD 。这样一来则可以解决之前的问题。
我目前是可以用这句来完成的:

:execute "!".iconv('"'.@%.'"','UTF-8','cp936')

稍微修改一下还可以拥有其他功能。

主要思路来自:http://www.oschina.net/code/snippet_574132_13357

删除会话 2022-09-08 05:40:39

这个貌似与中文或英文没什么关系呢,先看两个截图:

图片描述


图片描述

按照你的描述,我依次操作了一个中文文件名和一个英文文件名的文件,显示的结果都是如此。

关键是 :!% 命令到底是什么意思。:! 是在 vim shell 里执行一个 shell 命令,而 % 指代当前的文件名于是你的操作等于把文件名当作一个 command 来执行了,那么不管是中文还是英文都会报 command not found,也就是你在 windows 下看到的“系统找不到指定的路径”吧。

不知道你输入 :!% 命令的目的是什么呢?如果是为了打开文件,那么可以 :!open %,这个在 Mac 下是可以打开当前 buffer 里的文件内容的,至于 windows 的话我就不太清楚了。

千纸鹤 2022-09-08 05:40:39

gvim默认会将字符以utf-8的格式发送给系统. 参照 h:termencoding
你这种情况就是将 utf-8 的中文字符发送给系统cmd, 然后通过 cp936 的编码来显示. 所以显示是乱码的.
你可以这样测试来验证: set encoding=cp936 强制用cp936显示; 然后 !% , 执行该文件, cmd跳出的文件名乱码与你强制显示的内容一致

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文