Я представляю 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