Макросы являются самыми простыми, но еще один способ сделать это с глобальными командами - :g/
регулярное выражение /
Ex команда . Например (не ваш пример - мы вернемся к нему позже), вы можете использовать :g/^\s*ICar/delete
удалит все строки, начинающиеся с ICar
(^
для начала строки, \s*
это для пропуска вкладок и пробелов, используемых для отступа).
Преимущество этого метода перед макросами состоит в том, что вы можете использовать его в диапазоне: перейдите в визуальный режим, отметьте часть, которую вы хотите реорганизовать, и используйте глобальную команду. Будут затронуты только матчи в отмеченном блоке. Если вы используете макросы, вам нужно либо нажимать @@
снова и снова до тех пор, пока вы не очистите блок, не подсчитаете точное количество раз, которое вы хотите запустить макрос, или установите большое число и заставите ошибку «без совпадения» остановить остановку. макро. Хотя третий вариант довольно прост в исполнении, он также довольно опасен - вам нужно убедиться, что шаблон отображается только в частях, которые вы хотите реорганизовать, - чтобы он не влиял на несвязанные части кода - и что рефакторинг удаляет его - в противном случае макрос будет снова и снова запускаться на одних и тех же строках.
Преимущество макросов в том, что их легче записывать. В сложном рефакторинге, подобном вашему, глобальная команда, которую вам нужно выполнить, может быть очень длинной и сложной. Макрос для выполнения того же действия такой же длинный и сложный, как и глобальная команда - но вы можете увидеть, как он работает, пока записываете его - гораздо проще, чем вычислять результат в своей голове при разработке глобальной команды.
К счастью, вы можете наслаждаться обоим миром!
Сначала вы записываете свой макрос, как объяснил в ответе cdleonard, с двумя основными отличиями.
Во-первых, первое нажатие клавиши в макросе должно быть ^
или _
- чтобы перейти к первому непробельному символу в строке (это означает, что вы начинаете с qq_
, а затем записываете как обычно) , Это гарантирует, что макрос запускается из правильного места в строке каждый раз.
Второе отличие состоит в том, что вам не нужно переходить к следующему фрагменту в конце макроса. Глобальная команда позаботится об этом за вас.
После того, как вы записали макрос (я предполагаю, что вы записали его в q
), отметьте все фрагменты, используя визуальный режим, и введите :g/^\s*ICar/norm @q
- это будет искать в отмеченном диапазоне все строки, начинающиеся с ICar
(возможно, с отступом перед ними) и выполняет макрос для них. Это предполагает, что все в диапазоне, который начинается с ICar
- и только в тех местах - это фрагменты, которые вы хотите реорганизовать. Если у вас есть строки, начинающиеся с ICar
, и вы не хотите выполнять рефакторинг, или если у вас есть строки, к которым вы хотите применить макрос, но они не начинаются с ICar
- вам придется изменить регулярное выражение.