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

Vim:反转函数的参数顺序?,vim,editing,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

假设我得到了这个函数调用:

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更快地编辑代码,有什么想法吗?

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

显然没有银弹

就我个人而言,我非常喜欢苏勒梅奇的解决方案

如果使用+,我会键入fldi、lvi、g。其中di表示删除内部参数,vi表示选择内部参数,g表示将选择与刚才删除的内容交换


这种方法似乎有些过分,但与幼稚的方法不同,它仍然适用于kitchen->getPotmedium,blue等参数。

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

:s/\v(\w+\()([^,]+)(,\s*)([^\),]+)/\1\4\3\2
这将适用于大多数类型的参数,尤其适用于类似php的函数调用。

:map qdt,dwepqp

不需要插件。基于这一点,我发现在处理代码时,这种方法会更好一些。换言之,在以下情况下,iw对我来说效果不佳:

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

如果我从myProp开始,它只会捕获到。。这段代码只带您到逗号,如果您正在交换参数,这一点特别有用。

这里有一个实际调用Ruby的尝试:

它可以由::Reorder 3,2,1调用

我个人认为我们可以做得更好!我可能会尝试为此编写一个插件。。。认为键绑定可以是mcl和mch for Move子句Right/Left

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


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

我正在寻找一种适用于每个函数调用和定义的解决方案那里有很多想法,但没有一个能直接解决我的问题。他们只使用简单的参数进行引导,比如foo、bar。我在寻找一个解决方案:foo$array['Model'],'field';谢谢,稍后我会尝试这些插件,因为现在我更喜欢使用本机特性来解决这个很好的解决方案,在我的例子中效果不是很好,因为e最终会出现在厨房->锅的-中。虽然这会起作用:qdt、dwtpqp几乎在七年后,而且在我们的Javascript项目中,这对于从u迁移到fp非常有效。谢谢