Eu apresento 3 métodos. Os dois primeiros são casos particulares, que exigem menos pressionamentos de tecla. O último é genérico.
|
representa a posição do cursor.
Trocar argumentos adjacentes (não funciona nos dois últimos)
function func(foo[0], |bar(), baz.spam, qux->norf)
Passos:
dW
excluir o Word atual (argumento)
W
vá para o primeiro caractere do próximo argumento
P
cole antes do cursor
Troque os dois últimos argumentos
function func(foo[0], bar()|, baz.spam, qux->norf)
Passos:
dt,
excluir até a próxima vírgula
E
vá para o último caractere do próximo argumento
P
cole antes do cursor
Troque dois argumentos
function func(|foo[0], bar(), baz.spam, qux->norf)
Passos:
vt,d
excluir visualmente até vírgula
W
várias vezes até chegar ao argumento com o qual deseja trocar
gP
cole antes do cursor e coloque o cursor no caractere após o conteúdo colado
dt,
exclua até a próxima vírgula. substitua ,
por )
se este for o último argumento
`<
volte ao início da última área visual (o cursor será colocado na vírgula)
P
cole antes do cursor
Edit: como apontado por @ aharris88, o OP quer que o último argumento seja o primeiro e mova todos os outros para a direita.
Girar argumentos para a direita
function func(foo[0], bar(), baz.spam|, qux->norf)
Passos:
dw
excluir ,␣
dt)
excluir último argumento
%p
pule para abrir parênteses e cole o último argumento
a,␣
insira vírgula e espaço
<Esc>
retornar ao modo normal
Ou, se você não quiser sair do modo normal:
"rdw
excluir ,␣
em um registror
dt)
excluir último argumento
%p
pule para abrir parênteses e cole o último argumento
"rp
colar o conteúdo do registro r
Bônus: um GIF para cada caso:
swap1 , swap2 , swap3 e rotação