2009-08-13 2 views
21

Что является наиболее эффективным способом обмена двумя параметрами для вызова метода в Vim?vim fu, параметры обмена для вызова метода

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

call "hello mister 123", 2343 

к:

call 2343, "hello mister 123" 

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

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

call "hello, world" , "goodbye, world" 
+0

Разделяет его только через запятую? и только одна запятая в каждой строке? – nightingale2k1

+0

параметры всегда разделяются запятой, но в строковых прамах иногда могут быть запятые. –

+0

:% s: call \ (". *" \), \ (. * \): Call \ 2, \ 1: g – nightingale2k1

ответ

16

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

: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 

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

+0

Часть «на самом деле» - это та часть, которая заинтересовала меня. Спасибо, что прошли через нас! :) – aikeru

1

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

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

разместить курсор в любом месте внутри круглых скобок и:

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

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

Смежные вопросы