Lane East 的 blog

一百年很短,一秒钟很长

(g)vim for windows 设置 encoding 为 utf-8 时的问题

2008-10-16 18:39

在 windows 版的 gvim 中要设置中英文不同字体, 需要把 encoding 设置为 utf-8 才可以, 具体的设置方法和要注意的问题网上很多, 我就不多说了.

但是在设置 encoding 为 utf-8 后, 会有这样的问题:

  1. 使用 :! 执行命令的时候不能使用中文, 因为 gvim 使用 encoding 的设置来处理命令, 而执行命令的时候, 用到了 cmd.exe, 它是用 gbk 来处理的, encoding 设置成 utf-8 之后, 就会有问题. 比如执行 :!echo 中文 , 会看到“中文“的部分变成了乱码.
  2. 使用 :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

分类:

评论

  1. 你好,quickfix的编码问题可以通过
    http://vimcdoc.sourceforge.net/doc/quickfix.html#QuickFixCmdPost-example
    所述的方式解决。这种方式,只需在vimrc中打“补丁”而不必修改程序源码。
    供参考。

    zr95 · 2012-08-14 20:38 · #

  预览后可提交