关于vim的编码与文件格式(备忘) » 荒野无灯weblog

Keep It Simple, Stupid.

荒野无灯weblog

关于vim的编码与文件格式(备忘)

关于vim的各种编码(摘自vim doc):

====================================================================
====================================================================
encoding 设置 Vim 内部使用的字符编码。它应用于缓冲区、寄存器、表达式所用的字符 串、viminfo 保存的等等各种文本。该选项设置 Vim 可以工作的字符类型。
====================================================================
====================================================================
fileformats ‘ffs’ 字符串
给出换行符 () 的格式,开始编辑新缓冲区或者读入文件到已有的缓冲区
时,尝试这些格式:
- 如果为空,总是使用 ‘fileformat’ 定义的格式。不自动设置该选项。
- 如果设为一个名字,总是为打开的新缓冲区使用该格式,也为该缓冲区相应地
设置 ‘fileformat’。文件读入已有的缓冲区时,使用 ‘fileformats’ 给出的
名字,不管该缓冲区设定的 ‘fileformat’ 是什么。
- 如果给出多于一个以逗号分隔的名字,读入文件时会进行自动 检测。
开始编辑文件时,这样检查 :
1. 如果所有行都以 结尾,而 ‘fileformats’ 包含 “dos” 的话,
‘fileformat’ 设为 “dos”。
2. 如果找到一个 而 ‘fileformats’ 包含 “unix” 的话,’fileformat’
设为 “unix”。注意 如果找到的 没有前导 ,”unix” 比 “dos”
优先。
3. 如果 ‘fileformats’ 包含 “mac”,’fileformat’ 设为 “mac”。这意味着
“mac” 只有在没有给出 “unix” 或者在文件里没有找到 ,并且没有给
出 “dos” 或者没有在文件里找到 时才会使用。
如果先选择 “unix”,但第一个 出现在第一个 之前,而文件里
多的话,’fileformat’ 也设为 “mac”。
4. 如果还是不能设置 ‘fileformat’,使用 ‘fileformats’ 的第一个名字。
读入文件到已有的缓冲区时,完成相同的步骤,但如同 ‘fileformat’ 已经为
该文件合适地设置过,不改变该选项。
如果置位 ‘binary’,不使用 ‘fileformats’ 的值。

对于使用 DOS 类型的 () 的系统来说,读入待执行的脚本
(“:source”) 或者 vimrc 文件时,可能进行自动 的检测:
- 如果 ‘fileformats’ 为空,没有自动检测。使用 DOS 格式。
- 如果 ‘fileformats’ 设为一到多个名字,进行自动检测。它基于文件中的第
一个 : 如果在它之前有一个 ,使用 DOS 格式,不然,使用 Unix
格式。

====================================================================
====================================================================
fileencodings ‘fencs’ 字符串
全局
{仅当编译时加入 |+multi_byte| 特性才有效}
{Vi 无此功能}
这是一个字符编码的列表,开始编辑已存在的文件时,参考此选项。如果文件被
读入,Vim 尝试使用本列表第一个字符编码。如果检测到错误,使用列表的下一
个。如果找到一个能用的编码,设置 ‘fileencoding’ 为该值。如果全都失败,
‘fileencoding’ 设为空字符串,这意味着使用 ‘encoding’ 的值。
警 告: 转换可能导致信息的丢失!如果 ‘encoding’ 为 “utf-8″ (或
某个其它的 Unicode 变种),那么转换的结果通过逆转换很有可能产生
相同的文本。相反,如果 ‘encoding’ 不是 “utf-8″,一些非 ASCII
的字符可能会丢失!你可用 |++bad| 参数指定转换失败时的行为。

对于空文件或者只含 ASCII 字符的文件,多数编码都可以工作,因而会使用
‘fileencodings’ 的第一项 (除了 “ucs-bom” 以外,它需要 BOM)。如果你更愿
意别的编码,用 BufReadPost 自动命令事件来测试是否需要使用你所喜欢的编
码。比如: >
au BufReadPost * if search(‘\S’, ‘w’) == 0 |
\ set fenc=iso-2022-jp | endif
< 如果文件没有非空白字符,该代码设置 'fileencoding' 为 "iso-2022-jp"。
如果用 |++enc| 参数,不使用 'fileencodings' 的值。
注意 'fileencodings' 不用于新文件。此时,使用 'fileencoding' 的全局
值。你可以这样设置: >
:setglobal fenc=iso-8859-2
< 这意味着不存在的文件可能和空文件得到不同的编码。
特殊值 "ucs-bom" 可用来检查文件开始处的 Unicode 的 BOM (Byte Order
Mark 字节顺序标记)。要使之能正常工作,不能把 "utf-8" 或别的 Unicode 编
码放在它的前面。
8 位编码的项目 (比如,"latin1") 应该放在最后,因为 Vim 不会检测出错,
因而总会接受该编码。
特殊值 "default" 可以用来指定环境使用的编码。这是 'encoding' 的缺省
值。可用于把 'encoding' 设为 "utf-8" 而环境使用非 latin1 编码的场合,
例如俄语。
如果 'encoding' 为 "utf-8" 而文件包含非法的字节序列,它不会被识别为
UTF-8。可用 |8g8| 命令寻找非法的字节序列。

====================================================================
====================================================================
termencoding ‘tenc’ 字符串 (缺省为 “”;GTK+ 2 GUI: “utf-8″;
Macintosh GUI: “macroman”)
全局
{仅当编译时加入 |+multi_byte| 特性才有效}
{Vi 无此功能}
终端使用的编码。它指定键盘产生的和显示能识别的字符编码。对 GUI 而言,
这只适用于键盘 (‘encoding’ 用于显示)。Mac 上如果 ‘macatsui’ 关闭时例
外,此时 ‘termencoding’ 应是 “macroman”。
在 Win32 控制台版本上,缺省值为控制台的代码页,如果和 ANSI 代码页有所
不同的话。
*E617*
注意: 不适用于 GTK+ 2 GUI。那里,GUI 成功初始化后,’termencoding’ 被强
制设为 “utf-8″。任何试图设置不同值的努力都被拒绝,而且会给出错误消息。
对于 Win32 GUI,’termencoding’ 不用于输入的字符,因为 Win32 系统总是传
入 Unicode 字符。
如果为空,使用和 ‘encoding’ 选项相同的编码。这是正常情况。
不是所有的 ‘termencoding’ 和 ‘encoding’ 的组合都是可以的。见
|encoding-table|。
此选项的值必须被内部转换机制或 iconv() 支持。如果这不可能,不会进行任
何转换,非 ASCII 字符可能会遇到问题。
例如: 你在 euc-jp (日本语) locale 的设置下工作,但需要编辑 UTF-8 文
件: >
:let &termencoding = &encoding
:set encoding=utf-8
< 如果你的系统没有 UTF-8 的 locale 支持,需要这么做。
====================================================================
====================================================================

Tagged in : VIM,encoding,fileformats

All Comments (0)
Gravatar image
No Comments