【问题标题】:vim fu, swapping parameters for a method callvim fu,为方法调用交换参数
【发布时间】:2009-08-13 06:04:01
【问题描述】:

在 Vim 中为方法调用交换两个参数的最有效方法是什么?

比如我要改:

call "hello mister 123", 2343

到:

call 2343, "hello mister 123" 

(假设光标在行首。)

理想情况下,该技巧适用于

call "hello, world" , "goodbye, world"

【问题讨论】:

  • 只用逗号分隔吗?每行只有一个逗号?
  • 参数总是以逗号分隔,但字符串 pramas 有时可以有逗号内联。
  • :%s:call (".*"),(.*):call \2,\1:g
  • (nitpick) 我想你的意思是 vim fu - en.wikipedia.org/wiki/Fu
  • @colin pickard: vim fu 是什么?

标签: vim


【解决方案1】:

此正则表达式将为您的示例执行此操作:

:s/\vcall ("[^"]+"|[^,]+)\s*,\s*("[^"]+"|[^,]+)/call \2, \1/

如果您在某个参数中转义了引号和此类内容,则此正则表达式将需要变得越来越讨厌。

实际上,我只需突出显示一个参数(在可视模式下),点击d,突出显示另一个参数,然后点击p; Vim 会很好地粘贴寄存器中的内容,覆盖您突出显示的内容,并将删除的文本交换到寄存器中。然后移动光标并再次点击p。突出显示,d,突出显示,p,移动光标,p 是一个常见的组合,至少在我的 vimming 中。

所以光标在行首,第一个例子:

wva"dlvawpF,P

意思是移过单词“call”(w),突出显示引用的字符串(va"),删除它(d),向右移动一个空格(l),突出显示一个单词(vaw),粘贴(p),向后移动到逗号(F,),在它之前粘贴(P)。

第二个例子:

wva"dlva"p_f,P

一旦你习惯了移动命令,这并不难。

【讨论】:

  • “现实”部分是引起我兴趣的部分。感谢您引导我们完成这一切! :)
【解决方案2】:

查看sideways.vim@AndrewRadev 的插件。它可以处理移动参数和其他分隔列表项,并具有一些不错的功能,例如将嵌套列表作为一个单元移动。它也可以处理不带括号的 Ruby 风格的方法调用。非常方便。

【讨论】:

    【解决方案3】:

    【讨论】:

    • 我希望它用于 Ruby,所以 Python 应该相当接近
    【解决方案4】:

    如果你的论点在括号之间,就像这里:

    function ($argument1 = null, 'argument2') {
       ...
    }
    

    将光标放在括号内的任意位置,然后:

    va(:s/\\%V(\\@<=\\s*\\(.\\+\\),\\s*\\(.\\+\\)\\%V\\s*/\\2, \\1/g
    

    【讨论】:

      【解决方案5】:
      :%s:call \(".*"\)\s\?,\(.*\):call \2,\1:g
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-06
        • 2016-06-09
        • 2016-07-06
        • 2011-06-14
        相关资源
        最近更新 更多