【问题标题】:Separate lines with blank lines in Vim?在Vim中用空行分隔行?
【发布时间】:2012-09-05 00:17:24
【问题描述】:

我正在处理一组 cmets,例如:

//this is comment 1
//this is comment 2
//this is comment 3
//this is comment 4

我想让它看起来像:

//this is comment 1

//this is comment 2

//this is comment 3

//this is comment 4

是否有 Vim 快捷方式可以在保持命令模式时对选定行进行这种转换?

【问题讨论】:

  • 我在十分钟后回来查看,我得到了 3+ 个很棒的答案!我现在正在使用:使用 + V 选择行,输入 :g//norm o。不知道哪个更厉害,vim 还是 StackOverflow 社区!

标签: vim newline shortcut multiline


【解决方案1】:

您可以使用:substitute 命令。将光标放在 第一行:

:,+3s/$/\r

这会在每行的末尾插入一个额外的换行符。

您也可以使用:global 命令。将光标放在任意位置 第一行,运行:

:,+3g//norm o

对于接下来的四行中的每一行,这将执行o Normal-mode 命令,添加一个新的空行。

在这两个命令中,,+3 前缀是一个范围 命令,请参阅:help range。简而言之,逗号分隔地址 范围的起始行和结束行,其中当前行 如果我们省略两个地址中的前者,则使用。 +3 地址 指当前行以下三行的行。

而不是为其中任何一个指定范围,例如,+3 命令,您可以使用V Normal-mode 命令制作一个 Visual 阻止您想要的所有行。然后输入: 开始 命令将自动填充指定可视块的范围,并且您 然后可以输入以sg 开头的两个命令之一:

:'<,'>s/$/\r

【讨论】:

  • 你能解释一下,是什么意思吗?
  • 在范围内使用行号时,它们的格式为 n,m。有一些特殊情况,例如,+3,表示从当前行开始的三行
【解决方案2】:

你可以使用宏:

qao<esc>jq

然后使用3@a 在最后几行上应用宏 3 次。

地点:

qa    "Start recording a macro named a
o     "Insert new line under current line
<esc> "Exit insert mode
j     " Move down next line
q     " end macro

【讨论】:

    【解决方案3】:

    使用 V

    选择您的视觉选择

    然后运行正则表达式替换以用两个换行符替换一个换行符

    :s/\n/\r\r/g

    【讨论】:

      【解决方案4】:

      可以使用命令

      :g/^/pu_
      

      在整个缓冲区(默认情况下)或选定的行范围内。

      【讨论】:

      • 你能解释一下这个命令在做什么吗?我还没有找到系统引用 vim/regex 命令的好方法。
      【解决方案5】:

      V

      选择你想要的行

      然后输入 :s/\ze/\r

      【讨论】:

      • %V 是多余的,它不会在选择的最后一行之后添加换行符
      • 问题没有提到最后一行之后的换行符,并且确实 \%V 在可视模式下是多余的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 2010-10-16
      • 1970-01-01
      相关资源
      最近更新 更多