Как вставить, не перезаписывая регистр

103
задан Justin Johnson 3 August 2017 в 20:03
поделиться

4 ответа

"{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 также определил плагин решение той же проблемы.

29
ответ дан 3 revs 24 November 2019 в 04:21
поделиться

попробуйте -

:set guioptions-=a
:set guioptions-=A
-4
ответ дан Gowri 24 November 2019 в 04:21
поделиться

Мне не нравится поведение 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
38
ответ дан 24 November 2019 в 04:21
поделиться

Люк Эрмитт сделал свое дело! Действительно хорошо. Вот его решение, помещенное в функцию переключения, поэтому вы можете переключаться между нормальным поведением и помещением без замены регистра.

команда 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>
2
ответ дан 24 November 2019 в 04:21
поделиться