Como fazer o vim colar de (e copiar para) a área de transferência do sistema?

Ao contrário de outros editores, o vim armazena o texto em sua própria área de transferência. Portanto, é muito difícil copiar algum texto de uma página da Web e colá-lo no arquivo de trabalho atual. Acontece que eu tenho que abrir o gedit ou digitá-lo manualmente.

Posso fazer pasta vim de e para a área de transferência do sistema?

   

Os registradores "* e "+ são para a área de transferência do sistema ( :help registers ). Dependendo do seu sistema, eles podem fazer coisas diferentes. Por exemplo, em sistemas que não usam o X11 como o OSX ou o Windows, o registrador "* é usado para ler e gravar na área de transferência do sistema. Nos sistemas X11, ambos os registros podem ser usados. Consulte :help x11-selection para mais detalhes, mas basicamente o "* é análogo à seleção PRIMARY do X11 (que normalmente copia as coisas que você seleciona com o mouse e cola com o botão do meio do mouse) e "+ é análogo à seleção CLIPBOARD do X11 (que é a prancheta apropriada).

Se tudo isso passar por cima da sua cabeça, tente usar "*yy ou "+yy para copiar uma linha para a área de transferência do seu sistema. Supondo que você tenha as opções de compilation apropriadas, uma ou outra deve funcionar. Você pode gostar de remapear isso para algo mais conveniente para você. Por exemplo, você poderia colocar o vnoremap "*y em seu ~ / .vimrc para que possa visualmente selecionar e pressionar Ctrl + c para arrastar para a área de transferência do seu sistema.

Esteja ciente de que copiar / colar da área de transferência do sistema não funcionará se :echo has('clipboard') retornar 0. Neste caso, o vim não é compilado com o recurso +clipboard e você terá que instalar uma versão diferente ou recompilar isto. Algumas distribuições linux fornecem uma instalação mínima do vim por padrão, mas geralmente, se você instalar o pacote vim-gtk , você pode obter os resources extras.

Você também pode querer dar uma olhada na opção 'clipboard' descrita em :help cb . Nesse caso, você pode :set clipboard=unnamed ou :set clipboard=unnamedplus para fazer todas as operações de :set clipboard=unnamedplus / excluir copiarem automaticamente para a área de transferência do sistema. Isso pode ser uma inconveniência em alguns casos em que você está armazenando outra coisa na área de transferência, pois ela será substituída.

Para colar você pode usar "+p ou "*p (novamente, dependendo do seu sistema e / ou seleção desejada) ou você pode mapeá-los para outra coisa. Eu os digito explicitamente, mas muitas vezes me encontro no modo de inserção. Se você estiver no modo de inserção, ainda poderá colá-los com o recuo adequado usando * ou + . Veja :help i_CTRL-R_CTRL-P .

Também vale a pena mencionar a opção de paste do vim ( :help paste ). Isso coloca o vim em um “modo de colar” especial que desabilita várias outras opções, permitindo que você cole facilmente no vim usando o emulador de terminal ou o atalho de pasta familiar do multiplexador. Basta digitar :set paste para ativá-lo, colar seu conteúdo e digitar :set nopaste para desativá-lo. Como alternativa, você pode usar a opção pastetoggle para definir um código de chave que alterna o modo ( :help pastetoggle ). Eu recomendo o uso de registradores em vez destas opções, mas se eles ainda são muito assustadores, isso pode ser uma solução conveniente enquanto você está aperfeiçoando seus comandos de vim.

Consulte :help clipboard de :help clipboard para obter informações mais detalhadas.

Você pode copiar para o vim. Faça o arquivo no modo de inserção e use Ctrl + Shift + v . Lembre-se de antemão

  :set paste 

para evitar mexer com a identificação …

Linux

No meu sistema Linux, os registros + e * mapeiam para uma seleção X11, que pode ser colada com o botão do meio do mouse. Quando :set clipboard=unnamed e :set clipboard=unnamedplus são usados, então os registradores mapeiam para a área de transferência e podem ser colados com CTRL-V.

As especificidades parecem ser um pouco dependentes da configuração e do sistema, pelo que a sua quilometragem variará definitivamente. Isso definitivamente deve levá-lo apontado na direção certa, no entanto.

Veja também

http://vim.wikia.com/wiki/Accessing_the_system_clipboard

Para minha configuração que funciona para copiar e colar

 " copy and paste vmap  "+yi vmap  "+c vmap  c"+p imap  "+pa 

