Como copiar as linhas selecionadas para a área de transferência no vim

Respostas:

107

SHIFTVcoloca você no modo de seleção de linhas. Em seguida, "*ypuxa as linhas atualmente selecionadas para o *registro que é a área de transferência. Existem alguns registros diferentes, para finalidades diferentes. Consulte a seção selection and drop registerspara obter detalhes sobre as diferenças entre *e +registros no Windows e Linux.

Spencer Rathbun
fonte
10
No Linux, + é a área de transferência global, * é a área de transferência de seleção, enquanto no Windows ambos mapeiam para a área de transferência global.
Mohnish de
74

Se você estiver no Linux e estiver usando um VIm versão 7.3.74 ou superior (a versão que é instalada no Ubuntu 11.10 em diante satisfaz isso), você pode fazer

set clipboard=unnamedplus

que colocará o texto puxado na área de transferência global e permitirá que você cole da área de transferência global, sem ter que usar nenhum registro especial. Ao contrário da solução da ldigas, isso também funcionará em versões não-gui do VIm.

Suan
fonte
8
Isso só funciona se eu instalar o vim-gnomepacote em vez de vim.
dan-klasson
4
@ dan-klasson: esta opção requer um vim que foi compilado com suporte para área de transferência. Você pode verificar se este é o caso digitando vim --version | grep "+xterm_clipboard".
BenC
Isso parece funcionar para copiar em outros programas não-vim, mas quando eu entro no modo de inserção no vim e uso "shift + insert" para colar da área de transferência, apenas as duas primeiras linhas são coladas ... Eu instalei o vim-gnome ; estou faltando alguma coisa?
t2k32316
2
Se você estiver no macOS, provavelmente precisará usar clipboard=unnamed( vim.wikia.com/wiki/Accessing_the_system_clipboard )
streof
13
set guioptions+=a

irá, ... uhmm, resumindo, sempre que você selecionar / puxar algo, coloque-o na área de transferência também (não no do Vim, mas no teclado global do sistema de janelas). Dessa forma, você não precisa pensar em colocar as coisas em um registro especial.

Torre
fonte
2
//, A quais sistemas operacionais e / ou versões do Vim esse conselho se aplica?
Nathan Basanese,
10

Para GVIM, pressione vpara entrar no modo visual; selecione o texto e clique Ctrl+Insertpara copiar a seleção para a área de transferência global.

No menu, você pode ver que a tecla de atalho é, "+you seja, segure a tecla Shift, pressione ", +depois solte Shift e pressione y(complicado em comparação a Shift + Insert).

Mohnish
fonte
Por que essa resposta não é popular? :(
Ankit Shubham
6

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

instale o vim:

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

instale o gui verion do vim:

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

reinicie o terminal para ter efeito.

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.

anônimo
fonte
//, acabei de testar isso no OSX 10.12.3 e funcionou corretamente depois que instalei o Vim mais recente e a versão da GUI mais recente do Vim, como você recomendou aqui. Obrigado, @anonymous.
Nathan Basanese
4

Instale "xclip" se você não ...

sudo apt-get install xclip

O Xclip coloca os dados na área de transferência "seleção / realçada" que você clica com o botão do meio para colar em oposição a "ctrl + v"

Enquanto estiver no vim, use os comandos ex:

7w !xclip

ou

1,7w !xclip

ou

%w !xclip

Em seguida, clique com o botão do meio para colar em qualquer outro aplicativo ...

user3512967
fonte
4

Se o vim for compilado com suporte para área de transferência, então você pode usar o "*ysignificado: puxar o texto visualmente selecionado para o registro *('*' é para área de transferência)

Se não houver suporte para área de transferência, acho que a única outra maneira é usar Ctrl+Insertdepois de selecionar visualmente o texto no vim.

dvk317960
fonte
3

Eu adicionei a seguinte linha ao meu .vimrc

vnoremap <F5> "+y<CR>

Isso permite que você copie o texto selecionado para a área de transferência pressionando F5. Você deve estar no modo visual para que isso funcione.

aks
fonte
1
Adicione a ~/.vimrcObrigado, isso é muito melhor.
jaggedsoft
2

Adicione o seguinte código ao seu .vimrc:

if has('clipboard')
    if has('unnamedplus')  " When possible use + register for copy-paste
        set clipboard=unnamed,unnamedplus
    else         " On mac and Windows, use * register for copy-paste
        set clipboard=unnamed
    endif
endif
John Trump
fonte