vim – как я могу «изменить слово» с помощью текущего пастообразного буфера

У меня есть текст в моем буфере пасты, например, я сделал yw (yank word), и теперь у меня есть «foo» в моем буфере.

Теперь я перехожу к слову «бар», и я хочу заменить его на свой буфер.

Чтобы заменить текст вручную, я мог бы сделать cw а затем ввести новое слово.

Как я могу «изменить слово», но использовать содержимое моего пастообразного буфера вместо того, чтобы вручную вводить заменяющее слово?

Лучший вариант, который у меня есть сейчас, – это перейти к началу слова, которое я хочу заменить, и сделать dw (удалить слово), затем перейти на другое место и сделать yw (yank word), а затем вернуться в зону замены и сделать p (паста), которая является довольно неуклюжей, особенно если они не находятся на одном экране.

6 Solutions collect form web for “vim – как я могу «изменить слово» с помощью текущего пастообразного буфера”

Опция 1

Вы можете использовать регистры, чтобы сделать это и сделать ключевое слово для процесса.

Yank слово, которое вы хотите заменить yw .

Якованное слово находится в регистре 0 который вы можете увидеть, выпустив :registers .

Перейдите к слову, которое вы хотите заменить, и сделайте cw . Сделайте Ctrl + r, а затем 0, чтобы вставить регистр 0 .

Карта для этого будет выглядеть примерно так (предполагая Ctrl + j в качестве нашей ключевой комбинации):

:map <Cj> cw<Cr>0<ESC>

Вариант 2 (проще)

Когда ваше слово дергается, наведите курсор на слово, которое вы хотите заменить, и сделайте v i w p . Который является внутренним словом визуального выбора и вставкой.

Предоставлено @tlo в комментариях: вы могли бы просто сделать v e p . Один символ короче. Даунсайд должен позиционировать курсор в начале слова и (как и мой) изменяет буфер.

Комментарий (от Майкла):

Это хорошо. Дополнительное примечание: второй метод действительно проще, но, как есть, работает только для ОДНОЙ подстановки, потому что после каждой подстановки буфер затем изменяется на заменяемое поле (старый текст). Первый метод немного сложнее использовать, но имеет преимущество, что буфер 0 остается «как есть», поэтому вы можете использовать этот метод для выполнения более одной замены одного и того же текста.

yw чтобы вырвать ваше слово, затем переместите курсор на слово, которое вы хотите заменить, и используйте "_dw чтобы удалить его, отправив текст в нулевой регистр (чтобы он не перезаписывал содержимое " регистра », где дернулось / вырезано текст по умолчанию), а затем просто вставьте с помощью p .

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

 nnoremap <leader>d "_d 

… поэтому в нормальном режиме вы можете использовать \dw для удаления слова, не затрагивая " регистр».

Мне нужно это так часто, я написал плагин, чтобы упростить и разрешить максимальную скорость: ReplaceWithRegister .

Этот плагин предлагает команду «два-в-одном», которая заменяет текст, охватываемый {motion} / текстовым объектом, целыми линиями (линиями) или текущим выбором с содержимым регистра; старый текст удаляется в регистр черных дыр, т. е. он ушел. Он прозрачно обрабатывает многие угловые шкафы и позволяет быстро повторять по стандарту . команда. Если вам это не нравится, на его странице есть ссылки на альтернативы.

Чтобы повторить вставку, используйте команду изменения.

cw ^ R 0 ESC (^ R = Control + R; 0 для регистра 0)

заменит слово содержимым из reg. 0, и давайте повторим его .

Это отлично подходит для cgn (VIM 7.4) для замены шаблонов поиска:

  • Первый поиск с / или *
  • cgn ^ R 0 ESC
  • , повторить в следующем матче или n, чтобы пропустить

Поскольку он еще не включен, вы обычно заменяете строки :%s/.../.../ и вы можете сделать это со словом под вашим курсором.

  1. Вы вводите первую часть команды, что вы ищете :s/find/
  2. Затем нажмите <ctrl-r> и выберите с помощью курсора слово, которое вы хотите заменить.
  3. Затем вы нажимаете <ctrl-w> (небольшое слово) или <ctrl-a> (большое слово), чтобы вставить слово под курсором в командную строку
  4. Затем вы завершите команду.

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

Я использую этот плагин для расширения области выделения: https://github.com/terryma/vim-expand-region

Поэтому моя комбинация для изменения слова будет: vvp в любом месте слова.

У меня также есть взлом для сохранения содержимого неназванного регистра после вставки, поэтому я могу повторить это.

 vnoremap pp:let @"=@0 <CR> vnoremap PP:let @"=@0 <CR> 

(мой буфер настроен автоматически)

  • Vim - как заменить одну новую строку \ n двумя \ n
  • vim: сопоставить WORD в текущем блоке со сбалансированными скобками
  • Vim: Создание XML-текста «довольно»
  • Почему эти два vim autocmd перекрывают друг друга?
  • Запись перед курсором
  • Почему «ESC» перемещает курсор обратно в vim?
  • Обтекание текста электронной почты способом, совместимым с форматом = flowed, например, с использованием параметра par
  • Отображать и редактировать строки, соответствующие конкретному шаблону в vi
  • Изменение поведения gVim в Red Hat
  • Как я могу установить мой .vimrc, какую ОС я использую?
  • Быстрые клавиши Vim в режиме вставки
  • Linux и Unix - лучшая ОС в мире.