По умолчанию команды вставки используют "
регистр («без имени») . По сути, любая команда, которая записывает данные в регистр, также записывает данные в неназванный регистр, так что все изменения, изменения и изменения на нее влияют. Вот почему ваша последовательность yank-delete-paste вставляет удаленный текст вместо восстановленного.
0
Регистр может помочь здесь. Любые команды янки, которые не указывают регистр, помещают янкированный текст в регистр 0
(в дополнение к "
). На него не влияют операции удаления или изменения, так что вы можете использовать его для вставки рваной строки несколько раз, даже если вы выполняете промежуточное удаление или изменение.
yy
: Регистры 0
и "
оба теперь имеют выдернутую линию.
- Перейти к строке для замены.
dd
: Регистр "
теперь имеет удаленную строку, но регистр 0
все еще имеет восстановленную строку.
"0P
: Вставить первоначально выдернутую строку из регистра 0
.
- Перейдите к следующей строке для замены.
dd"0P
(так же, как и выше)
(Из-за того, как позиционирование курсора работает при замене последней строки буфера, вы можете использовать "0p
вместо "0P
.)
Это очень близко к ответу Брюса Эдигера , за исключением того, что вам не нужно указывать регистр при первом взлете. Использование одного или нескольких именованных регистров может быть очень удобным, хотя, если вам нужно (например) заменить некоторые строки на AAA
, а другие - на BBB
(поместить AAA
в регистр a
и BBB
в регистр b
(или оставить один из них в регистре 0
), затем вставьте их соответствующим образом ).
Вы также можете вставить в 0
в визуальном режиме линейного мудр ( V
) , чтобы сохранить нажатие клавиши: V"0p
.
Если вам не нравится вводить текст "0
, вам может показаться более удобным отображение:
noremap <Leader>p "0p
noremap <Leader>P "0P
vnoremap <Leader>p "0p
Альтернативный подход заключается в удалении в _
регистр («черная дыра») . Когда вы удаляете в него, на "
регистр это не влияет, поэтому ваша последовательность yank-delete-paste все равно может вставить полученный текст из безымянного регистра.
yy
: Зарегистрируйтесь, 0
и у "
обоих теперь есть оторванная строка.
"_dd
: Без изменений в регистрах.
P
: Вставить первоначально выдернутый текст из регистра "
.
Опять же, вы можете найти отображение более удобным:
noremap <Leader>d "_d
yy
(перейти к строке для замены)S<C-r>0<Esc>
. Преимущество повторяемости с.
командой.