`
wensuper
  • 浏览: 70226 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[转]vim对文件的编解码—encoding,fileencoding,fileencodings

阅读更多
vim对于文件的编解码有三个参数,分别是encoding、fileencoding,fileencodings,下面说的应该可以解决绝大多数的问题了。

        1、支持中文编码的基础
        要更好地支持中文编码需要两个特性:+multi_byte和+iconv,可以用|:version|命令检查当前使用的Vim是否支持,否则的话需要重新编译。

        2、影响中文编码的设置项
        Vim中有几个选项会影响对多字节编码的支持:
        encoding(enc):encoding是Vim的内部使用编码,encoding的设置会影响Vim内部的Buffer、消息文字等。在Unix环境下,encoding的默认设置等于locale;Windows环境下会和当前代码页相同。在中文Windows环境下encoding的默认设置是cp936(GBK)。
        fileencodings(fencs):Vim在打开文件时会根据fileencodings选项来识别文件编码,fileencodings可以同时设置多个编码,Vim会根据设置的顺序来猜测所打开文件的编码。
        fileencoding(fenc):Vim在保存新建文件时会根据fileencoding的设置编码来保存。如果是打开已有文件,Vim会根据打开文件时所识别的编码来保存,除非在保存时重新设置fileencoding。
termencodings(tenc):在终端环境下使用Vim时,通过termencoding项来告诉Vim终端所使用的编码。
        termencodings(tenc):在终端环境下使用Vim时,通过termencoding项来告诉Vim终端所使用的编码。

        3、Vim中的编码转换
        Vim内部使用iconv库进行编码转换,如果这几个选项所设置的编码不一致,Vim就有可能会转换编码。打开已有文件时会从文件编码转换到encoding所设置的编码;保存文件时会从encoding设置的编码转换到fileencoding对应的编码。经常会看到Vim提示[已转换],这是表明Vim内部作了编码转换。终端环境下使用Vim,会从termencoding设置的编码转换到encoding设置的编码。
        可以用|:help encoding-values|列出Vim支持的所有编码。

        4、具体应用环境的设置
        只编辑GBK编码的文件
        set fileencodings=cp936
        set fileencoding=cp936
        set encoding=cp936

        只编辑UTF-8编码的中文文件
        set fileencodings=utf-8
        set fileencoding=utf-8
        set encoding=cp936 或者 set encoding=utf-8

        同时支持GBK和UTF-8编码
        set fileencodings=ucs-bom,utf-8,cp936
        set fileencoding=utf-8
        set encoding=cp936 或者 set encoding=utf-8

        如果在终端环境下使用Vim,需要设置termencoding和终端所使用的编码一致。例如:
        set termencoding=cp936 或者 set termencoding=utf-8

        Windows记事本编辑UTF-8编码文件时会在文件头上加上三个字节的BOM:EFBBBF。如果fileencodings中设置ucs-bom的目的就是为了能够兼容用记事本编辑的文件,不需要的话可以去掉。Vim在保存UTF-8编码的文件时会去掉BOM。去掉BOM的最大好处是在Unix下能够使用cat a b>c来正确合并文件,这点经常被忽略。

        5、FAQ
        为什么在Vim中一次只能删除半个汉字?
        因为encoding设置错误,把encoding设置为cp936就可以解决此问题。在Unix环境下Vim会根据locale来设置默认的encoding,如果没有正确设置locale并且没有设置encoding就会一次只能删除半个汉字。
        VIM为什么不能输入繁体字?
        把euc-cn或者GB2312改为cp936就可以了。euc-cn是GB2312的别名,不支持繁体汉字。cp936是GBK的别名,是GB2312的超集,可以支持繁体汉字。
        VIM为什么提示不能转换?
        因为在编译Vim时没有加入iconv选项,重新编译Vim才能解决。
        如何打开一个GBK编码的文件并另存为UTf-8编码?
        保存文件时运行命令|:set fileencoding=utf-8|就可以了。

        另可参考http://blog.163.com/sea_haitao/blog/static/7756216200942552859673/
分享到:
评论

相关推荐

    解决linux下vim中文乱码的方法

    4. **探测文件编码**: 如果Vim不能正确识别文件编码,可以尝试调整`fileencodings`列表的顺序,确保UTF-8排在首位。这样Vim会首先尝试用UTF-8解码文件。 5. **编辑和保存**: 编辑完成后,Vim会根据`fileencoding`和...

    Vim中文件编码处理与重新打开乱码文件详解

    Vim在读取文件时,会根据`fileencoding`将文件内容转换为其内部`encoding`所对应的格式。同样,Python在写入文件时会将字符串编码为字节流;Vim则会将缓冲区的内容从内部`encoding`转换为`fileencoding`,然后写入...

    linux文件转化

    - 如果想让Vim自动识别文件编码,可以在用户的`.vimrc`文件中添加`set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936`。这样Vim就会尝试按照UCS-BOM、UTF-8、CP936(即GBK)的顺序来识别文件编码。 2. **使用...

    Linux下嵌入式程序编辑器VIM配置详解.pdf

    - `set encoding=utf-8`、`set fileencodings=utf-8,latin1`和`set termencoding=utf-8`:设置文件、文件编码检测顺序和终端输出编码为UTF-8。 - `set ambiwidth=double`:设置汉字显示宽度为两个字符宽。 - `set ...

    gvim解决utf-8文件中文乱码

    在gvim配置文件中,通过`set fileencoding=utf-8`来指定gvim的内部编码为UTF-8。这样,无论打开哪种编码的文件,gvim都会尝试将其转换为UTF-8进行处理,从而避免乱码问题。 #### 步骤2:设置文件编码检测顺序 为了...

    Fedora安装后配置笔记

    set fileencodings=utf-8,chinese,latin-1 if has("win32") set fileencoding=chinese else set fileencoding=utf-8 endif ``` - 保存并退出编辑器。 2. **注意事项**: - 确保双引号使用的是英文输入法下...

Global site tag (gtag.js) - Google Analytics