更改例如:
func(foo[0], bar(), baz.spam)
到
func(baz.spam, foo[0], bar())
是否有某种方法可以向左/向右交换参数,将函数括号和逗号保留在适当的位置?如果您想考虑参数本身就是带有自己参数的函数调用的参数,则需要花费很多精力-例如:
func(baz->spam, foo[0], bar(a, b, c))
-支持这些情况可能会涉及到更全面的解析。#1 楼
没有插件|指示光标位置
func(foo[0], bar(), |baz.spam)
步骤:
dt)
将删除baz.spam
Ff
将光标移至foo[0]
中的字符f vt,p
将删除foo [0]并将其替换为baz.spam
$P
会将foo [0]粘贴在括号之前对其他任何步骤重复步骤1-4。
使用插件
vim-argumentative:提供用于移动函数自变量的文本对象(默认映射:
<,
和>,
)。Tom McDonald的vim-exchange:提供方便的映射以交换两个选择(默认映射:在正常模式下为cx
,在可视模式下为X
)。Andrew Radev的vim-sideways:左右移动函数参数(以及其他按某项分隔的项)(默认映射) :NA
)。通过machakann的vim-swap:对定界项目进行重新排序(默认映射:
g<
和g>
)。#2 楼
我介绍了3种方法。前两个是特殊情况,需要较少的击键。最后一个是通用的。|
表示光标位置。交换相邻的参数(对后两个无效)
function func(foo[0], |bar(), baz.spam, qux->norf)
步骤:
dW
删除当前单词(参数)W
转到下一个参数的第一个字符P
将光标粘贴到光标之前交换最后两个参数
function func(foo[0], bar()|, baz.spam, qux->norf)
步骤:
dt,
删除直到下一个逗号E
转到最后下一个参数的字符P
粘贴到光标之前交换任意两个参数
function func(|foo[0], bar(), baz.spam, qux->norf)
步骤:
vt,d
直观地删除,直到逗号W
几次,直到到达要与之交换的参数为止。gP
在光标之前粘贴并在粘贴内容后将光标放在char dt,
删除,直到下一个逗号为止。如果这是最后一个参数,则将,
替换为)
`<
返回最后一个可视区域的开头(光标将置于逗号处)P
在光标编辑:如@ aharris88所指出的,OP希望最后一个参数为第一个,并将所有其他参数向右移动。
function func(foo[0], bar(), baz.spam|, qux->norf)
步骤:
dw
删除,␣
dt)
删除最后一个参数%p
跳转至开头括号并粘贴最后一个参数a,␣
插入逗号和空格<Esc>
返回正常模式或者,如果您不想退出正常模式:
"rdw
删除,␣
到寄存器r
dt)
删除最后一个参数%p
跳转到打开括号并粘贴最后一个参数"rp
粘贴寄存器r
的内容奖金:每种情况下的GIF:
swap1,swap2,swap3和rotate
评论
尽管此答案确实交换了参数,但并未回答问题,即如何将最后一个参数移到开头。
–aharris88
2015年2月9日在18:38
@ aharris88,你是对的。我编辑了答案。
–贡萨洛·里贝罗(GonçaloRibeiro)
2015年2月9日在19:30
评论
非插件解决方案非常适合这种情况...
– elyashiv
2015年2月8日,12:55
@elyashiv的想法是,您可以对任何函数参数使用类似的技术。基本上,拉一个单词,从视觉上选择另一个单词,粘贴,Vim将把已删除的字符拉到寄存器中,然后粘贴到第一次拉出的位置。
–akshay
2015年2月8日,12:57
+1为vim-sideways!最后一部分描述了一个非常不错的功能:cia到“参数更改”。 ❤️
–马丁·考特(Martijn Courteaux)
18年3月14日在16:30