vim 跨平台问题

文本文件行末 ^M 删除

^M 字符源于不同操作系统对文本文件换行的不同定义。在 DOS/Windows 里,文本文件的换行符为 \r\n,而在 *nix 系统里则为 \n,所以 DOS/Windows 里编辑过的文本文件到了 *nix 里,每一行都多了个 ^M。所以 ^M 只是一个换行符号,没有实际的用处,可以保留,也可以删除。

删除方法:
vim 中 使用 %s/\r//g 即可。

打开文本文件乱码

Windows 中编辑的带有中文的 vim 文件在 Linux 中打开乱码。

乱码问题与 vim 中字符的编码有关,在 vim 中,几个选项会影响对多字节编码的支持:

  • encoding(enc)
    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 终端所使用的编码。

(1) Option 1

在 .vimrc 中加入如下内容

set termencoding=utf-8
set encoding=utf8
set fileencodings=utf8,ucs-bom,gbk,cp936,gb2312,gb18030

(2) Option 2

指定以 cp936 格式重新加载文件。

:e ++enc=cp936

reference:

  1. https://blog.csdn.net/m0_37806112/article/details/81253292

发表评论

电子邮件地址不会被公开。 必填项已用*标注