文本文件行末 ^M 删除
^M 字符问题源于不同操作系统对文本文件换行的不同定义而导致。
- Windows/DOS 系统里面,每行结尾是”<回车><换行>”,即
\r\n
; - Unix/Linux 系统里,每行结尾只有“<换行>”,即
\n
; - Mac系统里,每行结尾是”<回车>”。
因此,Unix/Mac 系统下的文件在 Windows 里打开的话,所有文字会变成一行;而 Windows 里的文件在 Unix/Mac 下打开的话,在每行的结尾可能会多出一个 ^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