문제

기본 레지스터에 선택하지 않고 시각적으로 선택된 영역에 붙여 넣는 방법을 알고 있습니까?

나는 명백한 레지스터에서 항상 붙여 넣어 문제를 해결할 수 있다는 것을 알고 있습니다. 하지만 목에 통증이 "엑스 그냥 대신

도움이 되었습니까?

해결책

"{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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top