set encoding 选项设置 Vim 内部使用的字符编码。
默认值:Windows 缺省值是“utf-8”,其它系统是 $LANG 值(这是个全局的变量,可通过 echo $LANG 命令查看其值)或者“latin1”。
它应用于缓冲区、寄存器、表达式所用的字符串、viminfo 保存的等等文本,也就是设置 Vim 的工作字符类型。
在 GTK+ 2 或更新版本建议将其设为 utf-8。
set encoding=utf-8
它简称 set enc,上面的选项也可写成:
set enc=utf-8
set termencoding:设置终端使用的编码
set termencoding:设置用于终端的编码。此选项指定键盘产生以及终端显示能识别的字符编码。在图形用户界面它仅应用于键盘,而 encoding 用于显示。
默认值:"",GTK+ GUI 使用“utf-8”。
GUI 一旦成功初始化完毕,则 termencoding 将被强制设置为“utf-8”。此时如何设置为其他值,那么将被 Vim 拒绝,并且会显示错误消息。
set termencoding=utf-8
set fileencoding:设置缓冲区的字符编码
set fileencoding:为当前缓冲区的文件设置字符编码。
默认值为:""。
当 fileencoding 与 encoding 相异时,编码转换(转换到 fileencoding 的值)完成于从缓冲区写入文件。
如果 fileencoding 保持默认值,那么它使用与 encoding 相同的值,然而读写文件时不需要转换编码。
当 encoding 和 fileencoding 都是 Unicode 编码,同时 fileencoding 不是“utf-8”,编码转换会成功完成。因为, Unicode 在 Vim 内部总是作为“utf-8”编码存储。
注意:
此时,转换编码将会导致信息的丢失,从而产生乱码。
当 encoding 值为“utf-8”或者其他 Unicode 编码时,通过反向转换的方式使得编码转换可能取得成功而得到相同的文本。
当 encoding 不是”utf-8“时,会出现信息丢失的情况,从而导致乱码。
当正在读一个文件的时候,fileencoding 将会设置为 fileencodings 中的值(上面提到,写文件时用的是 fileencoding设置的编码);当 fileencodings 的值列表是空的时候,fileencoding 的值将会应用。
set fileencoding=utf-8
set fileencodings:一个字符编码列表
set fileencodings:当开始打开文件并编辑时所考虑的一个字符编码列表。
默认值:"ucs-bom",当设定 encoding 为一个 Unicode 系的值时,fileencodings 默认值为“ucs-bom,utf-8,default,latin1”。
当读取文件时,Vim 首先取得 fileencodings 字符列表中的第一个编码,如果该编码出现错误,那么就应用下一个编码,依此类推。若遇到可用的编码,则它将被设为 fileencoding 的值。如果全部都失败,那么 fileencoding 的值将设为空值“""”;这时使用的是 encoding 设置的编码。
注意:
此时,编码转换可能会导致信息的丢失!
当 encoding 设置为“utf-8”或者其他 Unicode 变种编码时,通过反向转换取得可能取得相同的转换文本。
当 encoding 不是“utf-8”,一些非“ASCII”字符可能会丢失,从而出现乱码。
对于空文件或者文件中仅有“ASCII”字符的情况,大多数编码能正常工作,并且 fileencodings 列表中的第一个编码将会被使用(除了“usc-bom”)。
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
; 或者
set fileencodings=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
scriptencoding:VimScript 脚本使用的编码
scriptencoding:指定 VimScript 脚本中使用的字符编码。
scriptencoding utf-8
; 或者
scripte utf-8
关于 Vim 字符编码的设置总结
; 系统全局配置
; 这是 Vim 最优先寻找的配置文件,不同系统略有不同
sudo bash -c 'cat >> /etc/vim/vimrc <<EOF
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
scriptencoding=utf-8
EOF'
; 用户配置
bash -c 'cat >> ${HOME}/.vimrc <<EOF
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
scriptencoding=utf-8
EOF'
; 定义的 Vim 配置
; 默认情况下,Vim 在 ~ 的目录下寻找 .vimrc 文件,
; 若是找不到,则下一个地方是 ~/.vim/vimrc,实验证明,该路径也是可以的
bash -c 'cat >> ${HOME}/.vim/vimrc <<EOF
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
scriptencoding=utf-8
EOF'
; 或者其他在 vimrc 文件导入的 VimScript 文件中也是可以的
bash -c 'cat >> /path/to/other/vim-encoding-setting-file <<EOF
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
scriptencoding=utf-8
EOF'