Как бы вы сделали вырезать и вставить с этим в 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
Другие вопросы по тегам