Les presento 3 métodos. Los dos primeros son casos particulares, que requieren menos pulsaciones de teclas. El último es genérico.
|representa la posición del cursor.
Intercambie argumentos adyacentes (no funciona para los últimos dos)
function func(foo[0], |bar(), baz.spam, qux->norf)
Pasos:
dW eliminar la palabra actual (argumento)
W ir al primer char del siguiente argumento
P pegar antes del cursor
Intercambia los dos últimos argumentos
function func(foo[0], bar()|, baz.spam, qux->norf)
Pasos:
dt, eliminar hasta la próxima coma
E ir al último personaje del siguiente argumento
P pegar antes del cursor
Intercambia dos argumentos
function func(|foo[0], bar(), baz.spam, qux->norf)
Pasos:
vt,d eliminar visualmente hasta coma
W varias veces hasta llegar al argumento con el que desea intercambiar
gP pegue antes del cursor y coloque el cursor en el carácter después del contenido pegado
dt,eliminar hasta la próxima coma. reemplazar ,por )si este es el último argumento
`< volver al comienzo de la última área visual (el cursor se colocará en la coma)
P pegar antes del cursor
Editar: como señaló @ aharris88, el OP quiere que el último argumento sea el primero y mover todos los demás a la derecha.
Rotar argumentos a la derecha
function func(foo[0], bar(), baz.spam|, qux->norf)
Pasos:
dw Eliminar ,␣
dt) eliminar el último argumento
%p saltar a paréntesis de apertura y pegar el último argumento
a,␣ inserte una coma y espacio
<Esc> volver al modo normal
O, si no quieres salir del modo normal:
"rdweliminar ,␣en un registror
dt) eliminar el último argumento
%p saltar a paréntesis de apertura y pegar el último argumento
"rp pegar contenido del registro r
Bonificación: un GIF para cada caso:
intercambio1 , intercambio2 , intercambio3 y rotación