Definir comandos personalizados para os registros * e +

9

Se eu estiver usando uma compilação do Vim com o xterm_clipboardrecurso, o conteúdo da área de transferência do sistema estará disponível através do +registro.

Se a compilação que estou usando não tiver esse recurso, posso fazer o "+registro chamar meus programas personalizados para recuperar e definir a área de transferência do sistema ( xsel -boe xsel -bi, ou da mesma forma xclip)? Da mesma forma com "*a chamada xsel -poe xsel -pi.

O ponto é poder digitar algo como "+psem ter que se preocupar se o recurso está disponível. Digitação :r !xsel -b<Enter>não é o que eu estou procurando: Eu quero os mesmos combinações de teclas para o trabalho, e eu quero a pasta variantes de seguir o que está disponível para “verdadeiros” registros ( P, gp...).

Bônus: posso definir comandos personalizados para outros nomes de registro?

Gilles 'SO- parar de ser mau'
fonte

Respostas:

7

Alguns <expr>mapeamentos devem ser capazes de fazer o trabalho aqui. A estrutura básica seria

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)

A função terá de ser expandido para lidar com todas as variações de p, P, gp, etc., mas isso deve ser um bom começo.

jamessan
fonte
Parece estar no caminho certo, mas não está funcionando. Uma planície p(sem um "nome anterior e de registro) não faz nada além de make "paparecer na linha de status. "apé equivalente a a, "bpemite um sinal sonoro,… eu não entendo a lógica. "+bipes imediatamente, nem preciso dizer o que quero dizer +ou *como um nome de registro.
Gilles 'SO- stop be evil'
11
Supondo que esses problemas fundamentais sejam resolvidos, há uma lista exaustiva de comandos que eu precisaria substituir? O conjunto parece assustador, especialmente se eu também quiser apoiar os puxões.
Gilles 'SO- stop be evil'
@Gilles Atualizado para corrigir o comportamento com registros não - + / *. O problema de "+quando o vim tem -xterm_clipboardé mais difícil, porque nunca chega a essa função. A especificação de um registro inválido ( +) interrompe o comando. SO, parece que o comportamento realmente tem de ser invertido de modo mapear a "+ou "*e depois lidar com o comando especificado pelo usuário ...
jamessan