5 题: 为什么\ r \ n是Vim的换行符?

在...创建的问题 Tue, May 23, 2017 12:00 AM

来自问题 如何更换Vim换行符的字符? 。替换新行的文本时必须使用\r,如此

 
:%s/%/\r/g

但是当替换角色的行尾和换行符时,你可以这样做:

 
:%s/\n/%/g 

本手册的哪一部分记录了这些行为,以及它们背后的原因是什么?

    
242
  1. 搜索和替换时的%是什么?
    2013-10-21 20:12:42Z
  2. @ qed:默认情况下,:s只会将替换应用于当前行。 :%s使它解决整个文件。 更多
    2014-01-06 14:09:42Z
  3. + c24w我认为他指的是斜杠之间的'%',第一个例子是'%'在搜索位置,在替换位置第二个例子,但@qed回答你的问题,那些'%'字面匹配。
    2016-08-24 02:57:48Z
  4. 醇>
    5答案                              5 跨度>                         

    关于模式的vim文档

      

    \r场比赛< CR>

         

    \n匹配终点 -     匹配字符串而不是   缓冲文本文字换行符     字符匹配。

        
    152
    2015-05-27 19:25:39Z
    1. 对我来说,混淆的一点是\r和\n在使用时表示不同的东西是搜索模式和替换模式。
      2012-12-04 17:09:26Z
    2. @ dlamblin是的!看我的答案:)
      2014-06-28 01:54:09Z
    3. 醇>

    来自 http://vim.wikia.com/wiki/Search_and_replace

      

    搜索时

         

    ...

         

    \n是换行符,\rCR(回车= Ctrl-M = ^M

         

    更换时

         

    ...

         

    \r是换行符,\n是空字节(0x00)。

        
    187
    2012-09-12 13:02:55Z
    1. 这个答案对我帮助最大。另外,有关更多信息,请参阅:h :s%,尤其是最后一段。 (通过:h :s
      2014-10-20 12:56:11Z
    2. 醇>

    另一方面是\0,传统上是NULL,被接纳  s//\0/表示“整个匹配模式”。 (顺便说一下,这是多余的,并且比&更长)。

    • 所以你不能使用\0来表示NULL,所以你使用\n
    • 所以你不能使用\n来表示\n,所以你使用\r
    • 所以你不能用\r来表示\r,但我不知道谁愿意t故意添加这个字符。

    -☈

        
    100
    2012-10-18 07:53:27Z
    1. 好点!所以这是一个黑客围绕\0 - 反向引用第0个嵌套组 - 整个正则表达式。这是一个非常好的答案,但它让我失望,我不能使用\r \n替换...(意思是:插入#(13),例如在“普通”文件中(== unix EOLs)。
      2013-11-06 09:54:11Z
    2. 好的,答案在Vim文档中。只需使用正常的反斜杠转义\^ M或\< CR>。尼斯。 -----< CR>此时将行拆分为两行(键入< CR>为CTRL-V< Enter>) s< CR> \r \n idem -------- s /\r \< CR>插入回车符(CTRL-M)(键入< CR>为CTRL-V< Enter>) s /\< CR>
      2013-11-06 10:03:39Z
    3. “另一个方面”?你太谦虚了!精确地解释_Why_这对于所有只是说如何解决它的人来说是一个很好的答案。 1
      2015-10-20 13:23:37Z
    4. 老实说非常很清楚\n在搜索和替换模式中有不同含义的原因。很棒的答案。
      2019-04-30 10:51:30Z
    5. 醇>

    :help NL-used-for-Nul

      

    技术细节:

         

    文件中的<Nul>个字符作为<NL>存储在内存中。在显示器中   它们显示为“^@”。翻译是在阅读和写作时完成的   文件。要将<Nul>与搜索模式匹配,您只需输入 CTRL- @ 要么   “ CTRL-V 000”。这可能正是您所期望的。在内部   字符在搜索模式中替换为<NL>。不寻常的是   键入 CTRL-V CTRL-J 也插入了<NL>,因此也搜索了<Nul>   在文件中。 {Vi无法处理文件中的<Nul>个字符}


    47
    2014-07-03 14:08:49Z

    首先,打开 :h :s ,查看“4.2替代”部分“关于”改变“的文件。这是命令接受的内容:

     
    :[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
    

    请注意有关patternstring的说明

      

    对于{pattern},请参阅 |pattern|
    {string}可以是文字字符串,也可以是

      特别;请参阅 |sub-replace-special|

    所以现在您知道搜索模式和替换模式遵循不同的规则。 如果您按照|pattern|的链接,它会转到解释Vim中使用的整个正则表达式模式的部分。

    与此同时,|sub-replace-special|将您带到“4.2替代”的子部分,其中包含替换模式,其中\r为换行/拆分。

    (手册本部分的快捷方式是 :h :s%

        
    10
    2013-12-10 10:28:54Z
来源放置 这里