关于换行:如何使用vim根据模式将文本拆分为多行?

How to split text into multiple lines based on a pattern using Vim?

假设您有以下文本:

1
2
3
4
name1 ="John"; age1 = 41;
name2 ="Jane"; age2 = 32;
name3 ="Mike"; age3 = 36;
...

你想把每一行分成两行,得到这样的结果:

1
2
3
4
5
6
7
name1 ="John";
age1 = 41;
name2 ="Jane";
age2 = 32;
name3 ="Mike";
age3 = 36;
...

您将如何自动执行此操作?

一些注释:

  • 我已经尝试了以下方法:(1)选择虚拟视频点播中的文本,(2)执行:'<,'>:norm ^3f r^M**,但它不能正常工作;它只拆分一半的行,因为每一行都被破坏后,命令的下一个重复应用于其余的破坏行,而不是下一行!
  • 这可以通过宏实现,但我正在寻找更优雅的解决方案。< BR>< BR>
  • ***序列说明:

    -用于在正常模式下执行以下命令的norm。-用于将光标移动到行首的^。-用于将光标移动到行中的第三个空格的3f。-用新行替换该空间的r^M


    要对整个文件进行操作,请使用以下命令:

    1
    2
    :%s/; /;
    /

    要仅对所选文本进行操作,请使用以下命令:

    1
    2
    :'<,'>s/; /
    /

    英语翻译:

    "用分号和换行符替换所有出现的分号和空格。"

    说明:

    1
    2
    3
    4
    5
    6
    %    -    operate on the entire file
    s    -    substitute
    /    -    symbol that separates search/replace terms
    ;    -    the character you're searching for (notice I added a space)
    ;
      -    the replacement text (semi-colon followed by newline)

    这几乎和它在vi中的替换一样基本。

    对于更多的极客:

    在我的.vimrc文件中,对于这种情况,我实际上映射了以下内容:

    1
    2
    3
    4
    5
    "
    " add a newline after each occurrence of the last search term

    "

    nnoremap SS :%s//&
    /<CR>

    此命令在最后一个搜索模式的第一次出现时拆分文件的每一行。

    因此,对于您的用例,您可以这样做:

  • 搜索;(您可能希望或可能不希望包括空格…由你决定)
  • 在正常模式下键入以下命令:SS
  • 文件的每一行将在第一个;符号处被拆分。

    为了澄清,您将使用以下5个按键:

    / enter s s

    这对于快速格式化XML、HTML等非常方便。