假设我有这个函数调用:
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,任何想法更快地编辑代码?
答案 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
我个人认为我们可以做得更好!我可能会尝试为此编写一个插件...认为关键字绑定可以是mcl
和mch
用于移动子句右/左。
除了函数参数,我还发现自己想要改变英语句子中的从句顺序。 “我也发现自己想要改变英语句子中的从句顺序,以及函数论证。”
另一个用例是列表中以行分隔的项目,但是单独的最后一个参数应该省略一个尾随逗号。