Как бы вы сделали вырезать и вставить с этим в VIM? - PullRequest
3 голосов
/ 21 октября 2011

Скажем, у вас был этот текст:

SOMETHING_XXXXXXXXXXXXXX_ELSE
SOMETHING_XXXXXXXXXXXXXX_ELSE2
SOMETHING_XXXXXXXXXXXXXX_ELSE3
SOMETHING_XXXXXXXXXXXXXX_ELSE4

И вы хотели заменить все XXX..XXX на это слово:

HELLOWORLD

Если я перехожу в визуальный режим, затем дергаю слово, как я могу затем заменить XXX..XXX в 4 строках выше, используя вырезать и вставить?

Если я попытаюсь, то случится так, что Х попадет в мой «буфер обмена», а затем я просто наберу его вручную.

Ответы [ 5 ]

4 голосов
/ 22 октября 2011

Я не уверен, что это будет работать в viemu, но в VIM вы можете сделать следующее ...

Используя Yank и Paste

Янкитекст в конкретный регистр.Выделите текст в визуальном режиме и используйте команду "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;
1 голос
/ 21 октября 2011

Один из способов - визуально выбрать весь код, который вы хотите заменить, и изменить его сразу

Ctrl + v 3jt_cHELLOWORLD [Esc]

Примечание: обновление всех строк занимает пару секунд

Другой способ - создать макрос:

макрос записи:

q10fXct_HELLOWORLD [esc] q

запустить макрос на других строках:

j @ 1j @ 1j @ 1

q1 записывает макрос для символа 1

@ 1 повторяет макрос

Но поиск и замена - хорошая альтернатива для вашего вопроса

0 голосов
/ 21 октября 2011

Предполагая, что все "XXX..XXX" одинаковы.Вопрос там неясен ..
Если вы хотите сделать это глобально

:%s/XXX..XXX/HELLOWORLD/gc

Или просто для указанных строк:

:123,128s/XXX..XXX/HELLOWORLD/gc
0 голосов
/ 21 октября 2011

С помощью этого вопроса: Как использовать регистры vim? Я обнаружил, что ^ R в командном режиме вставит из регистра.

Например, с выделенным XXXX, затем вытащенным в регистр: : S / ^ R "/ HelloWorld / г

0 голосов
/ 21 октября 2011

Выделите четыре строки в визуальном режиме, затем

:'<,'>s/X\+/HELLOWORLD/g
...