문제
기본 레지스터에 선택하지 않고 시각적으로 선택된 영역에 붙여 넣는 방법을 알고 있습니까?
나는 명백한 레지스터에서 항상 붙여 넣어 문제를 해결할 수 있다는 것을 알고 있습니다. 하지만 목에 통증이 "엑스피 그냥 대신 피
해결책
"{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에 최신 VMAP가없는 플러그인을 사용하지 않고 레지스터를 덮어 쓰기를 기대하는 한 괜찮습니다.
이 코드는 스크립트로 제공됩니다 거기. Ingo Karkat도 정의했습니다 플러그인 같은 문제를 해결합니다.
다른 팁
삭제 된 모든 텍스트를 복사하는 기본 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
다음을 사용하십시오.
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의 솔루션은 매력처럼 작동합니다. 나는 약 일주일 정도 그것을 사용하고있었습니다. 그런 다음 솔루션을 발견했습니다 Steve Losh의 .vimrc Yankring이 플러그인/번들 라인업의 일부라면 다음과 같이 잘 작동합니다.
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- 옵션 레지스터 접두사를 사용한 매핑함께 베노이트대답 이 페이지에서
Luc의 기능은 클립 보드 = 이름이없는 세트가 있다는 사실을 뒷받침하기 위해 변경 한 후에 나에게 잘 작동했습니다.
function! RestoreRegister()
let @" = s:restore_reg
if &clipboard == "unnamed"
let @* = s:restore_reg
endif
return ''
endfunction
Luc Hermitte 's는 트릭을했습니다! 정말 좋다. 그의 해결책은 토글 함수에 넣은 솔루션이므로 정상적인 동작과 부상하지 않은 등록을 전환 할 수 있습니다.
명령은 행동을 전환합니다
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>
노력하다 -
:set guioptions-=a
:set guioptions-=A