重构Ruby的最佳方法是什么;如果’;在Vim中将语句转换为一行速记形式?

重构Ruby的最佳方法是什么;如果’;在Vim中将语句转换为一行速记形式?,vim,Vim,我有以下Ruby代码: if some_cond && another foo_bar end 我想把它改成: foo_bar if some_cond && another 在Vim中,最惯用的方法是什么?我看到很少(可能是非最佳)解决方案: 光标位于第一行的第一个字符中: D-删除if条件,但将光标保持在相同位置(不删除行) J-将下一行连接到当前 A-追加空格并退出到正常模式 p-粘贴if条件 然后用jdd拆下剩余的一端 光标位于第一行的第一个字

我有以下Ruby代码:

if some_cond && another
  foo_bar
end
我想把它改成:

foo_bar if some_cond && another
在Vim中,最惯用的方法是什么?

我看到很少(可能是非最佳)解决方案:

  • 光标位于第一行的第一个字符中:

    • D-删除
      if
      条件,但将光标保持在相同位置(不删除行)
    • J-将下一行连接到当前
    • A-追加空格并退出到正常模式
    • p-粘贴
      if
      条件
    • 然后用jdd拆下剩余的一端
  • 光标位于第一行的第一个字符中,如前所述:

    • j-移动到下一行
    • dd-删除此行
    • k-如果条件,则返回到
    • P-将删除的行粘贴到实际行之前,光标应放在粘贴的行上
    • J-将下一行连接到当前

    • ==或这可能有30种方法

      这里有一个,假设您在正常模式下从单词
      end
      的末尾开始:

      dd(删除最后一行)
      “aD(删除并复制
      foo_bar
      到缓冲区
      a

      dd(现在删除空行2)
      “aP(插入符号前从缓冲区粘贴
      a

      aSpaceEsc(插入空格并返回正常模式)


      同样,“正确”在Vim中很少应用,因为有很多方法可以完成某些事情。这是一个非常小的更改,即使重新键入
      foo\u bar
      也有道理。

      假设光标位于 重构(不一定在该行的开头), 我将使用以下正常模式命令序列:

      ddjVpkJ<<
      
      :m+|-j|<|+d
      
      ddjVpkJ另一种方式:

      ddpkJjdd
      
      • ddp交换两条线路
      • kJ向上移动并加入队列
      • ==重新缩进该行
      • jdd向下移动并删除最后一行

      @ib Nice ex命令。我想到了一些
      :s//
      ,但那更好,我可以自己映射。你提供的Ex命令非常棒,但是你能解释一下它们以及如何获得帮助吗?@Peter:谢谢!类似于
      :s/^\s*\(if.*\)\n\(\\\\.*\)\n\s*end\>/\2\1/@sławosz:当然。我已经添加了一个简短的解释,说明了四个Ex命令链背后的操作。有关更多详细信息,请参见
      :h:m
      :h:j
      :h: