Vim:反转函数的参数顺序?

时间:2011-01-03 16:43:31

标签: vim editing

假设我有这个函数调用:

cook("rice", kitchen->pot);

写完之后,我注意到参数顺序错了,我应该已经完成​​了

cook(kitchen->pot, "rice");

要解决这个问题,我可以这样做:

    1: move cursor over "rice": $b
    2: delete a ": da"
    3: move to (: %
    4: paste "rice": p
    5: insert new ,: a, 
    6: find and delete spare ,: f,x

但我正在使用VIM!我们用vim,任何想法更快地编辑代码?

5 个答案:

答案 0 :(得分:2)

这里有一个类似的问题,这是Ruby特定的,但它应该适合你:

What is the fastest way to reverse a comma-separated list in vim?

显然没有银弹。

就个人而言,我非常喜欢soulemerge的解决方案。

答案 1 :(得分:2)

使用omap-param (from lh-cpp) + a stuff swapping plugin,我会输入f(ldi,lvi,g"。如果di,删除内部参数vi,选择内部参数g"说明交换选择我们刚刚删除了

这种做法看似矫枉过正,但与天真的方法不同,它仍然适用于kitchen->getPot(medium, blue)等参数。

答案 2 :(得分:2)

您的回答非常有用,但我自己找到了一个解决方案:

:s/\v(\w+\()([^,]+)(,\s*)([^\),]+)/\1\4\3\2

这适用于大多数类型的参数,特别是对于我类似php的函数调用。

答案 3 :(得分:2)

:map <F9> "qdt,dwep"qp

无需插件。基于soulemerge's answer,我发现当你处理代码时这会更好一些。换句话说,iw在以下情况下对我来说效果不佳:

Assert.AreEqual(myProp.ToString(), 0xcccc);

如果我从myProp开始,则只会占用.。此代码只会将您带到逗号,这在交换参数时特别有用。

答案 4 :(得分:0)

这里有一次尝试(实际上是对Ruby的调用):https://github.com/vim-scripts/reorder.vim

可以通过以下方式调用::Reorder 3,2,1

我个人认为我们可以做得更好!我可能会尝试为此编写一个插件...认为关键字绑定可以是mclmch用于移动子句右/左。

除了函数参数,我还发现自己想要改变英语句子中的从句顺序。 “我也发现自己想要改变英语句子中的从句顺序,以及函数论证。”

另一个用例是列表中以行分隔的项目,但是单独的最后一个参数应该省略一个尾随逗号。