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 ]

2 голосов
/ 23 июня 2018

В свете недавнего комментария cicld (спасибо!) Я вижу, что не полностью понял исходную проблему. Перемещение строки не подходит, но копирование (так как строка выдернута). Поэтому я бы изменил это на:

:1t20:20d_
  1. Скопировать 1-ю строку (команда :t является псевдонимом для :copy) после строки 20 (поместит ее в строку 21)

  2. Удалить строку 20, поместив удаленную строку в регистр 'blackhole' (_) (т.е. не влияет на текущий буфер янки)

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

2 голосов
/ 07 июня 2013

Вы можете использовать эти команды в обычном режиме:

:AmX | Xd

команда m предназначена для m[ove], которая перемещает номер строки A после номера строки X, если вы хотите скопировать вместо перемещения строку, используйте co[py]. команда d предназначена для d[elete].

Вы можете перемещать (копировать, используя co) диапазон строк, используя

:start,end m X
1 голос
/ 21 октября 2014

Мне часто нужно Y одной строки и заменить ее в нескольких местах, каждое из которых имеет свое значение (что означает, что я не могу сделать регулярное выражение).

Y чтобы восстановить желаемую исходную строку

и затем в каждой строке, которую вы хотите заменить, V p ноль Y

1 голос
/ 20 февраля 2014

Мне проще использовать команду Ex для этого; ех. переместить строку 9 на 46:

 :46|9m.|-1d

Это переместит курсор в строку 46, переместит строку 9 ниже текущей, затем удалите предыдущую строку (поскольку перемещенная строка является текущей).

Или используя знак (-и), используя знак 'a':

:46ma a|9m'a|'ad
1 голос
/ 12 августа 2013
  1. : ay (где a - номер строки. Пример: 20y).Это дергает линию (каламбур).
  2. Vp
0 голосов
/ 12 марта 2014

Я бы просто использовал регистр "Черная дыра":

Дано:

nnoremap "_dd

решение будет:

гг

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...