Vim копировать и вставлять - PullRequest
5 голосов
/ 28 февраля 2009

Мой предыдущий вопрос кажется немного двусмысленным, я перефразирую его:

У меня есть такой файл:

copythis abc
replacethis1 xyz
qwerty replacethis2
hasfshd replacethis3 fslfs
And so on...

ПРИМЕЧАНИЕ: заменить это1, заменить это2, заменить это3, ... могут быть любые слова

Как заменить слова "replacethis1", "replacethis2", "replacethis3", .. word на слово "copythis", используя минимальные команды vim

Один из способов, которым я могу это сделать, это следующие шаги:

  1. удалить "replacethis1", "replacethis2", "replacethis3", .., используя 'dw'
  2. скопировать "copythis", используя 'yw'
  3. переместите курсор туда, где был «replacethis1», и выполните «p»; переместите курсор туда, где был «replacethis2», и сделайте «p» и так далее ...

Есть ли лучший способ сделать это в VIM (используя меньшее количество команд vim)?

Ответы [ 9 ]

6 голосов
/ 28 февраля 2009

Поскольку вы изменили свой вопрос, я бы сделал это следующим образом:

Перейдите к первому «replacethis1» и введите cw (изменить слово), затем введите «copythis» вручную.

Перейти к следующему «заменить это», нажать. (повторите последнюю операцию)

Перейти к следующему "заменить это", нажмите.,

и так далее, и так далее.

Если «copythis» - маленькое слово, я думаю, что это лучшее решение.

4 голосов
/ 28 февраля 2009

Необходимо включить цифру, и в каждой строке может быть более одного экземпляра:

:%s/replacethis\d/copythis/g
3 голосов
/ 28 февраля 2009

Учитывая, что «replacethis [1-3]» может быть произвольными несвязанными словами, самый быстрый / простой способ сделать это глобально:

:%s/replacethis1\|replacethis2\|replacethis3/copythis/g

(Обратите внимание, что вам нужно использовать \ |, чтобы каналы работали как «или». В противном случае vim будет искать буквальный | символ.)

1 голос
/ 10 марта 2009

Я тоже долго боролся с этим, думаю, я просто разработал самый чистый способ:

Используйте любую команду, которая является наиболее чистой, чтобы скопировать это в регистр r:

/copythis
"rye

Затем перейдите к замене и замените ее содержимым r:

/replacethis
cw<CTRL-R>r<ESC>

Тогда вы можете просто n.n.n.n.n.n.n. для остальных или, если они сильно отличаются друг от друга, просто перейти к началу каждого и нажать .

Ключ заменяется и вставляется за один шаг, поэтому вы можете использовать . позже.

1 голос
/ 28 февраля 2009
  1. создать это отображение:

    : карта z cwcopythis ^ [

    (^ [это escape-символ, вы можете набрать его в vim используя Ctrl + V Ctrl + [)

  2. перейдите к каждому слову, которое хотите заменить, и нажмите z

1 голос
/ 28 февраля 2009
:%s/copythis/replacethis/g

Заменить все экземпляры этого экземпляра на замену этого. Или вы можете указать диапазон номеров строк, например:

:8,10 s/copythis/replacethis/g

Обратите внимание, что / g в конце скажет заменить все вхождения. Если вы оставите это, он просто сделает первый.

0 голосов
/ 18 октября 2013

Вы можете переназначить, например, Клавиша m в обычном режиме, чтобы удалить слово под курсором и вставить буфер: :nnoremap m "_diwP. Затем вы можете просто скопировать нужное слово, переместить курсор в любое место на заменяемое слово и ввести m.

РЕДАКТИРОВАТЬ: сопоставление с m является плохой идеей, поскольку оно используется для маркировки местоположений. Но вы можете использовать, например, ; в любом случае.

0 голосов
/ 28 февраля 2009

если вам нужно выполнить одно и то же действие несколько раз - поменяйте местами 1-е слово одной строки со вторым словом следующей строки, я говорю, что вы можете записать макрос и вызывать его всякий раз, когда вам нужно

0 голосов
/ 28 февраля 2009

Вы пробовали заменить строку?

%s/replacethis/copythis

Можно настроить множество других параметров для точной настройки замены. Погрузитесь в помощь Vim для более подробной информации. Еще несколько примеров здесь .

...