Vim: Замена строки другой, выдернутой раньше - PullRequest
99 голосов
/ 26 декабря 2010

Как минимум один раз в день у меня следующая ситуация:

A: This line should also replace line X
...
X: This is line should be replaced

Я считаю, что не справляюсь с этой задачей эффективно.

Что я делаю:

  • Перейти к строке A: AG
  • Линия янки A: гг
  • Перейти к строке X: XG
  • Вставить строку A: P
  • Перейти к старой строке: j
  • Удалить старую строку: dd

Это имеет дополнительный недостаток, заключающийся в том, что строка X теперь находится в регистре по умолчанию, что раздражает, если я нахожу другую строку, которая должна быть заменена на A. Янкинг и вставка из дополнительного регистра ( "ayy, "aP ) делает эту простую задачу еще менее эффективной.

Мои вопросы:

  • Я пропустил встроенную команду Vim для замены строки, которую выдернули раньше?
  • Если нет, как я могу связать свою собственную команду, которая оставляет (или восстанавливает) восстановленную строку в регистре по умолчанию?

Ответы [ 16 ]

92 голосов
/ 11 января 2014

Vp: выбрать строку, вставить то, что было выдернуто

81 голосов
/ 26 декабря 2010

Что бы я сделал:

  1. aG
  2. Y
  3. xG
  4. Vp

Вам не нужно выходить из нормального режима, но он делает дергает линию. Тем не менее, вы можете использовать V"0p, который всегда будет указывать на рывок в шаге 2.

43 голосов
/ 27 декабря 2010

Это имеет дополнительный недостаток эта строка X теперь по умолчанию зарегистрироваться, что раздражает, если я найду другая строка, которая должна быть заменена с А.

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

"_dd
9 голосов
/ 24 мая 2013
  1. ггг
  2. j (перейти к строке, которую вы хотите заменить), а затем
  3. Vp (верхний регистр v, а затем p, заменит содержимое с восстановленным содержимым)
9 голосов
/ 28 января 2012

Я бы использовал режим командной строки (Ex) и выполнял следующие две команды

:XmA
:Ad

Это просто перемещает строку X чуть ниже A, затем удаление A перемещает эту строку вверх

Например

:7m3
:3d
6 голосов
/ 26 августа 2013
  1. Перейти к началу первой строки.

  2. y , $ - скопировать строку без конца строки

  3. Перейти к началу целевой линии.

    1. V , p - заменить только одну целевую линию

    2. c , c , Ctrl r , 0 , Esc - заменить целевую линию оригинальным янки

  4. Перейти к началу следующей целевой строки.

  5. . - повторяет команду, введенную в 4.2.

Примечания:

  • 4.1 - это y , $ , потому что если вы сделаете y , y или Y Вы скопируете разрыв строки, и Ctrl r , 0 фактически добавляет разрыв строки ниже целевой линии.

  • 4.2 заменяет V p , который не работает с повтором, поскольку технически последнее действие - удаление, поэтому . просто удалит линия.

  • Если кто-нибудь знает, как выдать «заменить текущую строку регистром» из режима EX (командная строка), я хотел бы услышать от вас (и узнать, где вы нашли документацию). Может быть повторяемая команда EX, которая быстрее, чем 4.2, и / или не имеет предупреждения о разрыве строки.

4 голосов
/ 26 декабря 2010

Вы можете использовать это в визуальном режиме.

  • Перейти к строке A: A G
  • Выбрать строку в визуальном режиме: V ESC
  • перейти к строке X: X G
  • Ввести режим замены для строки: S
  • Вставьте скопированную строку: shift + insert (или любое другое отображение, которое вы используете для вставки из буфера обмена).
3 голосов
/ 31 марта 2017

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

VPY

3 голосов
/ 26 декабря 2010

Вот что я бы сделал

  • Переместить начало строки A, A G (где A, очевидно, номер строки)
  • Снять строку с каким-либо регистром, например, (без новой строки). Тип " a y $
  • Переместить для вставки строки, X G
  • Замена строки, S
  • Вставить из регистра а, Ctrl-R a
2 голосов
/ 25 августа 2018

Вы также можете сделать:

Vy (in normal mode at the line you want to copy)
Vp (in normal mode at the line you want to replace)
  • Не создает пробелов или концов строк.
  • Курсор помещается в начале скопированного текста.

Одни и те же клавиши можно использовать для вставки / вставки нескольких строк.

V (in normal mode at what you want to yank)
(use jk to move the selection)
y (to yank the selection)
V (in normal mode at where you want to paste)
(use jk to move the selection)
p (to replace the selection with the yanked lines)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...