用 Enter 替换回车符 ^M

Posted

技术标签:

【中文标题】用 Enter 替换回车符 ^M【英文标题】:Replacing carriage return ^M with Enter 【发布时间】:2011-08-21 19:13:52 【问题描述】:

我知道如何在我的文件 (%s/^M//g) 中删除^M,但这只是我想用回车替换^M 的一行... VIM 中的回车字符是什么(使用在命令行模式下)。

【问题讨论】:

一般的“用换行符替换”问题可以在:***.com/questions/71323/… 找到,但是由于set ff,查找回车有点特殊,而且这是谷歌的第一个命中,也许我们应该把它分开。 【参考方案1】:

要用换行符(unix换行符)替换回车符(<C-m>),你应该运行一个有点奇怪的命令:

%s/\r/\r/g

它看起来好像什么都不做,但是在正则表达式和双引号字符串中,回车用\r 表示,换行用\n 表示,而在:s 命令和substitute() 的替换部分功能相反。

请注意,在终端中 Enter 会生成 <C-m>,因此您的初始请求无效。

【讨论】:

太棒了;我阅读 this 以更好地理解 \n\r 在搜索和替换 vim 时 如果你在 vim 脚本中运行它,那么它是exec "%s/\r/\r/g"【参考方案2】:

:%s/\r//g 仅在以下情况下有效:

set ff=unix,完成后会自动将所有CRLF 转换为LF

set ff=dos and CR 是一个 not 以 LF 开头的流氓字符,例如插入 C-V C-M

LF CR 对中的 CR 将找不到

因此,如果您只想将每个LF CR 转换为LF,您应该使用:

:set ff=unix
:w

【讨论】:

【参考方案3】:

您可以在正常模式下使用r<CR> 替换一个字符。 或者你可以在命令行模式下输入“return”,输入<C-v><CR>

【讨论】:

【参考方案4】:

在 vim 会话中尝试:

:%s/^M//g

其中^M 是通过ctrl+V+M 一起击键实现的。

【讨论】:

从技术上讲,它是两个独立的击键。 <C-v> 之后的任何内容都将按字面意思插入。 谢谢,但我知道该怎么做,出于一个奇怪的原因,这个文件只包含^M 之后没有返回,所以我不得不做:%s/^M/^M/g,其中最后一个^M 是实际回报。【参考方案5】:

类似于@ZyX 和@anubhava,但假设您只是想从 Windows 文件中删除讨厌的回车,以下内容就足够了:

:%s/\r//g

【讨论】:

【参考方案6】:

LF:换行

CRLF:回车换行

^M :vim 将回车部分解释为什么。您也可以使用 \r

进行搜索

就我而言,我不想用任何其他格式的换行符(LF 等)替换它,而只是用句点和空格(.)替换它。因为应该是一个新句子,但不知何故涉及回车。可能是用户拼写错误。

来自

I'll be there^M
We can talk.

I'll be there. We can talk.

帮助我的是:

:%s/^M\n/\. 

:%s/\r\n/\. 

(最后有一个空格)

两者都适合我。 \r\n 更容易输入。

Ctrl+M , Ctrl+V 插入 ^M

(CentOS Linux 7.2)

【讨论】:

以上是关于用 Enter 替换回车符 ^M的主要内容,如果未能解决你的问题,请参考以下文章

Excel2010替换回车/换行符的操作方法

Wps文字替换功能,怎么替换指定字母后面的回车符,例如只替换选择题ABCD四行后面的回车符为制表符

java中的空格和回车符怎样输入。

C语言中回车符和回车换行符有啥区别

如何替换SQL字段中的换行符,回车符

关于C语言中的换行符和回车符