В документации достаточно подробно изложена вставка в визуальном режиме. Удаленное содержимое будет всегда go в безымянный регистр (регистр по умолчанию).
Если вы хотите вставить один и тот же текст несколько раз, рекомендуется вместо этого использовать именованный регистр. Нажмите "the", используя "xyw
, чтобы вставить его в регистр "x", затем вставьте его, используя "xp
в визуальном режиме. Регистр "x
не будет затронут этой операцией.
Обратите внимание, что нумерованный регистр "0
действительно может быть здесь полезен, поскольку значение по умолчанию yank также переходит к "0
зарегистрироваться, но текст, замененный положением в визуальном режиме, попадает только в безымянный регистр и не изменяет "0
.
См. :help v_p
:
Ранее выбранный текст помещается в безымянный регистр. Если вы хотите поместить один и тот же текст в визуальный выбор несколько раз, вам нужно использовать другой регистр. Например, дерните текст для копирования, визуально выберите текст для замены и используйте "0p
. Вы можете повторять это столько раз, сколько хотите, безымянный регистр будет меняться каждый раз.
Другой вариант - переопределить это поведение, создавая пользовательские сопоставления.
Вы можете создавать сопоставления для операций p
и P
в визуальном режиме, которые будут сохранять и восстанавливать безымянный регистр до и после операции.
Эти функции и сопоставления будут выполнять следующие действия:
function! SaveReg(cmd) abort
let b:saved_reg = getreg('"')
let b:saved_type = getregtype('"')
return a:cmd.":\<C-U>call RestxyzoreReg()\r"
endfunction
function! RestoreReg() abort
call setreg('"', b:saved_reg, b:saved_type)
unlet b:saved_reg
unlet b:saved_type
endfunction
xnoremap <silent> <expr> p SaveReg('p')
xnoremap <silent> <expr> P SaveReg('P')