用 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的主要内容,如果未能解决你的问题,请参考以下文章