如何根据使用Vim的模式将文本分成多行?

假设你有这样的文字:

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

并且你想将每行分成两行来给出如下结果:

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

你会如何自动执行此操作?

一些说明:

  • 我已经尝试了以下方法:
    (1)选择virtual-vode中的文字,
    (2)执行:'<,'>:norm ^3f r^M ***,
    但它不能正常工作; 它只分割一半线条,因为在每条线断开之后,下一条命令的重复将应用于其余的虚线,而不是下一条线!
  • 这可以使用宏来实现,但我正在寻找更优雅的解决方案。


  • ***序列的解释:

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


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

    :%s/; /;r/
    

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

    :'<,'>s/; /r/
    

    英文翻译:

    “用分号替换每个出现的分号后跟一个换行符后跟一个换行符 。”

    说明:

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

    这与Vi在替代方面基本相同。


    对于更多的怪胎:

    实际上,我在.vimrc文件中映射了以下情况:

    "
    " add a newline after each occurrence of the last search term
    "
    nnoremap SS :%s//&r/<CR>
    

    该命令在最后一次搜索模式发生时分割文件的每一行。

    所以,对于你的用例,你可以这样做:

  • 寻找; (你可能会也可能不想包括一个空间......由你决定)
  • 在正常模式下键入以下命令: SS
  • 您的文件的每一行都会在第一行被分割; 符号。

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

    /; 输入SS

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

    链接地址: http://www.djcxy.com/p/49329.html

    上一篇: How to split text into multiple lines based on a pattern using Vim?

    下一篇: In Vim how do I split a long string into multiple lines by a character?