Я представляю 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 вставить перед курсором и поместить курсор на символ после вставленного содержимого
dt,удалить до следующей запятой. заменить ,, )если это последний аргумент
`< вернуться к началу последней визуальной области (курсор будет помещен на запятую)
P вставить перед курсором
Редактировать: как указано @ aharris88, ОП хочет, чтобы последний аргумент был первым и переместил все остальные правильно.
Поверните аргументы вправо
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