^M字符在Vim中是什么意思?

我一直在我的.vimrc中的^M字符,它打破了我的 配置。< / p >

398486 次浏览

这可能意味着您得到了回车(不同的操作系统使用不同的方式来表示行结束)。

使用dos2unix来修复文件或在vim中设置文件格式:

set ffs=unix,dos

你可以在vim中使用

:1,$s/^V^M//g

其中^是控制字符。

Unix使用0xA作为换行符。Windows使用两个字符的组合:0xD 0xA。0xD是回车符。^M恰好是vim显示0xD的方式(0x0D = 13, M是英语字母表中的第13个字母)。

您可以删除所有^M字符通过运行以下命令:

:%s/^M//g

按下Ctrl,输入v,然后释放Ctrl,进入^M。有时缩写为^V^M,但请注意,必须按照上一句中描述的方式输入,而不是逐字输入。

这个表达式将把所有出现的^M替换为空字符串(即无)。我用这个来摆脱从Windows复制到Unix (Solaris, Linux, OSX)的文件中的^M

如果它破坏了您的配置,并且映射中需要^M字符,您可以简单地将^M字符替换为<Enter>甚至<C-m>(两者都输入为简单的字符序列,因此分别为7和5个字符)。

这是在映射中存储特殊键码的唯一推荐的可移植方法

:%s/\r//g

今天为我工作了。但我的情况可能略有不同。

在FreeBSD中,您可以通过输入以下命令手动清除^M:

:%s/ Ctrl+V,然后是Ctrl+,然后是Ctrl+

翻译新行而不是删除它:

:%s/\r/\r/g

我得到了一个最初在Windows机器上通过Mac用户生成的文本文件,需要使用load data命令将它导入到Linux MySQL DB中。

尽管VIM显示了'^M'字符,但上述方法对我的特定问题都不起作用,数据会导入,但总是以某种方式损坏。在经历了很多挫折之后,最终解决方案非常简单。

< p >解决方案: 在同一个文件上执行dos2unix 两次就成功了!使用file命令显示正在发生的事情
$ file 'file.txt'
file.txt: ASCII text, with CRLF, CR line terminators


$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text, with CRLF line terminators


$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text

最终版本的文件被完美地导入数据库。

我用sed删除了它们:

# EYZ0

也可以替换为不同的字符串或字符。如果没有换行符,你可以把\r变成\n:

# EYZ0

这些sed命令可以在sed的GNU/Linux版本上运行,但在bsd(包括macOS)上可能需要调整。

在Unix中,使用'tr'命令可能更容易。

cat file1.txt | tr "\r" "\n" > file2.txt

假设您的文本文件是- file.txt,然后运行这个命令-

dos2unix file.txt

它将文本文件从dos格式转换为unix格式。

我发现,由于我的Homebrew Mvim实例被设置为使用filetype=dos,我已经污染了几个星期的文件。在.vimrc....中进行了所需的更改

至少这对我有用。

如果您没有故意指定不同的fileformat(例如,对于Windows文件,:e ++ff=unix),那么目标文件的eol很可能是混合的。

例如,如果一个文件有一些行以<CR><NL>结尾,而其他行以<CR><NL>结尾 <NL>结尾,fileformat被Vim自动设置为unix,当读取它时,^M (<CR>)将出现。 在这种情况下,fileformats(注意:有一个额外的s)起作用。

. :help ffs

这是唯一对我有效的方法:

# EYZ0

# EYZ0