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

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

【问题讨论】:

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

标签: vim


【解决方案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)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-09
          • 1970-01-01
          • 2013-08-10
          • 2020-02-05
          相关资源
          最近更新 更多