![在 Vim 中添加/显示特殊字符](https://linux22.com/image/1409662/%E5%9C%A8%20Vim%20%E4%B8%AD%E6%B7%BB%E5%8A%A0%2F%E6%98%BE%E7%A4%BA%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6.png)
我目前正在从事一个项目,需要输入 Unicode 字符ɛ
和ħ
,我刚刚将其添加到我的键盘中。
它几乎在任何地方都能很好地工作,即使在命令提示符中,除了 Vim,它会显示问号?
而不是ɛ
和。h
ħ
编码设置为 utf-8 并且使用并:digraphs
没有太大的帮助,因为即使在那里,很多字符也只是显示为?
。
我该如何修复此问题?
编辑
我使用具有上述两个字符的 Consolas 字体。
答案1
从评论问题来看,尽管问题指出“编码设置为 utf-8”,但 Vim 的编码似乎并未设置为 utf-8。它仍然是 latin1 (ISO-8859-1)。这意味着 Vim 不知道如何在内存中表示这些特殊字符,也不知道如何将它们保存到文件中。
为了使 Vim 正确书写“特殊”字符,它需要两样东西:
- 可以在内存中表示该字符的“编码”设置,通常为 utf-8
- 一个空值,或者一个可以表示磁盘上“文件编码”字符的设置。通常这也是 utf-8,或者为空。
为了正确地读包含这些字符的文件,Vim 也需要这两个东西。如果你的 'fileencodings' 选项设置正确,Vim 可以自动检测 'fileencoding' 的正确值。
'fileencodings' 是一个逗号分隔的列表,它按顺序告诉 Vim 尝试哪些编码。问题评论中的“ucs-bom”将检测 unicode,但前提是存在 BOM(字节顺序标记)。此外,由于 Vim 的“编码”仍然是“latin1”,因此即使 Vim 确实检测到了 unicode,它也不会对您有任何帮助。
请注意,'encoding' 和 'fileencodings' 都应该非常靠近 .vimrc 的顶部,位于任何映射、菜单、字符串选项或寄存器设置之前。否则这些区域中的现有文本将被 Vim 误解。
请参阅每个选项的帮助,以及配置 Vim 以支持 Unicode,了解详情。
如果 Vim 即使使用正确的设置也无法正确检测某些文件的编码,您可以:
- 手动设置,例如
:e ++enc=utf-8 myfile.txt
- 安装Vim 插件可以自动检测文件编码
答案2
我在 Debian 中工作,遇到了您描述的问题。要修复它,您需要确保在 Debian Bash 中的操作系统上安装了所需的语言环境,修复方法如下:
检查你的语言环境
locale -a
在 bash 中报告:语言环境:无法将 LC_VARIABLE 设置为默认语言环境:没有此文件或目录
生成所需的语言环境,以便步骤 1 不再抱怨。
如果你知道你需要什么语言环境,你可以使用 locale-gen 命令来执行此操作
sudo locale-gen "en_US.UTF-8"
或者通过发出以下命令重新配置语言环境
sudo dpkg-reconfigure locales
如果操作正确,: digraphs
现在应该在 vim 中显示正确的字符
https://wiki.debian.org/Locale
http://vim.wikia.com/wiki/Entering_special_characters