如何在VIM中设置文件的字符编码

47
我正在使用:set fileencoding=utf-8,并且文件已正确保存,但是下次打开时,我会得到乱码字符,并且:set fileencoding?显示该选项未设置。
从文档中我了解到不应该改变 encoding 选项。
在VIM中指定文件编码的正确方法是什么?
7个回答

51

使用

set fileencodings=utf-8

(以s结尾)其中可以包含不同编码的列表。Vim将从左到右尝试列出的编码,直到找到一个可用的并将fileencoding设置为该编码。如果没有可用的,则fileencoding设置为空字符串,这将导致默认行为。

另外,将其添加到您的vimrc中可能是有意义的,这样您就不必经常这样做了。


25

您应该将fileencodings设置为vim在打开文件时尝试的不同编码格式,例如:

set fileencodings=ucs-bom,utf-8,latin1

下面是从:help fileencodings中获取的内容:

这是一个字符编码列表,在编辑现有文件时考虑使用。当读取文件时,Vim尝试使用第一个提到的字符编码。如果检测到错误,则尝试使用列表中的下一个编码。当找到可用的编码时,fileencoding被设置为该编码。

最好将这些设置放在您的.vimrc文件中,以便每次启动vim时不必手动输入它们。


13

你可以将该指令放入文件的注释中:

# vim: set fileencoding=<encoding name> :

很好,这与“- * -”语法类似吗? - Jonas Engström
@Jonas:恐怕我对此一无所知。 - RichieHindle
2
我相信“-* -”语法是为了Emacs? - Abdulsattar Mohammed
它也被用于Python脚本,尽管我相信这个想法起源于Emacs。 - quapka

12

如果在打开文件时,vim没有正确显示你的文件,请使用:set encoding=utf8来指定编码。


4

我阅读了许多关于VIM编码的帖子。我发现最重要的技巧是:

在打开文件之前,您应该先打开VIM,然后使用以下命令:

edit ++enc= filename.ext

它可以处理大多数有关编码和文件编码的问题。

关键点包括:

  1. 您必须正确显示字符集!如果没有正确显示,任何其他操作可能会导致无法恢复的问题。
  2. 在文件正确显示后,如果需要,您可以使用以下命令:
  3. :set fileencoding=UTF-8
    :write

    让VIM始终正确显示它。

因为我不是以英语为母语的用户,所以我认为我的方法是有效的。


1
您可以使用:e ++enc=<encoding>(请参见http://vim.wikia.com/wiki/Reloading_a_file_using_a_different_encoding)重新加载已经打开的文件。无需先启动vim而不打开文件。 - akame

4
  • open:

    vim ~/.vimrc
  • add:

    set fileencodings=utf-8
    set encoding=utf-8
    
  • save and close by typing:

    :wq

0
将以下两个函数添加到您的 .vimrc 文件中:
function! Latin()   
  silent! exe "e! ++enc=latin1" 
endfunction

function! Utf8()
  silent! exe "e! ++enc=utf-8" 
endfunction

然后这样调用函数类型Esc和

:call Latin() 
    
:call Utf8()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接