Как бы вы сделали вырезать и вставить с этим в VIM?
Скажем, у вас был этот текст:
SOMETHING_XXXXXXXXXXXXXX_ELSE
SOMETHING_XXXXXXXXXXXXXX_ELSE2
SOMETHING_XXXXXXXXXXXXXX_ELSE3
SOMETHING_XXXXXXXXXXXXXX_ELSE4
И ты хотел заменить все XXX..XXX
с этим словом:
HELLOWORLD
Если я перехожу в визуальный режим, то дергаю слово, как я мог тогда заменить XXX..XXX
в 4 строки выше, используя вырезать и вставить?
Если я попытаюсь, то произойдет, если X попадет в мой "буфер обмена", и я застряну, чтобы просто набрать его вручную.
5 ответов
Я не уверен, будет ли это работать в viemu, но в VIM вы можете сделать следующее...
Использование янки и вставки
Янкировать текст в конкретный регистр. Выделите текст в визуальном режиме и используйте команду "ay
вытащить текст в реестр a
, Затем при вставке вызовите команду "ap
, который вставляет содержимое a
регистр.
Использование нормальной команды
Но я бы сильно предпочел использовать обычную команду. Просто выберите линии
SOMETHING_XXXXXXXXXXXXXX_ELSE
SOMETHING_XXXXXXXXXXXXXX_ELSE2
SOMETHING_XXXXXXXXXXXXXX_ELSE3
SOMETHING_XXXXXXXXXXXXXX_ELSE4
используя линейный визуальный режим (<C-v>
) и затем выполните эту команду: :'<,'>normal fXct_HELLOWORLD
, Тогда у вас будет
SOMETHING_HELLOWORLD_ELSE
SOMETHING_HELLOWORLD_ELSE2
SOMETHING_HELLOWORLD_ELSE3
SOMETHING_HELLOWORLD_ELSE4
Это означает, что он запустит команду fXct_HELLOWORLD
для каждой строки. Позвольте мне объяснить команду:
- fX - перемещает курсор до первого X;
- ct_ - удаляет все до _ и переводит вас в режим вставки;
- HELLOWORLD - слово, которое заменит XXXXXXXXXXXXXX;
Одним из способов было бы визуально выбрать весь код, который вы хотите заменить, и изменить его сразу
Ctrl+v 3jt_cHELLOWORLD[Esc]
Примечание: обновление всех строк занимает пару секунд
Еще один способ создать макрос:
макрос записи:
q10fXct_HELLOWORLD [ESC] д
запустить макрос на других строках:
J @1к @1к @1
q1 записывает макрос на символ 1
@1 повторяет макрос
Но поиск и замена - хорошая альтернатива для вашего вопроса.
Предполагая, что все "XXX..XXX" одинаковы. Вопрос там неясен..
Если вы хотите сделать это глобально
:%s/XXX..XXX/HELLOWORLD/gc
Или только для указанных строк:
:123,128s/XXX..XXX/HELLOWORLD/gc
С помощью этого вопроса: Как я могу использовать регистры Vim? Я нашел ^R в командном режиме вставит из регистра.
Например, с выделенным XXXX, затем вытащил в "регистр::s/^R"/HELLOWORLD/g
Выделите четыре строки в визуальном режиме, затем
:'<,'>s/X\+/HELLOWORLD/g