Windows7下Gvim--remote-tab-silent无法打开含重音字符路径文件
解决Windows7下GVIM --remote-tab-silent处理重音路径的问题
这个问题我在Windows 7折腾GVIM远程打开文件的时候也碰到过,本质是Windows cmd.exe的编码逻辑和GVIM远程命令处理的兼容性bug:Windows cmd默认用GBK(系统ANSI编码)传递参数,而GVIM处理--remote-tab-silent时,没正确把带重音的ANSI路径转成UTF-8,导致重音字符被错误替换成非重音的ASCII字符(比如é变e)。而Ubuntu这类Linux系统默认用UTF-8,参数传递和GVIM内部处理一致,所以没这问题。
下面是几个亲测有效的解决办法:
方案1:用--remote-expr替代--remote-tab-silent
绕开命令行参数的编码坑,直接通过GVIM内部的表达式命令打开文件,执行命令如下:
gvim.exe -u NONE --remote-expr "tabedit('d:\\être\\éèêàâîùûôçÇëï.txt')"
- 效果和
--remote-tab-silent完全一致:已有GVIM进程就开新标签,没有就启动新进程 - 原理:直接调用GVIM内部的
tabedit()函数传递路径,避免了命令行参数的编码转换错误
方案2:先切换cmd编码为UTF-8再调用
临时把cmd的编码切换成UTF-8(代码页65001),再执行原命令:
chcp 65001 gvim.exe -u NONE -p --remote-tab-silent "d:\être\éèêàâîùûôçÇëï.txt"
- 注意:切换编码后cmd可能会出现字体乱码,右键cmd窗口→属性→字体,改成
Lucida Console就能解决 - 适合临时使用,每次调用前要先执行
chcp 65001
方案3:用PowerShell替代cmd调用
PowerShell对UTF-8路径的支持比cmd靠谱多了,直接在PowerShell里执行原命令就行:
gvim.exe -u NONE -p --remote-tab-silent "d:\être\éèêàâîùûôçÇëï.txt"
- 要是经常用,可以把命令存成
.ps1脚本,方便一键调用
方案4:给GVIM加编码配置兜底
在你的_vimrc(或vimrc)文件里加以下配置,确保GVIM默认用UTF-8处理文件和路径,和前面的方案配合效果更好:
set encoding=utf-8 set fileencodings=utf-8,gbk,cp1252 set termencoding=utf-8
验证步骤
- 先打开一个GVIM窗口
- 用上面任一方案执行带重音路径的命令
- 检查GVIM是不是在已有窗口的新标签里正确打开了目标文件
内容的提问来源于stack exchange,提问作者mosamosa
相关产品推荐
相关产品推荐

