레지스터를 덮어 쓰지 않고 붙여 넣는 방법
기본 레지스터에 선택 항목을 배치하지 않고 시각적으로 선택한 영역 위에 붙여 넣는 방법을 아는 사람이 있습니까?
항상 명시 적 레지스터에서 붙여 넣어 문제를 해결할 수 있다는 것을 알고 있습니다. 하지만 "xp그냥 입력하는 것이 아니라 목에 통증 이 있습니다.p
"{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 은 동일한 문제를 해결 하는 플러그인 도 정의했습니다 .
나는 삭제할 모든 텍스트 복사의 기본 정력 행동을 좋아하지 않아 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
일반 모드 명령에 사용 된 마지막 레지스터 이름으로 확장됩니다.
당신의 .vimrc
xnoremap p "_dP
비슷한 스레드의 응답에서 이것을 찾았지만 원래 소스는 http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text 입니다. 몇 가지 단점을 언급하지만 잘 작동합니다.
Luc Hermitte's solution works like a charm. I was using it for about a week or so. Then I discovered a solution from Steve Losh's .vimrc that works nicely if YankRing is part of your plugin/bundle lineup:
function! YRRunAfterMaps()
" From Steve Losh, Preserve the yank post selection/put.
vnoremap p :<c-u>YRPaste 'p', 'v'<cr>gv:YRYankRange 'v'<cr>
endfunction
Try this in your ~/.vimrc
:
xnoremap <expr> p 'pgv"'.v:register.'y'
xnoremap
means that this is only forVisual
mode, notVisual + Select
modes.<expr>
means that{rhs}
of thexnoremap {lhs} {rhs}
setting is evaluated as an expression.In this case, our expression of
'pgv"'.v:register.'y'
is using.
for concatenation.v:register
is evaluated to the register being used during the fulfillment of the mapping.
The result of "xp
would evaluate to pgv"xy
, where x
is the register.
I was helped by an answer to this stackoverflow question: Vim - mapping with an optional register prefix in conjunction with Benoit's answer on this page
Luc's function worked well for me after I made a change to support the fact that I have clipboard=unnamed set:
function! RestoreRegister()
let @" = s:restore_reg
if &clipboard == "unnamed"
let @* = s:restore_reg
endif
return ''
endfunction
Luc Hermitte's did the trick! Really good. Here's his solution put in a toggle function, so you can switch between normal behavior and no-replace-register put.
the command ,u toggles the behavior
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>
try -
:set guioptions-=a
:set guioptions-=A
참고URL : https://stackoverflow.com/questions/290465/how-to-paste-over-without-overwriting-register
'programing' 카테고리의 다른 글
(! [] + []) [+ []]… 작동 이유 설명 (0) | 2020.08.15 |
---|---|
Lambda 식 및 일반 메서드 (0) | 2020.08.15 |
GitHub 트래픽 그래프에 자체 뷰가 포함되어 있습니까? (0) | 2020.08.15 |
변경 로그 / 감사 데이터베이스 테이블을위한 최상의 디자인? (0) | 2020.08.15 |
NSUserDefaults는 Appstore의 앱 업데이트를 통해 유지됩니까? (0) | 2020.08.15 |