Подтвердить что ты не робот

Vim fu, параметры обмена для вызова метода

Каков наиболее эффективный способ обмена двумя параметрами для вызова метода в Vim?

Например, я хочу изменить:

call "hello mister 123", 2343

в

call 2343, "hello mister 123" 

(Предположим, что курсор находится в начале строки.)

В идеале трюк работает для таких вещей, как

call "hello, world" , "goodbye, world"
4b9b3361

Ответ 2

Это регулярное выражение сделает это для ваших примеров:

:s/\vcall ("[^"]+"|[^,]+)\s*,\s*("[^"]+"|[^,]+)/call \2, \1/

Это регулярное выражение должно становиться все более неприятным, если вы избегаете кавычек и таких вещей в одном из ваших параметров.

В действительности, я бы выделил один параметр (в визуальном режиме), нажмите d, выделите другой параметр и нажмите p; Vim красиво вставляет то, что в регистре, перезаписывает то, что вы выделили, и свопите удаленный текст в регистр. Затем переместите курсор и снова нажмите p. Выделите, d, выделить, p, переместить курсор, p - это общая комбинация, по крайней мере, в моем обрезании.

Итак, с курсором в начале строки, первый пример:

wva"dlvawpF,P

Значение переместится через слово "вызов" (w), выделите строку с кавычками (va"), удалите ее (d), переместите одно пространство вправо (l), выделите слово (vaw), вставить (p), переместить назад в запятую (F,), вставить перед ним (p).

Второй пример:

wva"dlva"p_f,P

Это не сложно, если вы привыкнете к командам перемещения.

Ответ 3

Отметьте sideways.vim, плагин @AndrewRadev. Он может обрабатывать движущиеся параметры и другие элементы с ограниченным списком вокруг, с некоторыми хорошими функциями, такими как перемещение вложенных списков в виде одного элемента. Он также обрабатывает вызовы методов в стиле Ruby без круглых скобок. Очень удобно.

Ответ 4

Если ваши аргументы находятся между скобками, например:

function ($argument1 = null, 'argument2') {
   ...
}

поместите курсор в любом месте скобки и:

va(:s/\\%V(\\@<=\\s*\\(.\\+\\),\\s*\\(.\\+\\)\\%V\\s*/\\2, \\1/g

Ответ 5

:%s:call \(".*"\)\s\?,\(.*\):call \2,\1:g