使用vim重新排序方法

时间:2009-07-27 23:45:08

标签: vim

我在源文件中有两个方法:

def Foo
  puts "hello"
  puts "bar" 
end 

def Bar
  puts "hello"
  puts "bar" 
end

我想交换方法的顺序,所以Bar是第一个。

假设光标位于def Foo的d上,简单的方法是:

shift v -> jjjj -> d -> jjj -> p -> O -> esc 

但是这种感觉有点长,并且不适合任意长的方法:

在Vim中执行此操作的最有效方法是什么?

修改 请记住,我希望解决方案能够解决方法在大类上下文中的情况,因此最好避免使用 G

6 个答案:

答案 0 :(得分:15)

假设光标位于第一种方法中的某个位置,请按dap}p并交换它们。

dap所做的只是“删除一个段落”。尝试:help object-select了解在VIM中删除/选择文本对象的其他方法。

编辑:在命令中用G替换}

答案 1 :(得分:3)

与Spatz的相似

d}}p

删除到下一个空白行(在Foo下面),跳到下一个空白行(在Bar下面),粘贴。

答案 2 :(得分:2)

找到另一种方法(来自#vim上的godlygeek):

使用:

def function():
    first
    first
    first

def lol():
    second
    second
    second

从第1行开始计算,直到'def lol',即5:然后:

:1,5m$

答案 3 :(得分:1)

有几种方法可以摆脱我的困扰。你可以说

5dd / end [输入密钥] pO

删除五行,搜索结束,将行放在下面,添加一个空格。

如果您安装了VimRuby,我相信您可以使用%在def和end之间跳转。在那种情况下,你可以说

v%的x5jpO

编辑:我推迟讨论:P

答案 4 :(得分:0)

从第1行,5ddGp或5dd:5p是我能想到的最简洁/最短的。

答案 5 :(得分:0)

个人而言,我会去'4dd'然后在酒吧下面按'p',但我不是vim guru