vim的编码探索

来源:互联网 发布:新世纪走遍美国 知乎 编辑:程序博客网 时间:2024/05/09 22:48

    vim中和编码有关的包含三个变量enc(encoding), fenc(fileencoding), fencs(fileencodings)。

    enc用来告诉vim终端当前的编码是什么,vim知道后,会把文件从自己的编码转换到enc(即终端编码),传递给终端显示。(当然不会改变文件自身的编码,只是为了正确展>现。)所以,如果enc设置得和终端编码不一样,那么终端会收到非自身编码的字符流,并以自身编码来解码,从而出现乱码。

    fenc用来表示当前文件自身的编码是什么。可以用命令“set fenc?”来查。可以用“set fenc=XXX”来将文件的编码转变为XXX。当文件刚打开时,vim会自动从fencs中查找编码>进行匹配,当匹配到fencs的某个编码时,fenc就被附为该编码。当匹配不到时,就直接将该文件编码作为enc来看待,而这很可能是错误的。可以设想,如果编码检测出错,导致fenc显示的编码和文本自身编码不一致,那么对于该文件就不能通过“set fenc=XXX”来转换编码了。
    为了能够让vim可以有效得检测出文件编码,可以安装个插件fencView。该插件有两个指令比较重要:
    1. :FencAutoDetect 可以自动检测并转换到合适的编码,目前支持中/日/韩等多字节编码。
    2. :FencView 提供编码列表供选择。
    该插件用来检测文件自身的编码,当检测出文件编码后,我们便可以通过“set fenc=XXX”来转换文件编码了。                                                        

    fencs用来在文件打开时,给文件的编码检测提供建议。vim会首先检测文件编码是不是第一个fencs编码,如果不是,再检测是否是第二个,以此类推。如果最终文件编码被检测出不是fencs中的编码,那么该文件的编码就未知,直接作为enc编码来解析,这时就相当于直接在终端输入cat命令,很可能会出错。

原创粉丝点击