Como posso fazer com que o vim copie o texto para o buffer da área de transferência da tela do GNU?

5

Eu quero arrancar o texto com um comando para vim e terminá-lo na área de transferência da tela, onde ele pode ser colado em um aplicativo diferente via ^ A] depois. O vim precisa fazer a cópia (não o modo de cópia da tela) porque eu tenho mais texto do que caberia na tela ao mesmo tempo.

Respostas para outras perguntas < um href="https://superuser.com/questions/477294/simple-way-to-copy-text-from-vim-to-system-buffer"> ter abordado esta questão, mas eles confiam principalmente em usar as interfaces + e * do vim na área de transferência do X, que é não disponível para aplicativos iniciados remotamente ou não na presença de uma sessão X para começar. Estou trabalhando com o puTTY, mas isso é incidental, já que eu só quero transferir entre as telas e não [necessariamente] sair para o local.

A melhor coisa seria a existência de um buffer mágico no vim que se conecta à tela, mas eu vou ouvir soluções alternativas:)

    
por gws 31.07.2014 / 23:56

1 resposta

3

Se algumas teclas extras não incomodarem você, não vejo problema.

O registro de copiar e colar da GNU Screen ( . ) pode ser lido de / escrito para o arquivo fora de uma caixa: <C-a>< e <C-a>> são atalhos padrão, /tmp/screen-exchange é um arquivo padrão, mas eu prefiro um usuário específico, em vez de todo o sistema, então eu configuraria algo assim em .screenrc :

setenv BUFFERFILE "$HOME/.buffer" 
bufferfile "$BUFFERFILE"

O Vim não possui tais comandos prontos, mas não há dificuldade em criá-los e mapeá-los para o que você quiser, e. g. <leader>< e <leader>> respectivamente:

if exists("$BUFFERFILE")
    nnoremap <silent><leader>< :let @" = join(readfile($BUFFERFILE), "\n")<CR>
    nnoremap <silent><leader>> :call writefile( split(@", "\n"), $BUFFERFILE )<CR>
endif

Se eles o incomodarem, no entanto, torna-se um pouco mais complicado - tanto quanto entendido, você tem que:

  • remapear todos os possíveis yank, cut (já que não há nenhum evento autocmd ao alterar determinado registro) e colar (já que é o único gatilho viável) atalhos no Vim - nada complexo mas tedioso - espero que você saiba como fazer isso ;
  • remapear dois atalhos no GNU Screen: enquanto colar um é bem óbvio:

     bind ] eval readbuf "paste ."
    

    puxar um - <Return> ou <Space> em um modo de cópia especial apresenta uma dificuldade para mim.

por 01.08.2014 / 01:20