OEL 8:Vim 编辑中文乱码,其实是 Locale 没设对

在 OEL 8 环境中,中文文件本身可能没有问题,终端显示也可能完全正常,但一进入 Vim 就变成乱码。这个现象很容易让人误判为文件编码损坏。笔者环境中的根因并不在文件,而在用户 Locale。

01 | 现象:cat 正常,vi 乱码

问题表现很典型:

在 SecureCRT 终端中,直接粘贴中文是正常的;通过 cat 查看文件,中文也能正常显示。

但使用 vi 编辑同一个文件时,中文显示为乱码。更容易迷惑的是,保存退出后再用 cat 查看,中文又恢复正常。

这说明文件实际内容大概率没有被破坏,终端本身也具备显示中文的能力。问题集中在 Vim 打开文件时对字符编码的解析和显示。

02 | 根因:用户 Locale 还是 POSIX

笔者环境中,codex 用户的 Locale 为 POSIX

POSIX 不支持 UTF-8 多字节字符,因此 Vim 在该用户环境下打开中文文件时,会以不合适的编码方式解析内容,最终导致中文显示乱码。

也就是说,文件内容编码是正确的,只是 Vim 运行时所在的用户环境没有告诉它应该按 UTF-8 来处理字符。

03 | 修复:为 codex 用户设置 UTF-8 Locale

先确认系统中存在 UTF-8 Locale:

bash 复制代码
locale -a | grep -Ei 'utf|utf8'

然后在 codex 用户环境中设置:

bash 复制代码
export LANG=C.utf8

临时生效后,可以用下面命令验证当前字符集:

bash 复制代码
locale charmap

期望输出为:

text 复制代码
UTF-8

如果需要持久化配置,将下面一行写入 /home/codex/.bash_profile

bash 复制代码
export LANG=C.utf8

然后重新执行 su - codex 登录,让配置重新加载。

04 | 结论:只需要设置 LANG

这个问题不需要复杂处理,也不需要额外设置 LC_CTYPE

在笔者环境中,仅设置:

bash 复制代码
export LANG=C.utf8

即可让 Vim 正常显示和编辑 UTF-8 中文。排查这类问题时,可以先区分"文件是否真的坏了"和"当前用户环境是否支持 UTF-8",这样能少走很多弯路。

关注我,和AI一起成长~

相关推荐
AlfredZhao2 个月前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
dingdingfish6 个月前
Bash学习 - 第8章:Command Line Editing,第4-5节:Bindable Readline Commands
bash·emacs·vi·bind·readline
PyHaVolask7 个月前
Linux零基础入门:文件类型识别与文本编辑器使用指南
vim·文本编辑器·vi·命令行工具·nano·linux文件类型
我在人间贩卖青春9 个月前
vi 编辑器命令大全
vi·vi命令
top_designer10 个月前
告别“静态”VI手册:InDesign与AE打造可交互的动态品牌规范
设计模式·pdf·交互·vi·工作流·after effects·indesign
放羊郎10 个月前
VI-SLAM定位方案对比
slam·vi·定位·vo
庄风子10 个月前
In VI, when an arrow key is pressed, a character (e.g. “A“) is sent.
linux·vi
EleganceJiaBao1 年前
【Neovim】Vi、Vim、Neovim 与 LazyVim:发展史
linux·编辑器·vim·vi·neovim·lazyvim