Estas seriam as linhas que você precisa no seu vimrc para esse propósito:

 set clipboard+=unnamed " use the clipboards of vim and win set paste " Paste from a windows or from vim set go+=a " Visual selection automatically copied to the clipboard 

prancheta

Existe um registro especial para armazenar esta seleção, é o registro “*. Nada é colocado aqui, a menos que as informações sobre o texto selecionado mudem (por exemplo, com o clique esquerdo do mouse em algum lugar) ou quando outro aplicativo desejar. cole o texto selecionado e o texto é colocado no registro “*. Por exemplo, para cortar uma linha e fazer a seleção atual / colocá-la na CLIPBOARD:

  "*dd 

Da mesma forma, quando você deseja colar uma seleção de outro aplicativo, por exemplo, clicando no botão do meio do mouse, a seleção é colocada no “* primeiro registro, e depois ‘colocar’ como qualquer outro registro. Por exemplo, para colocar a seleção (conteúdo da CLIPBOARD):

  "*p 

registra E354

 > There are nine types of registers: > 1. The unnamed register "" > 2. 10 numbered registers "0 to "9 > 3. The small delete register "- > 4. 26 named registers "a to "z or "A to "Z > 5. four read-only registers ":, "., "% and "# > 6. the expression register "= > 7. The selection and drop registers "*, "+ and "~ > 8. The black hole register "_ > 9. Last search pattern register "/ 

Colar da área de transferência

 1. Clipboard: Copy 2. Vim insertmode, middle mouse key 

Verifique o suporte da área de transferência X11 no terminal

Quando você gosta de rodar o Vim em um terminal, você precisa procurar por uma versão do Vim que tenha sido compilada com o suporte da área de transferência. Verifique o suporte do X11-clipboard, no console, digite:

 % vim --version 

Se você ver “+ xterm_clipboard”, você está pronto para ir.

http://vim.wikia.com/wiki/Accessing_the_system_clipboard

O servidor X mantém três seleções, chamadas:

PRIMARY, SECONDARY e CLIPBOARD

A seleção PRIMARY é convencionalmente usada para implementar a cópia e colagem através do botão do meio do mouse. As seleções SECONDARY e CLIPBOARD são usadas com menos frequência pelos programas aplicativos.

http://linux.die.net/man/1/xsel

Tentei as sugestões acima e nenhuma delas funcionou no meu ambiente. (Windows PuTTY clone por ssh)

Algum googling adicional apareceu: https://unix.stackexchange.com/questions/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard

Um dos comentários sugeridos usando SHIFT+INSERT que fez o truque para colar da área de transferência do meu desktop no buffer do Vim. Ctrl-C já estava trabalhando para copiar para a área de trabalho da área de trabalho do Vim.

Eu acredito que esta questão merece uma resposta mais objetiva.

Entrando no Modo Colar

  • ESC
  • : set colar
  • pressione i
  • SHIFT + Inserir (com um texto copiado na sua área de transferência)

Deixando o modo de colagem

  • ESC
  • : conjunto nopaste
  • pressione i

Você colou o texto e pode digitar novamente.

Não tive + prancheta então eu vim com esta solução alternativa usando xsel:

Adicione ao seu ~ / .vimrc:

vnoremap :w !xsel -b

Uma nota rápida para pessoas cuja instalação vim não suporta os registros * e +. Não é necessário baixar uma nova instalação do vim para colar a partir da área de transferência. Aqui está um método alternativo:

1) Instale parcellite (um gerenciador de clipboard com pouca pegada de memory);

2) No seu arquivo .vimrc, adicione o seguinte:

 command Clip r !parcellite -c 

3) Reinicie o vim.

Agora quando você digita: Clip como um comando ex, o conteúdo da área de transferência será colado no cursor. Você também pode mapear o novo comando para uma tecla de function para poder fazer isso com um pressionamento de tecla.

Isso funciona para mim: Ctrl + Shift + V

Na sequência da resposta de Conner, o que foi ótimo, mas CR Cp + e CR Cp * no modo de inserção é um pouco inconveniente. Ditto "*p e "+p do modo de comando.

um guru do VIM sugeriu o seguinte para mapear Cv para o que o Cr Cp + faz.

Você poderia ter :inoremap "+p somente para modo de inserção

se você realmente queria replace o modo visual de bloqueio (não recomendado por ele como o modo visual é bom) você poderia ter o map "+p

No topo da configuração :set clipboard=unnamed , você deve usar o mvim -v que você pode obter com o brew install macvim se você estiver usando o vim no Terminal.app no ​​Mac OS X 10.9. O vim padrão não suporta a opção da área de transferência.

