답변:
"{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()
p에 대한 non-nore vmap이있는 플러그인을 사용하지 않고 레지스터를 덮어 쓸 것으로 예상하는 한 괜찮습니다.
이 코드는 스크립트로 사용할 수 있습니다 . Ingo Karkat 은 동일한 문제를 해결 하는 플러그인 도 정의했습니다 .
regtype
(linewise?)를 기억하지 못할 것이며 p를 다시 매핑하는 pgvy
것으로 충분합니다.
"xp
이하지 덮어 쓰기 수행 @"
과 내용을 @x
달리pgvy
:xnoremap p pgv@=v:register.'y'<cr>
어때?
나는 삭제할 모든 텍스트 복사의 기본 정력 행동을 좋아하지 않아 d
, D
, c
, 또는 C
으로 기본 레지스터.
나는 , to 등 으로 매핑 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
다음을 사용하십시오.
xnoremap p pgvy
그러면 시각적 모드에서 붙여 넣은 모든 텍스트를 다시 선택하고 다시 잡아 당깁니다.
편집 :이 작업을 수행하려면 다음을 수행 "xp
할 수 있습니다.
xnoremap p pgv"@=v:register.'y'<cr>
v:register
일반 모드 명령에 사용 된 마지막 레지스터 이름으로 확장됩니다.
"xp
,이 방법은 덮어 쓰기 @"
로 @x
.
xnoremap p pgv"@=v:register.'y'<cr>
저에게 효과적이지 않았습니다. 이 그러나 않습니다 :xnoremap <expr> p 'pgv"'.v:register.'y'
g
시겠습니까? 전에 본 적이 없습니다.
g
혼자서는 아무것도하지 않습니다. .NET과 같은 확장 된 다중 키 명령을 제공합니다 z
. 예를 들어, go
버퍼 내의 n 번째 바이트로 진행 gj
하고 gk
다음 및 이전 표시 라인 (다를가는 jk
선이 감싸 때) ga
, 커서가 문자에 대한 정보를 디스플레이 gJ
공간이없이 선을 결합하고, 여기서 gv
마지막 영상 선택을 복원한다. 사용할 수 있습니다 :help gv
.
:xnoremap <expr> p 'pgv"'.v:register.'y`>'
, 나는 커서 위치 복원하려면``>```추가
당신의 .vimrc
xnoremap p "_dP
비슷한 스레드의 응답에서 이것을 찾았지만 원래 소스는 http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text 입니다. 몇 가지 단점을 언급하지만 잘 작동합니다.
.vimrc.local
역시 괜찮습니다.
Luc Hermitte의 솔루션은 매력처럼 작동합니다. 약 1 주일 정도 사용했습니다. 그런 다음 YankRing이 플러그인 / 번들 라인업의 일부인 경우 잘 작동하는 Steve Losh의 .vimrc 솔루션을 발견했습니다 .
function! YRRunAfterMaps()
" From Steve Losh, Preserve the yank post selection/put.
vnoremap p :<c-u>YRPaste 'p', 'v'<cr>gv:YRYankRange 'v'<cr>
endfunction
이것을 시도하십시오 ~/.vimrc
:
xnoremap <expr> p 'pgv"'.v:register.'y'
xnoremap
이것은 Visual
모드가 아닌 Visual + Select
모드 전용임을 의미 합니다.
<expr>
그 수단 {rhs}
의 xnoremap {lhs} {rhs}
설정 표현으로 평가된다.
이 경우의 표현은 연결에 'pgv"'.v:register.'y'
사용 .
됩니다.
v:register
매핑을 수행하는 동안 사용되는 레지스터로 평가됩니다.
의 결과 "xp
는로 평가되며 레지스터는 pgv"xy
어디에 있습니까 x
?
이 stackoverflow 질문에 대한 답변으로 도움을 받았습니다. Vim- 이 페이지에서 Benoit 의 답변 과 함께 선택적 레지스터 접두사 를 사용한 매핑
Luc의 기능은 내가 클립 보드 = unnamed 세트가 있다는 사실을 지원하기 위해 변경 한 후에 잘 작동했습니다.
function! RestoreRegister()
let @" = s:restore_reg
if &clipboard == "unnamed"
let @* = s:restore_reg
endif
return ''
endfunction
clipboard=unnamedplus
이것을 사용 하는 @+
대신 @*
.
Luc Hermitte가 트릭을했습니다! 정말 좋다. 여기에 그의 솔루션이 토글 기능에 포함되어 있으므로 정상적인 동작과 교체 불가 등록간에 전환 할 수 있습니다.
명령, 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>
silent! vunmap
대신에vnoremap <silent> <expr> p p
시도-
:set guioptions-=a
:set guioptions-=A