2015-03-23 3 views
0

Что-то, что я регулярно делаю в Vim, нужно идти. Я сделаю вычитанииСменить два значения вычитания

var a = b - c; 

запустить его и понять, что это должно быть

var a = c - b; 

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

ответ

1

Нашел (своего рода)

noremap <F2> :s/\([^ -]*\)\([ ]*\)-[ ]*\([^;]*\);/\3 - \1;/<CR>:nohl<CR> 

украдена из

http://vim.wikia.com/wiki/Swap_LHS_and_RHS_of_an_Assignment_statement

Move Along, ничего увидеть здесь.

+0

Это хороший трюк, я только удивляюсь, почему три согласованных шаблона сохраняются, когда используются только два, и команда эквивалентна: s/\ ([^ -] * \) [] * - [] * \ ([ ^;] * \);/\ 2 - \ 1; / –

1

Вы можете попробовать SwapText plugin.

По сравнению с решением, основанным на заменяющей команде (:s//), оно имеет то преимущество, что оно применимо к любому обмену текста, а не только к математическим выражениям и может применяться к выражениям, которые охватывают несколько строк. Он также может исправить любое из значений, т. Е. Не ограничивается первым знаком минус выражения.

На вашем примере вы можете удалить b с помощью любой регулярной команды, таких как dw или x, а затем перейти через c и типа <leader> (который, как правило, \), а затем x и движение (например .: l или w).

1

Это замечательный эпизод Vimcasts по этому вопросу: Swapping two regions of text with exchange.vim. Screencast рассказывает об использовании Tom McDonald's exchange.vim, чтобы выбрать два региона для обмена.

Ваш пример будет сделано через:

fbcxlfccxl 

Exchange.vim использует cx{motion} для выделения текста для обмена. В приведенном выше примере используйте движение l, чтобы выбрать как b, так и c. Однако вы можете использовать любое движение, соответствующее потребностям. Вы также можете использовать визуальный выбор.

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