В Vim есть соответствующая команда change (c) для paste (p)? - PullRequest
7 голосов
/ 06 марта 2012

С помощью вставок очень легко как стереть слово / раздел, так и вставить его, например,

  • cw удалить до конца слова (с пробелом), а затем перейти к вставкережим
  • ce удалить до конца слова (без пробела), затем перейти в режим вставки
  • c3w удалить до конца следующих 3 слов (с пробелом), затем перейти в режим вставки
  • ct. удалить до истечения периода, затем перейти в режим вставки
  • c$ удалить до конца строки, затем перейти в режим вставки

Как мне сделатьэто с операциями вставки?Часто у меня есть такая строка

var name = "John Smith"
var name = "Jane Smith"

И я меняю ее на

var name = "John Lee"
var name = "Jane Smith"

И дергаю (yw) "Ли", но теперь, если я удаляю (dw) «Смит» из «Джейн Смит», у меня больше нет «Ли» в реестре для вставки обратно.Я знаю, что могу использовать именованные регистры.Также я уверен, что могу использовать визуальный режим.Тем не менее, я решил, что, поскольку это довольно распространенная задача, можно было бы использовать операторы движения (e, w, t / T, f / F, $, 0) с командой вставки, чтобы указать, что вставлять.

Ответы [ 4 ]

14 голосов
/ 06 марта 2012

Я думаю, визуальный способ - это путь. Вы просто включаете визуальный режим с помощью v или V (если вы хотите перезаписать целые строки за раз), используйте операторы движения обычным способом, чтобы выбрать область для замены и затем вставьте. Вы используете то, что уже знаете.

V p перезаписывает текущую строку. v w p заменяет текущее слово.

Обзор альтернатив можно найти на Vim Wikia .

10 голосов
/ 06 марта 2012

О, да, вам нужен ультра удобный (сарказм) регистр черной дыры: выберите в визуальном режиме часть, которую вы хотите заменить, используя нужное вам движение (например, vw), затем " _ х P .

Регистр черной дыры _ - это специальный регистр, похожий на /dev/null. Операция " устанавливает регистр назначения для текста, который вы собираетесь заменить, и, таким образом, "_ гарантирует, что нежелательный «Смит» попадет в регистр черной дыры. Таким образом, «Ли» сохраняется в регистре ". Я бы порекомендовал использовать макросы, если вы делаете это много раз подряд.

4 голосов
/ 06 марта 2012
I no longer have "Lee" in the register to paste back.

На самом деле, Lee находится в reg:0, есть как минимум два способа вставить обратно.

Метод 1

  • переместить курсор на Lee, yw
  • переместить курсор на Smith, dw
  • "0P

Метод 2

  • переместить курсор на Lee, yw
  • переместить курсор на Smith, cw
  • Ctrl-R + 0
0 голосов
/ 07 марта 2012

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

nnoremap ,pw viw"0p

Который вставляет поверх inner word (iw) последнего восстановленного текста. Обратите внимание, что я использую регистр 0, поэтому я могу вставить столько раз, сколько захочу, не теряя набранный текст. К сожалению, вам нужно написать некоторые другие сопоставления. Мне нравится иметь отображение для вставки inside quote, inside brackets и inside parentheses:

nnoremap ,pi" vi""0p
nnoremap ,pi] vi]"0p
nnoremap ,pi) vi)"0p
...