+
 新版

win下面的cmder中的vim . 中文乱码. 试了各种解决方式.. 还是没弄好

Codigger官方 发布于 2025/05/29 14:48
阅读 530
收藏 0

win下面的cmder中的vim . 中文乱码. 试了各种解决方式.. 还是没弄好

加载中
0
工具派
工具派

回答:win下面的cmder中的vim . 中文乱码. 试了各种解决方式.. 还是没弄好

乱码的本质只有一个:编码链路某一段对不上。vim 在终端里显示中文要过三关:文件本身的编码、vim 内部编码(encoding)、终端代码页(termencoding)。在 cmder 里出问题,大概率是后两关没对上——很多人只改了 vimrc 里的一项,链路另一头还是错的,所以"试了各种方式都不行"。

1. 先确认乱码发生在哪一环

在 vim 里执行:

:set encoding? fileencoding? fileencodings? termencoding?
  • encoding:vim 内部使用的编码,建议固定 utf-8

  • fileencoding:当前文件的实际编码,vim 打开文件时按 fileencodings 列表猜

  • termencoding:vim 和终端之间传输用的编码——cmder 里乱码的高发区

再看终端代码页,cmder 里执行 chcp:

  • 输出 936 → 终端是 GBK

  • 输出 65001 → 终端是 UTF-8

2. 对症设置

情况A:终端是 GBK(chcp 936),文件是 UTF-8

set encoding=utf-8
set fileencodings=utf-8,gbk,gb18030,ucs-bom,latin1
set termencoding=gbk

vim 会把内部的 UTF-8 转成 GBK 再交给终端显示,缺了 termencoding 这一步就是你看到的乱码。

情况B:已经把终端切成 UTF-8(chcp 65001)

set encoding=utf-8
set fileencodings=utf-8,gbk,gb18030,ucs-bom,latin1
set termencoding=utf-8

注意:改完 chcp 如果还乱码,关掉当前 cmder 标签页重开再试,代码页和环境不是实时刷新的。

情况C:文件本身就是 GBK

打开时手动指定:

:e ++enc=gbk

想永久转成 UTF-8:

:set fenc=utf-8
:w

或者批量转:

iconv -f GBK -t UTF-8 old.txt > new.txt

3. 别忽略 _vimrc 文件本身

如果 vimrc 里有中文注释,而文件保存成了 UTF-8,vim 启动时按 ANSI 读它,注释行会乱码甚至直接报错。把 _vimrc 另存为"UTF-8 无 BOM",或者干脆去掉中文注释。这个坑不少人踩过——症状是"vim 一启动就报乱码",跟打开什么文件无关。

4. 一个实用的排查技巧

分不清一串乱码到底是"UTF-8 被当成 GBK 读了"还是反过来时,直接看原始字节最靠谱:

  • vim 里 :%!xxd 看十六进制:UTF-8 的中文一般占 3 字节且首字节 ≥ 0xE0;GBK 是 2 字节、两个字节都 ≥ 0x81。看一眼字节形态就能判断文件真实编码

  • 或者把乱码文本粘到在线编码转换工具里,切换 GBK/UTF-8 互转,哪个方向能还原出正常中文,立刻定位是哪种错位

我做这种验证时用的是工具派上的编码转换工具(GBK/UTF-8/URL/Base64 这些互转都有,站在这:https://gjupai.com/ ),粘进去切换一下就能看到原文,比本地临时装工具省事。

总结

cmder + vim 乱码按这个顺序查:chcp 确认终端代码页 → termencoding 跟终端对齐 → fileencodings 覆盖文件实际编码 → _vimrc 自身编码检查。四步都对上之后基本不会再乱。如果你按上面查完某一步对不上,可以把 :set enc? fenc? fencs? tenc? 和 chcp 的输出发出来,我帮你看卡在哪一环。

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部