代码之家  ›  专栏  ›  技术社区  ›  Vinko Vrsalovic

为什么\r是vim的新行?

vim
  •  239
  • Vinko Vrsalovic  · 技术社区  · 16 年前

    从问题 How to replace a character for a newline in Vim? . 在为换行符替换文本时,必须使用\r,如下所示

    :%s/%/\r/g
    

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

    :%s/\n/%/g 
    

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

    5 回复  |  直到 9 年前
        1
  •  151
  •   iconoclast    9 年前

    vim docs on patterns :

    \r 匹配<CR>

    \n 匹配行尾- 在字符串中匹配而不是 缓冲区文本文本换行符 字符匹配。

        2
  •  184
  •   lmat - Reinstate Monica    12 年前

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

    搜索时

    \n 是换行符, \r CR (回车= Ctrl-M = ^M )

    更换时

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

        3
  •  93
  •   rking    12 年前

    另一个方面是 \0 传统上是空的 s//\0/ 意思是“整个匹配的模式”。(顺便说一下,这是多余的,而且比, & )

    • 所以你不能用 0 意味着 NULL 所以你用 \n
    • 所以你不能用 \n 意味着 \n 所以你用 \r .
    • 所以你不能用 R 意味着 R 但是我不知道谁会故意加上这个字符。

        4
  •  46
  •   matthias krull Taqveem    10 年前

    :help NL-used-for-Nul

    技术细节:

    <Nul> 文件中的字符存储为 <NL> 在记忆中。在显示器上 它们显示为“ ^@ “。翻译是在读写时完成的。 文件夹。匹配一个 <NUL & GT; 使用搜索模式,您只需输入 CTRL-@ 或 “ CTRL-V 000“。这可能正是你所期望的。内部的 字符替换为 <NL & GT; 在搜索模式中。不寻常的是 那种打字 CTRL—V CTRL-J 也插入一个 <NL & GT; ,因此也会搜索 <NUL & GT; 在文件中。vi无法处理 <NUL & GT; 文件中的字符


        5
  •  10
  •   syockit    11 年前

    首先,打开 :h :s 参见“变更”文件的“4.2替代”部分。下面是命令接受的内容:

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

    注意描述 pattern string

    对于 {pattern} 看见 |pattern| .
    {string} 可以是文本字符串或其他
    特殊的;参见 |sub-replace-special| .

    所以现在您知道搜索模式和替换模式遵循不同的规则。 如果你按照链接 β型 ,它将带您到解释VIM中使用的整个regexp模式的部分。

    与此同时, |特殊子替换| 带您进入“4.2替代品”小节,其中包含替代模式,其中: \r 用于换行/拆分。

    (手册这一部分的快捷方式是 :h :s% )