在Vim中为方法调用交换两个参数的最有效方法是什么?
例如,我想改变:
call "hello mister 123", 2343
至:
call 2343, "hello mister 123"
(假设光标位于行的开头.)
理想情况下,这个技巧适用于像
call "hello, world" , "goodbye, world"
Brian Carper.. 17
这个正则表达式将为您的示例做到:
: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
一旦习惯了移动命令,这并不难.
这个正则表达式将为您的示例做到:
: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
一旦习惯了移动命令,这并不难.
查看sideways.vim,一个@AndrewRadev的插件.它可以处理移动参数和其他分隔列表项,具有一些很好的功能,例如将嵌套列表作为单个单元移动.它也处理没有括号的Ruby风格的方法调用.非常便利.