我在源文件中有两个方法:
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
答案 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)