【问题标题】:Vim: Invert function's parameter order?Vim:反转函数的参数顺序?
【发布时间】:2011-01-03 16:43:31
【问题描述】:

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

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

写完之后发现参数顺序不对,我应该做的

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

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

 1: 将光标移到 "rice": $b
    2:删除一个“:da”
    3: 移动到 (: %
    4:粘贴“米饭”:p
    5:插入新的,:a,
    6:查找并删除备用,:f,x

但我正在使用 VIM!我们用 vim 更快地编辑代码,有什么想法吗?

【问题讨论】:

  • 我正在寻找一种适用于每个函数调用和定义的解决方案

标签: vim editing


【解决方案1】:

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

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

显然没有灵丹妙药。

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

【讨论】:

  • 那里有很多想法,但没有一个能直接解决我的问题。它们仅使用简单的参数(例如 foo、bar)进行引导。我正在寻找解决方案: foo($array['Model'], 'field');
【解决方案2】:

您的回答确实很有帮助,但我自己找到了解决方案:

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

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

【讨论】:

  • 差不多七年后,这对于在我们的 Javascript 项目中从 _ 迁移到 fp 非常有效。谢谢!
【解决方案3】:

:map <F9> "qdt,dwep"qp

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

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

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

【讨论】:

  • 不错的解决方案,在我的示例中效果不佳,因为 e 最终出现在 kitchen->pot- 中。虽然这可行:"qdt,dwt)p"qp
【解决方案4】:

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

这种方法可能看起来有点矫枉过正,但与幼稚的方法不同,它仍然可以使用kitchen->getPot(medium, blue) 等参数。

【讨论】:

  • 谢谢,以后会试试这些插件,现在我更喜欢坚持使用原生功能
【解决方案5】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2021-05-31
    相关资源
    最近更新 更多