【问题标题】:How can I merge multiple lines into one line in Vim?如何在 Vim 中将多行合并为一行?
【发布时间】:2022-01-10 04:26:48
【问题描述】:

比如我要合并这样的文本:

CATEGORIES = ['Books',
        'Business',
        'Education',
        'Entertainment',
        'Finance',
        'Games',
        'Healthcare & Fitness',
        'Lifestyle',
        'Medical',
        'Music',
        'Navigation',
        'News',
        'Photography',
        'Productivity',
        'Reference',
        'Social Networking',
        'Sports',
        'Travel',
        'Utilities',
        'Weather',
        'All',  ]

进入

CATEGORIES = ['Books', 'Business', 'Education', 'Entertainment', 'Finance', 'Games', 'Healthcare & Fitness', 'Lifestyle', 'Medical', 'Music', 'Navigation', 'News', 'Photography', 'Productivity', 'Reference', 'Social Networking', 'Sports', 'Travel', 'Utilities', 'Weather', 'All', ]

【问题讨论】:

  • 为什么不简单地进行视觉选择,然后按J

标签: vim


【解决方案1】:

在命令模式下:

[range]j[lines]

例如:这里你要做整个缓冲区:

%j

如果你只想从当前光标位置做 10 行:

j10

如果您不想用空格替换新行,请在 j 之后使用 !

%j!
j!10

而对于 uberfancy:

5j20

它将转到第 5 行,并加入接下来的 20 行。

【讨论】:

  • vipJ 在这里会更有效率。或者,如果在“[”之前的第一行,v%J 也可以。或者,文本块中的任何位置,va]J
  • 这应该是大写的J,而不是小写的j
【解决方案2】:

最直观的方法是使用 Vim 视觉线模式,Shift + v。您只需选择要合并到一行的内容,然后按Shift + j

【讨论】:

  • 我完全同意。这就是我使用它的方式。
  • 似乎在我的 Mac 上我需要使用 RightShift 才能工作,LeftShift 选择下面的下一行,将其添加到视觉选择中。
【解决方案3】:

使用 J(大写)键。它会为你加入行列

查看this 线程以获取更多加入选项,并查看帮助页面。

【讨论】:

    【解决方案4】:

    对于该特定示例,以下命令将起作用:

    :1, 21 j
    

    :%s/\n/ /g
    

    【讨论】:

      【解决方案5】:
      :g/\[/,/\]/j
      

      或者

      /^CATEGORIES
      
      :v//-1j
      

      如果你有:

      edit "Komputer" 
          ala 
          ala 
      next 
      edit "FortiGate" 
          ala 
          ala 
      next
      
      :g/edit/,/next/j
      

      【讨论】:

        【解决方案6】:

        或者加入从左方括号到右方括号的所有内容(假设您的文件中有很多这样的内容)并保持其他行不变,

        :g/\[/,/\]/j
        

        快速简单。

        【讨论】: