Diferentemente de outros editores, o vim armazena o texto copiado 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 colar o vim de e para a área de transferência do sistema?
sudo apt-get install vim-gnome
que adicionará essa funcionalidade ao vim embutido do uso da área de transferência do sistema.vim-gnome
provavelmente é um exagero ou simplesmente não está disponível em seus sistemas operacionais / distros, enquanto eu suspeitovim-gtk
e, de preferência,vim-gtk3
é mais provável que exista e puxe menos dependências, enquanto ainda fornece integração com a área de transferência (pelo menos para os que ainda estão no X11; Não tenho certeza de como tudo isso interage com Wayland).Respostas:
Os registros
"*
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 OSX ou Windows, o"*
registro é usado para ler e gravar na área de transferência do sistema. Nos sistemas X11, ambos os registros podem ser usados. Veja:help x11-selection
mais detalhes, mas basicamente"*
é análogo à seleção PRIMARY do X11 (que geralmente copia as coisas selecionadas com o mouse e cola com o botão do meio do mouse) e"+
é análogo à seleção CLIPBOARD do X11 (que é a área de transferência apropriada).Se tudo isso passou pela sua cabeça, tente usar
"*yy
ou"+yy
copiar uma linha na área de transferência do seu sistema. Supondo que você tenha as opções de compilação apropriadas, um ou outro deve funcionar. Você pode remapear isso para algo mais conveniente para você. Por exemplo, você pode colocarvnoremap <C-c> "*y
seu ~ / .vimrc para selecionar visualmente e pressionar Ctrl+ cpara puxar a área de transferência do sistema.Esteja ciente de que copiar / colar da área de transferência do sistema não funcionará se
:echo has('clipboard')
retornar 0. Nesse caso, o vim não é compilado com o+clipboard
recurso e você terá que instalar uma versão diferente ou recompilar. Algumas distribuições linux fornecem uma instalação mínima do vim por padrão, mas geralmente se você instalar o pacotevim-gtk
ouvim-gtk3
, poderá obter os recursos extras.Você também pode querer dar uma olhada na
'clipboard'
opção descrita em:help cb
. Nesse caso, você pode:set clipboard=unnamed
ou:set clipboard=unnamedplus
fazer com que todas as operações de puxar / excluir copiem automaticamente para a área de transferência do sistema. Isso pode ser um inconveniente em alguns casos em que você está armazenando outra coisa na área de transferência, uma vez que a substituirá.Para colar, você pode usar
"+p
ou"*p
(novamente, dependendo do seu sistema e / ou seleção desejada) ou pode mapeá-los para outra coisa. Eu os digito explicitamente, mas geralmente me encontro no modo de inserção. Se você estiver no modo de inserção, ainda poderá colá-los com o recuo adequado usando<C-r><C-p>*
ou<C-r><C-p>+
. Veja:help i_CTRL-R_CTRL-P
.Também vale mencionar a
paste
opção do vim (:help paste
). Isso coloca o vim em um "modo de colagem" especial que desativa várias outras opções, permitindo colar facilmente no vim usando o emulador de terminal ou o atalho de colagem familiar do multiplexador. Simplesmente digite:set paste
para habilitá-lo, cole seu conteúdo e digite:set nopaste
para desativá-lo. Como alternativa, você pode usar apastetoggle
opção para definir um código de chave que alterna o modo (:help pastetoggle
). Eu recomendo o uso de registradores em vez dessas opções, mas se eles ainda forem muito assustadores, isso pode ser uma solução conveniente enquanto você aperfeiçoa seus recursos do vim.Veja
:help clipboard
para informações mais detalhadas.fonte
"*p
? Pressiono Shift- ', depois Shift-8, depois p, etc.?dd
por exemplo. O primeirod
entra no modo pendente do operador, depois o segundod
termina o comando e exclui a linha. Se você digitardG
, no entanto,G
ele o excluirá no final do arquivo, em vez de apenas excluir a linha. Os registradores usam esse mesmo princípio para permitir que vários comandos os usem.vim-gtk
pacote (no Debian, pelo menos), para obter o vim que é compilado+xterm_clipboard
. Levei 40 minutos para descobrir isso, e apenas alguns segundos parasudo apt-get install vim-gtk
.vim-gnome
também funciona e foi+xterm_clipboard
ativado.Você pode copiar para o vim usando o atalho do gnome-terminal para colar. Faça o arquivo no modo de inserção e use
Ctrl+ Shift+ v.
Lembre-se de
para evitar mexer com o recuo.
fonte
Linux
No meu sistema Linux, os registros
+
e são*
mapeados 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, os registradores são mapeados para a área de transferência e podem ser colados com CTRL-V.As especificidades parecem um pouco dependentes da configuração e do sistema, portanto sua milhagem definitivamente varia. Definitivamente, você deve apontar na direção certa.
Veja também
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
fonte
*
mapeia para o registro primário X11 (que normalmente é colado pelo mouse).+
mapeia para o registro da área de transferência do X11 normalmente colado por atalhos.*
para primário e+
para área de transferência registros X11, você pode ver isso na fonte vim: estes valores são definidos lá e nunca modificado, eclip_star
eclip_plus
são sempre utilizados para*
e+
registros, respectivamente.Para o meu, essa configuração funciona para copiar e colar
fonte
Estas seriam as linhas que você precisa no seu vimrc para este propósito:
fonte
Eu acredito que esta pergunta merece uma resposta mais objetiva e gráfica:
Como entrar no modo de colagem
Saindo do modo de colagem
Você colou o texto e pode digitar novamente.
fonte
:set nopaste
não faz nada. O que isso deve fazer? Por que eu preciso disso?:set nopaste
, você está dizendo ao editor que não deseja mais colar. E quando você batei
, você está retornando ao modo de edição :).prancheta
Há um registro especial para armazenar esta seleção, é o registro "*. Nada é colocado aqui, a menos que as informações sobre o texto selecionado estejam prestes a mudar (por exemplo, com um clique esquerdo do mouse em algum lugar) ou quando outro aplicativo deseja cole o texto selecionado e, em seguida, o texto é colocado no registro "*. Por exemplo, para cortar uma linha e fazer a seleção atual / colocá-la na CLIPBOARD:
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 registro "* primeiro e depois em 'colocar' como qualquer outro registro. Por exemplo, para colocar a seleção (conteúdo do CLIPBOARD):
registra E354
Colar da área de transferência
Verifique o suporte da área de transferência X11 no terminal
Quando você gosta de executar o Vim em um terminal, precisa procurar uma versão do Vim que foi compilada com o suporte da área de transferência. Verifique o suporte da área de transferência do X11, no console, digite:
Se você vir "+ xterm_clipboard", estará pronto.
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
http://linux.die.net/man/1/xsel
fonte
Tentei as sugestões acima e nenhuma delas funcionou no meu ambiente. (Windows PuTTY clone sobre ssh)
Apareceram alguns buscas adicionais: /unix/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard
Um dos comentários sugeriu o uso de
SHIFT+INSERT
qual fez o truque para colar da área de transferência da área de trabalho no buffer do Vim.Ctrl-C
já estava trabalhando para copiar para a área de transferência da área de trabalho do Vim.fonte
SHIFT+INSERT
funciona porque é a opção de colar para o seu terminal (ou, no seu caso, PuTTY); no entanto, o recuo provavelmente estará errado. Confira o último parágrafo da minha resposta sobre apaste
opção de corrigir isso.SHIFT+INS
funciona de um host linux para o ssh vim, assim como o terceiro clique do mouse.Não tinha + área de transferência, então eu vim com esta solução alternativa usando o xsel:
Adicione ao seu ~ / .vimrc:
vnoremap <C-C> :w !xsel -b<CR><CR>
fonte
vnoremap <C-C> :w !xclip -i -sel c<CR><CR>
Uma observação rápida para pessoas cuja instalação do vim não suporta os registros * e +. Não é necessário fazer o download de uma nova instalação do vim para colar da área de transferência. Aqui está um método alternativo:
1) Instale o parcellite (um gerenciador de área de transferência com pouca memória);
2) No seu arquivo .vimrc, adicione o seguinte:
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 função para poder fazer isso com um toque de tecla.
fonte
Isso funciona para mim: Ctrl+ Shift+V
fonte
A solução mais simples para isso, que também funciona entre diferentes máquinas Linux,
ssh
é:Verifique se suportes vim X-11 da área de transferência:
vim --version | grep clipboard
. Se ele relatar-clipboard
e-xterm_clipboard
você deve instalarvim-gtk
ouvim-gnome
(gvim no arch linux)Adicione as seguintes linhas ao seu
.vimrc
:ssh -Y machine
Agora, copiar e colar deve funcionar exatamente como esperado em uma única máquina e em diferentes máquinas, usando apenas
y
para arrancar ep
colar. Nota: modifique.vimrc
em todas as máquinas em que você deseja usar esse recurso.fonte
Corri para esse problema em um meados de 2017 Macbook Pro running
vim
dentroiTerm2
como meu ambiente de desenvolvimento primário.Como outras respostas sugeriram, corri
vim --version
e notei que ela retorna-clipboard
, o que significa que a versão davim
que foi enviada com a minha máquina não foi compilada com a opção da área de transferência.O
homebrew
pacote paravim
parece compilar com aclipboard
opção, portanto, a correção para mim foi:brew install vim
set clipboard+=unnamed
ao meu~/.vimrc
arquivoiTerm2
fonte
Copiar para área de transferência do SO
Selecione o texto no modo visual, pressione
"*y
Colar da área de transferência do SO
pressione
"*p
fonte
Seguindo a resposta de Conner, que foi ótima, mas
C-R C-p +
eC-R C-p *
no modo de inserção é um pouco inconveniente. Idem"*p
e"+p
do modo de comando.um guru do VIM sugeriu o seguinte para mapear o
C-v
queC-r C-p +
faz.fonte
Se você estiver usando o vim no MAC OSX, infelizmente ele vem com a versão mais antiga e não cumpre as opções da área de transferência. Felizmente, o homebrew pode facilmente resolver esse problema.
instale o vim:
brew install vim --with-lua --with-override-system-vim
instale a versão gui 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
yy
e colá-la em todo o sistema.fonte
Se você estiver usando um mouse, primeiro
Em seguida,
right click mouse
o conteúdo do buffer será coladofonte
Na parte superior da configuração
:set clipboard=unnamed
, você deve usar omvim -v
que pode obterbrew install macvim
se 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.fonte
Também vale a pena mencionar que, no OSX usando o Vim, você pode selecionar o 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 é aqui que o botão "Comando" da Apple, muito difamado, é útil.
B-30
fonte
Com base na resposta @ lis2, uso uma configuração mais simples que não forçará o modo Inserir no final:
Lembre-se de que todos esses substituem os mapeamentos padrão do Vim:
v_CTRL-C
: parar o modo visualv_CTRL-X
: subtrair [contagem] do númerov_CTRL-V
: modo visual em blocosi_CTRL-V
: insira literalmente o próximo dígito, que também é mapeado parai_CTRL-Q
Como alternativa, pode-se usar as teclas inspirados no "puxão", "Excluir" e "put" Vim verbos:
<C-y>
,<C-d>
e<C-p>
respectivamente. Eles substituiriam apenas um mapeamento padrão:i_CTRL-P
: busca reversa da palavra-chave para conclusãofonte
As outras soluções são boas se você deseja alterar seu vimrc, etc ... No entanto, eu queria uma maneira simples de copiar do vim para o teclado do sistema. Isto é o que eu vim com.
v
:
(ele será expandido automaticamente para mostrar:'<,'>
)y *
ouy +
(dependendo do seu sistema) para puxar o texto selecionado para a área de transferência do sistemafonte
O que você realmente precisa é do EasyClip . Ele fará exatamente isso e muito mais ...
fonte
Como o vim 8, o botão direito do mouse ativa o modo visual por padrão. Isso evita a cópia e colagem "normais" (chame-o de "defeito por design" https://github.com/vim/vim/issues/1326 ). Corrija-o fazendo:
echo "set mouse-=a" >> ~/.vimrc
.Saia e reinicie o vim.
fonte
Com o Vim 8+ no Linux ou Mac, agora você pode simplesmente usar a pasta nativa do SO (
ctrl+shift+V
no Linux,cmd+V
no Mac). Não pressionei
para inserir o modo.Ele colará o conteúdo da área de transferência do sistema operacional, preservando os espaços e as guias sem adicionar a inserção automática. É equivalente ao velho
:set paste
,i
,ctrl+shift+V
,esc
,:set nopaste
método.Você nem precisa mais dos recursos
+clipboard
ou do+xterm_clipboard
vim instalados. Esse recurso é chamado de "pasta entre colchetes". Para obter mais detalhes, consulte Desativando o recuo automático ao colar texto no vimfonte
Quando eu uso meu Debian vim que não está integrado ao Gnome (vim --version | grep clip # não mostra suporte à área de transferência), posso copiar para a área de transferência depois de pressionar a tecla Shift e selecionar o texto com o mouse, como qualquer outro outro programa de maldições. Como imaginei em um comentário do @Conner, é o terminal (gnome-terminal no meu caso) que desliga os relatórios de eventos do mouse quando detecta minha pressão Shift. Eu acho que programas baseados em maldições podem receber eventos de mouse depois de enviar uma certa sequência de Escape para o terminal.
fonte
Se você estiver no Windows e desejar colar o conteúdo da área de transferência do sistema usando
p
, digite este comando.Isso resolveu meu problema.
fonte
Existem duas maneiras simples de fazer isso. Crie seu arquivo no modo de inserção e 1) pressione o botão do meio (a roda de rolagem) do mouse ou 2) Ctrl + Shift + V
fonte
Para alguns teclados internacionais, pode ser necessário pressionar "+ Spacepara obter a
"
.Então, nesse caso, você teria que pressionar "Space+you "Space*ycopiar.
E "Space+pou " Space*ppara colar.
fonte
Usei a resposta do NM Pennypacker e instalei o vim via homebrew para um MacBook Pro de 2011:
Agora também posso usar o "* register para copiar e colar texto no vim. Eu nem precisei alterar algo no meu arquivo ~ / .vimrc ou no $ PATH. O Homebrew adicionou links simbólicos em / usr / local / bin, por exemplo vim -> ../Cellar/vim/8.1.2350/bin/vim.
A alternativa, que funcionou antes, é copiar algumas linhas de texto no vim, marcando-o com o mouse e usando copiar e colar (cmd + c, cmd + v) em um mac. Esta opção funciona apenas se o texto que você deseja copiar e colar tiver tamanho menor que o tamanho da janela do vim. Se você deseja copiar todo o texto no vim marcando a janela inteira ou usando cmd + a, isso copiará outras partes do console, escritas antes de iniciar o vim, o que é muito irritante.
Então, estou feliz por ter encontrado o novo método usando o registro da área de transferência.
fonte