在Vim中将编码和文件编码设置为utf-8


95

这两个命令有什么区别?

  • set encoding=utf-8
  • set fileencoding=utf-8

当我想使用utf-8时需要同时设置两者吗?

另外,我是否需要使用set或设置文件编码setglobal


请注意,在LOCALE中设置编码比在Vim中强制编码更为安全,以防您将要编辑非Unicode文件。您将获得与默认值LOCALE相同的结果,并且在遇到任何外国字符时都不会弄乱。
tims

Answers:


89

TL; DR

在使用的第一种情况下set encoding=utf-8,您将更改终端中显示的输出编码。

在第二种情况下set fileencoding=utf-8,您将更改所写入文件的输出编码。

如@Dennis所述,如果您始终想在中工作,则可以在〜/ .vimrc中将它们都设置utf-8

更多细节

VIM维基上获得有关使用Unicode的信息

encoding设置vim在内部如何表示字符。对于大多数Unicode版本来说,utf-8是必需的。”

fileencoding设置特定文件编码(本地到缓冲区);:setglobal设置默认值。也可以使用一个空值:它的默认值与'encoding'相同。或者您可能希望设置ucs编码之一,它可能会使同一个磁盘文件变大或变小,具体取决于您使用的特殊字符组合。此外,IIUC,utf-8始终为大端(高位在前),而ucs可以为大端或小端,因此如果使用它,您可能需要设置“炸弹”(见下文)。”


3
对不起,我听不懂。fileencoding有什么更精确的功能?
基拉利·佐尔坦

25
在第一种情况下,您将更改终端中显示的输出编码。在第二种情况下,您将更改所写入文件的输出编码。
阿德里安·拉克鲁瓦

1
+1简短而甜美的答案,而不仅仅是重复官方文档!:)
425nesp

如果需要,可以直接从命令行直接进行vim -c "set encoding=utf-8" file.ext
汉斯·金泽尔

87
set encoding=utf-8  " The encoding displayed.
set fileencoding=utf-8  " The encoding written to file.

~/.vimrc如果您始终想使用utf-8,也可以同时设置两者。


0

您可以在.vimrc中设置变量'fileencodings'。

这是开始编辑现有文件时考虑的字符编码列表。读取文件时,Vim尝试使用第一个提到的字符编码。如果检测到错误,则尝试列表中的下一个错误。找到有效的编码后,将为其设置“ fileencoding”。如果全部失败,则将'fileencoding'设置为空字符串,这意味着将使用'encoding'的值。

看到 :help filencodings

如果您经常使用例如cp1252,则可以在其中添加:

set fileencodings=ucs-bom,utf-8,cp1252,default,latin9
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.