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> 

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

  • zsh не работает при завершении пути, когда команда vim
  • gvim -p предел открытых вкладок?
  • Ошибка Vim E138: не удается написать файл viminfo $ HOME / .viminfo!
  • Vim: заменить на другой матч в строке
  • Предлагаемая настройка для сверхлегкой текстовой среды программирования в Linux
  • Повторное нажатие клавиш в «представлении каталога» vim
  • Могу ли я / как указать цвета в шестнадцатеричном или RGB в конфигурации подсветки nano-синтаксиса?
  • ack выполнен через vim
  • Как вызвать редактор vim и вывод канала в bash
  • Найти все вхождения 5 цифр после десятичной дроби, добавить цифру
  • Vim, контекстно-зависимое поведение комментариев / неудобств
  • Interesting Posts

    В чем разница между списком ls> list и ls >>?

    Является ли Ubuntu LTS бинарным, совместимым с Debian?

    Предотвращение наручных цветов

    Развертывание libs в жестко закодированном каталоге

    Kde Panel Launcher Files Location?

    find, xargs и mv: переименование файлов с двойными кавычками, расширение и проблема с приоритетом bash

    Правила брандмауэра IPv6, похоже, препятствуют всем подключениям

    Как узнать, когда был установлен пакет?

    Поддерживает ли GNOME 3 увеличение рабочего стола?

    Linux Mint – Проблемы при выполнении скриптов через Geany

    Как увеличить максимальное пространство подкачки в Mac OS X?

    Как искать много файлов с регулярным выражением и выводами соответствует строкам в новом файле?

    CDE: как правильно преобразовать jpeg-образ в xpm для использования на обоях?

    Обрезка строк в Bash

    Будет ли резервное копирование и восстановление с помощью dd разрешить повреждение файловой системы?

    Linux и Unix - лучшая ОС в мире.