2009-02-28 4 views
5

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

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

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

ПРИМЕЧАНИЕ: replacethis1, replacethis2, replacethis3, ... могут быть любые слова

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

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

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

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

ответ

6

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

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

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

Переход к следующему "replacethis", удар.,

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

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

+0

в зависимости от того, как вы переходите на разные слова, заменяемые словами, возможно, лучше использовать ciw (или caw) вместо cw. Чтобы работать, вы должны быть в начале replacethis. – user55400

0

Вы попробовали замену шнура?

%s/replacethis/copythis 

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

1
:%s/copythis/replacethis/g 

Чтобы заменить все экземпляры copythis с помощью replacethis. Или вы можете указать диапазон номеров строк, как:

:8,10 s/copythis/replacethis/g 

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

+0

См. Мой перефразированный вопрос –

+0

У вас есть два условия обратного. –

0

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

+0

См. Мой перефразированный вопрос –

1
  1. создать это отображение:

    : карта г cwcopythis^[

    (^ [является маскирующим, вы можете ввести его в Vim с помощью Ctrl + V Ctrl + [)

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

+0

Это не работает, так как dw перезаписывает буфер копирования –

+0

Он будет работать, это то же предложение, что и у меня, но оно создает настраиваемую привязку вместо использования встроенной команды dot. Вероятно, лучше использовать это, если вы не сразу замените все слова. –

+0

Я использовал dw изначально, но понял ошибку, как только я ударил пост, так что я его отредактировал :) – Adnan

4

Эта цифра должна быть включена, и там coul d больше, чем один экземпляр в каждой строке:

:%s/replacethis\d/copythis/g 
3

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

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

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

1

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

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

/copythis 
"rye 

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

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

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

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

0

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

EDIT: Сопоставление с m является плохой идеей, так как оно используется для обозначения местоположений. Но вы можете использовать, например. ; в любом случае.

 Смежные вопросы

  • Нет связанных вопросов^_^