Хотя бы раз в день бывает такая ситуация:
A: This line should also replace line X
...
X: This is line should be replaced
Я считаю, что не выполняю эту задачу эффективно.
Что я делаю:
- Перейти к строке A: AG
- Линия янки A: yy
- Перейти к строке X: XG
- Вставить строку A: P
- Перейти к старой строке: j
- Удалить старую строку: dd
Это имеет дополнительный недостаток , что линия X в настоящем время в реестре по умолчанию, которая раздражает , если я найду другую линию , которая должна быть заменена А. дергать , чтобы и наклеивая от дополнительного регистра ( «его , » аР ) делает эту простую задачу даже менее эффективны.
Мои вопросы:
- Пропустил ли я встроенную команду Vim для замены ранее удаленной строки?
- Если нет, как я могу привязать свою собственную команду, которая оставляет (или восстанавливает) извлеченную строку в регистре по умолчанию?
:move
и черная дыра регистр (_
) (или на самом деле, только регистры)Ответы:
Что бы я сделал:
aG
Y
xG
Vp
Вам не нужно выходить из нормального режима, но это действительно дергает линию. Однако вы можете использовать,
V"0p
который всегда будет дергать линию на шаге 2.источник
Y
это синонимyy
Y
является синонимом дляyy
, но я предлагаю изменить егоy$
на соответствиеD
иC
.Vp
: выберите строку, вставьте то, что было выдернутоисточник
VP
работает так же хорошо, что удобно, потому что вы можете удерживать Shift на протяжении всей последовательности.V"0p
, который вставляет из последнего извлеченного регистра.V"0p
делает? V переходит в режим визуальной линии, а p - для вставки. Что "и 0 для Thanks?Чтобы удалить текст, не затрагивая обычные регистры, вы можете использовать регистр черной дыры
"_
:источник
d
иdd
всегда использовать черную дыру, аx
иxx
выполнять то , что большинство редакторов назвали бы «вырезать» (удалить и сохранить в регистре по умолчанию):noremap x d
noremap xx dd
noremap d "_d
noremap dd "_dd
Основываясь на ответах, предлагающих использовать
Vp
илиVP
вставить строку - чтобы избежать изменения содержимого регистра восстановления, я считаю, что наиболее эргономичная команда проста:VPY
источник
источник
Я бы использовал режим командной строки (Ex) и выполнил следующие две команды
Это просто перемещает линию X чуть ниже A, затем удаление A перемещает эту линию вверх
Например
источник
Перейти к началу первой строки.
y, $- скопировать строку без разрыва строки в конце
Перейти к началу целевой линии.
V, p- заменить только одну целевую строку
c, c, Ctrlr, 0, Esc- заменить целевую строку с оригинальным рывком
Перейти к началу следующей целевой линии.
. - повторяет команду п. 4.2.
Ноты:
4.1 y, $потому что если вы делаете y, yили Yвы будете копировать разрыв строки, и Ctrlr, на 0самом деле добавляет разрыв строки ниже вашей целевой линии.
4.2 заменяет V p, что не работает с повтором, потому что технически последним действием является удаление, поэтому .будет просто удалить строку.
Если кто-нибудь знает, как выполнить команду «заменить текущую строку регистром» из режима EX (командная строка), я хотел бы услышать от вас (и узнать, где вы нашли документацию). Может быть повторяемая команда EX, которая быстрее, чем 4.2 и / или не имеет предупреждения о переносе строки.
источник
Вот что бы я сделал
источник
Вы можете использовать это в визуальном режиме.
A
GX
Gисточник
Вы также можете:
Одни и те же клавиши могут использоваться для вставки / вставки более чем одной строки.
источник
Вы можете использовать эти команды в нормальном режиме:
m
команда дляm[ove]
, которая перемещает номер строки А после строки с номером X, если вы хотите скопировать , а не переместить линию, использованиеco[py]
.d
команда дляd[elete]
.Вы можете перемещать (копировать с помощью
co
) диапазон строк, используяисточник
В свете недавнего комментария cicld (спасибо!) Я вижу, что не полностью понял исходную проблему. Перемещение строки не подходит, но копирование возможно (поскольку строка дергается). Поэтому я бы изменил его так:
Скопируйте 1-ю строку (
:t
команда является псевдонимом для:copy
) после строки 20 (поместит ее в строку 21)Удалите строку 20, поместив удаленную строку в регистр 'черной дыры' (
_
) (т.е. не затрагивая текущий буфер восстановления)Как упоминалось в недавнем комментарии, это не повлияет на текущую позицию курсора.
источник
источник
Я считаю, что для этого проще использовать команду Ex; ех. чтобы переместить строку 9 на 46:
Это переместит курсор на строку 46, переместит строку 9 ниже текущей, затем удалит предыдущую строку (поскольку перемещенная строка является текущей).
Или используя метку (метки), используя метку 'a':
источник
:1m20|.+1d
(переместите строку 1 в строку 20 и удалите следующую строку, т. Е. Текст, который ранее был в строке 20). Та же идея!Мне часто приходится использовать Y одну строку и заменять ее в нескольких местах, каждое из которых имеет другое значение (что означает, что я не могу выполнять регулярное выражение).
Y чтобы выдернуть желаемую исходную строку
а затем в каждой строке, которую вы хотите заменить, VpzeroY
источник
Я бы просто использовал регистр «Черная дыра»:
дано:
nnoremap <Cd> "_dd
решение было бы:
<Cd> гг
источник