在 windows 版的 gvim 中要设置中英文不同字体, 需要把 encoding 设置为 utf-8 才可以, 具体的设置方法和要注意的问题网上很多, 我就不多说了.
但是在设置 encoding 为 utf-8 后, 会有这样的问题:
- 使用
:!
执行命令的时候不能使用中文, 因为 gvim 使用 encoding 的设置来处理命令, 而执行命令的时候, 用到了 cmd.exe, 它是用 gbk 来处理的, encoding 设置成 utf-8 之后, 就会有问题. 比如执行:!echo 中文
, 会看到“中文“的部分变成了乱码. - 使用
:make
之类命令的时候, 会在 quickfix 的窗口里面出现乱码. 从执行:make
命令的表现来看,:make
把执行命令的输出存到一个文件中去, 然后 quickfix 从这个文件中读取内容的, 不过, 大概 quickfix 不会自动检测文件编码, 所以会出现乱码. 比如在没有 make.exe 这样的文件的时候执行:make
, 会出现乱码, 如果 encoding 是 chinese 的时候执行, 可以看出这个地方的输出是: ‘make’ 不是内部或外部命令,也不是可运行的程序或批处理文件。
由于我使用 quickfix 的情况并不多, 至少暂时还不算多, 所以不打算去修改它了, 而我使用 :!
命令的情况却不少, 所以花了一些时间去翻了一下 vim 的代码, 幸好这部分的代码很容易看, 于是搞出了适用于 win32 版 vim 的 “补丁”(新的补丁)
使用方法可参考 编译自己的 (g)Vim for windows
不过这样也存在问题, 因为当遇到不能转换的字符的时候, vim 会用 ? 来代替, 这在执行命令的时候会有一定的问题, 比如 :!del some.file
, 当文件名中出现不能转换的字符的时候, 用 ? 代替可能会导致误删文件. 不过, 因为 cmd.exe 用的是 gbk 编码, 在命令中输入非 gbk 的字符的机会应该不大, 所以我就这么用着. :)
不过, 如果你编辑的文件名中有非 gbk 的字符, 而你又用 :!del %
这样的命令的话, 那就不一样了, 你明白后果的, 对吧 :D
你好,quickfix的编码问题可以通过
http://vimcdoc.sourceforge.net/doc/quickfix.html#QuickFixCmdPost-example
所述的方式解决。这种方式,只需在vimrc中打“补丁”而不必修改程序源码。
供参考。
— zr95 · 2012-08-14 20:38 · #