IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

比较完美地解决了 vim 编辑中文的问题

Chen3feng's space 2009-11-03 09:07:27 累计浏览 6,824 次
本机暂存

我刚来公司的时候,发现公司的 Linux 开发环境没有配置中文,因为绝大多数同事都是在 VC/SourceInsight/UltraEdit上编辑后sz到服务器上编译,所以没人在意这个问题。而我习惯于在 vim 下直接写代码,很不习惯,就搞了一下。

首先让 vim 支持中文,这个修改配置即可,但是没想到后来那么麻烦。

一开始尝试统一设置为 en_US.UTF-8,SecureCRT 的编码也设置为 UTF-8,vim 好了,但是 cat 和 more GB 编码的文件时会乱码。

设置为 en_US.ISO8859-1,cat 和 more 好了,vim 又不行了。

很奇怪 vim 的 fileencoding 里面设置了检测中文的选项,

set fileencodings=utf-8-bom,ucs-bom,utf-8,cp936,gb18030,ucs,big5

为什么不起作用呢?后来明白了 UTF-8 本身能够兼容中文,所以 vim 不管语言是不是中文,vim 都会进行中文的检测,而语言设置为 en_US,编码不是 UTF-8 的时候,则认为环境不支持中文,直接忽略 fileencodings 里的cp936,gb18030等中文编码。

这就好办了。

因为我们的系统大部分还都是 GB 编码,而 cat 和 more 又不会进行编码的自动识别和转换。但是 vim 会,因此就委屈一下 vim,全局依然用 GB 编码。

具体操作:

编辑 ~/.profile,加入:

    export LC_CTYPE=zh_CN.GB18030

编辑 ~/.vimrc,确认含有:

    set fileencodings=utf-8-bom,ucs-bom,utf-8,cp936,gb18030,ucs,big5

    这个顺序比较好,能准确识别的优先放前面。

然后 vim 就能正确识别中文了,不会出现乱码和半个汉字的问题。

如果要全中文,就用:

    export LC_ALL=zh_CN.GB18030

取代

export LC_CTYPE=zh_CN.GB18030

    这样终端的错误信息和gcc错误信息都是中文的了,cat 和 more GB 编码的文件也很正常了。

这个问题涉及到好几个方面:文件本身的编码终端的语言vim的中文支持vim的编码检测转换和输出SecureCRT的编码

    所以实际上还是挺复杂的,一环错了都出不来效果。

现在编码问题算是比较完美地解决了,生活真美好……

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. vim几个小技巧(批量替换,列编辑) (累计阅读 37,517)
  2. 简明Vim练级攻略 (累计阅读 22,278)
  3. Linux如何统计进程的CPU利用率 (累计阅读 16,308)
  4. Vim下的代码自动补全和代码跳转阅读 (累计阅读 15,349)
  5. 我的 RHCA 之路 (累计阅读 14,014)
  6. Linux内存点滴 用户进程内存空间 (累计阅读 13,232)
  7. 给程序员新手的一些建议 (累计阅读 13,090)
  8. Linux 性能监控、测试、优化工具 (累计阅读 13,013)
  9. 为什么要用 Emacs/Vim,而不是任何其他编辑器 (累计阅读 13,018)
  10. 关于linux内存free的一些事情 (累计阅读 12,870)