"{register}p
не будет работать, как Вы описываете. Это заменит выбор содержанием регистра. Необходимо будет вместо этого сделать что-то как:
" I haven't found how to hide this function (yet)
function! RestoreRegister()
let @" = s:restore_reg
return ''
endfunction
function! s:Repl()
let s:restore_reg = @"
return "p@=RestoreRegister()\<cr>"
endfunction
" NB: this supports "rp that replaces the selection by the contents of @r
vnoremap <silent> <expr> p <sid>Repl()
, Который должен быть прекрасным, пока Вы не используете плагин, который имеет non-nore vmap к p, и это ожидает, что регистр будет перезаписан.
Этот код доступен как сценарий там . Ingo Karkat также определил плагин решение той же проблемы.
попробуйте -
:set guioptions-=a
:set guioptions-=A
Мне не нравится поведение vim по умолчанию при копировании всего текста, удаленного с помощью d
, D
, c
или C
в регистр по умолчанию.
Я обошел его, сопоставив d
с "_ d
, c
с ] "_ c
и т. д.
Из моего .vimrc:
"These are to cancel the default behavior of d, D, c, C
" to put the text they delete in the default register.
" Note that this means e.g. "ad won't copy the text into
" register a anymore. You have to explicitly yank it.
nnoremap d "_d
vnoremap d "_d
nnoremap D "_D
vnoremap D "_D
nnoremap c "_c
vnoremap c "_c
nnoremap C "_C
vnoremap C "_C
Люк Эрмитт сделал свое дело! Действительно хорошо. Вот его решение, помещенное в функцию переключения, поэтому вы можете переключаться между нормальным поведением и помещением без замены регистра.
команда u переключает поведение
let s:putSwap = 1
function TogglePutSwap()
if s:putSwap
vnoremap <silent> <expr> p <sid>Repl()
let s:putSwap = 0
echo 'noreplace put'
else
vnoremap <silent> <expr> p p
let s:putSwap = 1
echo 'replace put'
endif
return
endfunction
noremap ,p :call TogglePutSwap()<cr>