* 및 + 레지스터에 대한 사용자 정의 명령 정의


9

xterm_clipboard기능 과 함께 Vim 빌드를 사용하는 경우 시스템 클립 보드 컨텐츠를 +레지스터를 통해 사용할 수 있습니다 .

나는이 기능이없는 사용하고 빌드, 내가 할 수있는 경우 "+레지스터는 내 사용자 지정 프로그램을 검색하고 (시스템 클립 보드를 설정하는 전화 xsel -boxsel -bi함께, 또는 마찬가지로 xclip)? 이와 함께이 "*불러 xsel -poxsel -pi.

요점은 "+p기능을 사용할 수 있는지 걱정할 필요없이 같은 것을 입력 할 수 있어야한다는 것 입니다. 타자는 :r !xsel -b<Enter>내가 무엇을 찾고되지 않습니다 : 내가 작업에 동일한 키 입력을 원하고, 내가 붙여 넣기가 "true"로 등록 할 수 무엇을 따라 변형 할 ( P, gp, ...).

보너스 : 다른 레지스터 이름에 대한 사용자 정의 명령을 정의 할 수 있습니까?

답변:


7

몇 가지 <expr>매핑이 여기에서 작업을 수행 할 수 있어야합니다. 기본 구조는

function! ClipboardOrXclip(command, register)
    if a:register !~ '[+*]' || has('xterm_clipboard') || has('gui_running')
        " Just return the original command if the clipboard is accessible
        " or it's not a register that should be handled by xsel
        return a:command
    endif
    if a:register == '+'
        return "<Esc>:r !xsel -bo<CR>"
    else
        return "<Esc>:r !xsel -po<CR>"
    endif
endfunction

nnoremap <silent> <expr> p ClipboardOrXclip('p', v:register)

이 기능은 모든 변화 처리하기 위해 확장 될 필요가있을 것이다 p, P, gp, 등 그러나 이것은 좋은 시작해야한다.


이것은 올바른 궤도에있는 것처럼 보이지만 작동하지 않습니다. p앞에 나오는 "이름과 레지스터 이름이 없는 일반 "p은 상태 표시 줄에 make 이외의 다른 작업을 수행하지 않습니다 . "ap와 같습니다 a, "bp비프 음 ... 내가 논리를하지 않습니다. "+경고음 즉시, 난 내 말은 말을하지 않습니다 +또는 *레지스터 이름으로.
Gilles 'SO- 악마 그만해'

1
이러한 근본적인 문제가 해결되었다고 가정하면 재정의해야 할 명령 목록이 있습니까? 특히 king 킹을 지원하려는 경우 세트가 까다로워 보입니다.
Gilles 'SO- 악마 그만해'

@Gilles + / *가 아닌 레지스터의 동작을 수정하도록 업데이트되었습니다. "+vim이있을 때 의 문제 -xterm_clipboard는이 기능에 도달하지 않기 때문에 더 어렵습니다. 유효하지 않은 레지스터 ( +)를 지정하면 명령이 중단됩니다. 그래서, 행동이 실제로 반전되어야하는 것처럼 보이므로 "+or를 매핑 한 "*다음 사용자가 지정한 명령을 처리하십시오.
jamessan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.