Vi presento 3 metodi. I primi due sono casi particolari, che richiedono meno tasti. L'ultimo è generico.
|rappresenta la posizione del cursore.
Scambia argomenti adiacenti (non funziona per gli ultimi due)
function func(foo[0], |bar(), baz.spam, qux->norf)
passi:
dW elimina la parola corrente (argomento)
W vai al primo carattere del prossimo argomento
P incolla prima del cursore
Scambia gli ultimi due argomenti
function func(foo[0], bar()|, baz.spam, qux->norf)
passi:
dt, elimina fino alla virgola successiva
E vai all'ultimo carattere del prossimo argomento
P incolla prima del cursore
Scambia due argomenti qualsiasi
function func(|foo[0], bar(), baz.spam, qux->norf)
passi:
vt,d elimina visivamente fino alla virgola
W più volte fino a raggiungere l'argomento con cui si desidera scambiare
gP incolla prima del cursore e posiziona il cursore sul carattere dopo il contenuto incollato
dt,elimina fino alla virgola successiva. sostituire ,con )se questo è l'ultimo argomento
`< tornare all'inizio dell'ultima area visiva (il cursore verrà posizionato sulla virgola)
P incolla prima del cursore
Modifica: come sottolineato da @ aharris88, l'OP vuole che l'ultimo argomento sia il primo e sposta tutti gli altri a destra.
Ruota gli argomenti a destra
function func(foo[0], bar(), baz.spam|, qux->norf)
passi:
dw Elimina ,␣
dt) elimina l'ultimo argomento
%p passa all'apertura delle parentesi e incolla l'ultimo argomento
a,␣ inserire una virgola e uno spazio
<Esc> tornare alla modalità normale
Oppure, se non vuoi mai uscire dalla modalità normale:
"rdwcancellare ,␣in un registror
dt) elimina l'ultimo argomento
%p passa all'apertura delle parentesi e incolla l'ultimo argomento
"rp incolla il contenuto del registro r
Bonus: una GIF per ogni caso:
swap1 , swap2 , swap3 e rotazione