Também pode valer a pena mencionar, no OSX usando o Vim, você pode selecionar texto com o mouse, Cmd-C para copiar para a área de transferência do sistema OSX, e o texto copiado estará disponível na área de transferência fora do Vim.

Em outras palavras, o OSX trata como se fosse uma janela comum, e é aí que o tão falado botão “Comando” da Apple é útil.

B-30

Com base na resposta @ lis2, uso uma configuração mais simples que não forçará o modo Insert no final:

 " Copy and paste if has('clipboard') && !has('gui_running') vnoremap  "+y vnoremap  "+d vnoremap  "+p inoremap  + endif 

Lembre-se de que tudo isso substitui os mapeamentos padrão do Vim:

  • v_CTRL-C : parar o modo visual
  • v_CTRL-X : subtrai [count] do número
  • v_CTRL-V : modo visual de v_CTRL-V
  • i_CTRL-V : insira o próximo dígito não literal, que também é mapeado para i_CTRL-Q

Como alternativa, pode-se usar chaves inspiradas nos verbos “yank”, “delete” e “put” do Vim: , e respectivamente. Estes apenas replaceiam um mapeamento padrão:

  • i_CTRL-P : palavra-chave de pesquisa inversa para conclusão

O que você realmente precisa é do EasyClip . Vai fazer isso e muito mais …

Quando eu uso o Debian vim que não está integrado ao Gnome (vim –version | grep clip # não mostra suporte à área de transferência), eu posso copiar para a área de transferência depois de segurar a tecla Shift e selecionar o texto com o mouse, como com qualquer outro programa de maldições. Como eu percebi em um comentário de @Conner, é o terminal (gnome-terminal no meu caso) que desativa o relatório de events do mouse quando detecta minha tecla Shift. Eu acho que programas baseados em curses podem receber events de mouse depois de enviar uma certa seqüência de escape para o terminal.

Se você estiver no Windows e quiser colar o conteúdo da área de transferência do sistema usando p , digite este comando.

 :set clipboard = unnamed 

Isso resolveu meu problema.

Existem duas maneiras simples de fazer isso. Faça o seu arquivo no modo de inserção e 1) pressione o botão do meio (a roda de rolagem) no seu mouse, ou 2) Ctrl + Shift + V

Para alguns teclados internacionais, talvez seja necessário pressionar " + Espaço para obter um " .

Então, nesses casos, você teria que pressionar " Espaço + y ou " Espaço * y para copiar.

E " Espaço + p ou " Espaço * p para colar.

Se você estiver usando o vim no MAC OSX, infelizmente ele vem com a versão mais antiga e não está de acordo com as opções da área de transferência. Felizmente, o homebrew pode resolver facilmente este problema.

instale o vim:

brew install vim --with-lua --with-override-system-vim

instalar a versão do vim:

brew install macvim --with-lua --with-override-system-vim

reinicie o terminal para entrar em vigor.

acrescente a seguinte linha a ~/.vimrc
set clipboard=unnamed

Agora você pode copiar a linha no vim com yy e colá-la em todo o sistema.

As outras soluções são boas se você quiser mudar o seu vimrc, etc … No entanto, eu queria uma maneira simples de copiar do vim para o teclado do meu sistema. Isso é o que eu criei.

  • Selecione o texto que você deseja copiar com o modo visual v
  • Pressione : (ele será expandido automaticamente para mostrar :'< ,'> )
  • Digite y * ou y + (dependendo do sistema) para puxar o texto selecionado para a área de transferência do sistema

A solução mais simples para isso, que também funciona entre diferentes máquinas Linux através do ssh é:

  1. Verifique se o vim suporta a área de transferência X-11: vim --version | grep clipboard vim --version | grep clipboard . Se reportar back -clipboard e -xterm_clipboard você deve instalar o vim-gtk ou o vim-gnome (gvim no arch linux)

  2. Adicione as seguintes linhas ao seu .vimrc :

 set clipboard=unnamedplus set paste 
  1. Se você entrar em uma máquina diferente via ssh, use a opção -Y: ssh -Y machine

Agora, copiar e colar deve funcionar exatamente como esperado em uma única e em diferentes máquinas, usando apenas y para yank e p para colar. NB modificar .vimrc em todas as máquinas onde você deseja usar este recurso.

Se você está usando um mouse primeiro

  :set paste 

Em seguida, right click mouse e o conteúdo no buffer será colado