^ M字符在Vim中意味着什么?

时间:2011-04-30 17:37:25

标签: unix vim

我在vimrc中不断收到^M字符,这会破坏我的配置。

15 个答案:

答案 0 :(得分:501)

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

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

:%s/^M//g

通过按住 Ctrl 并输入 v 然后输入 m ,然后释放 Ctrl,输入^M 。这有时缩写为^V^M,但请注意您必须按照上一句中的描述输入,而不是按字面输入。

此表达式将用空字符串替换所有出现的^M(即没有)。我使用它来删除从Windows复制到Unix(Solaris,Linux,OSX)的文件中的^M

答案 1 :(得分:126)

:%s/\r//g 

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

答案 2 :(得分:59)

翻译新行而不是删除它:

:%s/\r/\r/g

答案 3 :(得分:36)

这可能意味着你有回车(不同的操作系统使用不同的方式发信号通知行尾)。

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

set ffs=unix,dos

答案 4 :(得分:15)

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

dos2unix file.txt 

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

答案 5 :(得分:8)

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

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

答案 6 :(得分:7)

我用sed删除了所有内容:

sed -i -e 's/\r//g'

也可以替换为不同的字符串或字符:

sed -i -e 's/\r/string/g'

答案 7 :(得分:5)

我有一个文本文件,最初是通过Mac用户在Windows机器上生成的,需要使用load data命令将其导入Linux MySQL数据库。

虽然VIM展示了' ^ M'字符,以上都没有为我的特定问题工作,数据将导入,但总是以某种方式损坏。最终解决方案非常简单(非常沮丧之后)。

解决方案: 在同一个文件上执行dos2unix TWICE 就行了!使用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

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

答案 8 :(得分:4)

您可以使用

在vim中修复此问题
:1,$s/^V^M//g

其中^是控制字符。

答案 9 :(得分:3)

这是我唯一有效的方法:

:e ++ff=dos

:wq

答案 10 :(得分:2)

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

这是在映射中存储特殊密钥代码的单一推荐便携方式

答案 11 :(得分:2)

在FreeBSD中,您可以通过键入以下内容手动清除^M

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

答案 12 :(得分:1)

如果您没有故意指定其他fileformat(例如,对于Windows文件:e ++ff=unix),则目标文件可能是混合EOL。

例如,如果某个文件的某些行带有<CR><NL>个结尾而其他行带有 <NL>结尾,fileformat在阅读时自动设为unix^M (<CR>)将会显示。 在这种情况下,fileformats开始发挥作用。有关详细信息,请参阅:help ffs

答案 13 :(得分:0)

由于我的Homebrew Mvim实例设置为使用filetype = dos,我发现我已经污染了数周的文件。在.vimrc ....中进行了必要的更改。

答案 14 :(得分:0)

尝试:%s/\^M//至少这对我有用。