Como copiar uma seleção para a área de transferência do OS X


225

Eu tenho uma área selecionada no Vim. Como posso copiá-lo na área de transferência do OS X?

(A área de transferência do OS X pode ser gravada através de um canal para /usr/bin/pbcopy)


4
apenas visual select, então "+y.
zx1986

2
O vim que acompanha o OSX não possui +clipboardou +xterm-clipboard. Você pode verificar isso com vim --version | grep clipboard. É possível resolver isso com brew install vim --with-client-server.
LondonRob

1
Ou use o MacVim, que oferece uma versão em linha de comando que pode ser simbolicamente conectada ao seu ~/bine, em seguida, ~/bininserida no seu caminho antes do vim e sinônimos normais instalados pelo sistema.
the Tin Man

Com base no que o @ zx1986 escreveu, fiz três coisas: 1) Adicionei o seguinte ao meu ~ / .bashrc para criar o vi / vim no modo terminal do MacVim: alias vi='mvim -v'2) Adicionei o seguinte ao ~ / .vimrc, que mapeia Ctrl + c (não Cmd + c): vnoremap <C-c> "+y3) Maestro de teclado configurado para digitar a sequência de ^cteclas (Ctrl + C) ao executar no terminal (no meu caso iTerm2) Isso possibilita o uso de Cmd + c para copiar texto na área de transferência do OSX para que possa ser colado em outros aplicativos OSX.
Neil Griffin

Respostas:


79

Dependendo da versão do Vim que eu uso, posso usar o +registro para acessar a área de transferência.

O " compartilhamento da área de transferência do Mac OS X " pode ter algumas idéias que também funcionam para você.


5
Para pessoas com VIM compilados sem + prancheta no link acima é um excelente recurso para dar soluções w / o recompilação VIM
sdjuan

DETALHE MUITO IMPORTANTE !!! Se você possui a versão 7.3 do Vim, isso pode não funcionar para você, mas se você possui a versão 7.4, ele funciona (e às vezes você nem precisa fazer o todo "+ y). E verifique isso apenas escrita> vim no terminal e, em seguida, a versão número é quando você iniciá-lo.
Zeth

esta resposta é a mesma que stackoverflow.com/a/680271/2652524
Gujarat Santana

1
O "+registro existe apenas para o X11 (a menos que você construa o vim com suporte ao + X11, que instalará um servidor X11 XQuartz no OS X), enquanto o OS X não usa o X11 como seu sistema Windows.
nn0p 27/11/16

O que fazer, se ambos - vime macvimtiver + área de transferência. E clipboard=unnamedadicionado a ~/.vimrc? Parece uma dor real, tentei todas as soluções alternativas e, atualmente, tenho que usar o spacemacs, quando eu sei, que terei que usar a área de transferência global :) #
315 Nikolay Fominyh #:

240

Para MacVim e Windows Gvim, basta adicionar o seguinte ao seu ~/.vimrc:

set clipboard=unnamed

Agora todas as operações, tais como yy, De Ptrabalhar com a área de transferência. Não há necessidade de prefixá-los com "*ou "+.


2
Passei a manhã toda tentando descobrir como separar os comandos y, d e P de ⌘-C e ⌘-V que o MacVim permite para você e finalmente deparei com isso. Com certeza, eu adicionei isso ao meu vimrc quando eu era jovem e ele me frustrou desde então.
Jonathan Dumaine

2
Para quem é novo no MacVim, é utilizável no terminal com a -vbandeira ( mvim -v). Eu tenho o meu alias para vim e mvim.
Pk-nb

3
Como mencionado por @VincentG em seu comentário acima, isso realmente funciona com versões baseadas em terminal do Vim, mas quem usa o tmux no terminal precisará seguir uma das soluções detalhadas aqui: stackoverflow.com/a/11421329/456584
user456584

3
esta deve ser a resposta aceita - contanto que :echo has("clipboard")diz 1, que é o caso de MacVim, e eu tenho um vialias que corre mvim -vem vez
jdsumsion

1
@ Joseph, se :versionmostra -clipboard, a compilação do Vim não suporta o recurso de área de transferência. Eu estava falando sobre o MacVim, que é um aplicativo de interface gráfica.
George V. Reilly

136

Se a área de transferência estiver ativada, você pode copiar uma região selecionada para a área de transferência pressionando "*y

Para ver se está ativado, execute vim --versione procure por +clipboardou -clipboard. Por exemplo, ele não está ativado por padrão na minha caixa 10.5.6:

% que vim
/ usr / bin / vim
% vim --versão
VIM - Vi IMproved 7.2 (9 de agosto de 2008, compilado em 11 de novembro de 2008 17:20:43)
Patches incluídos: 1-22
Compilado por _www@b77.apple.com
Versão normal sem GUI.  Recursos incluídos (+) ou não (-): 
... 
-clientserver -clipboard + cmdline_compl + cmdline_hist + cmdline_info + comentários
 ...

Se tivesse sido compilado +clipboard, eu seria capaz de usar o "*registro para acessar a área de transferência do sistema.

Eu baixei a fonte 7.2 e compilei (fácil como tar xjf vim-7.2.tar.bz && cd vim72 && ./configure && make && sudo make install), e a área de transferência foi ativada:

% que vim
/ usr / local / bin / vim
% vim --versão
VIM - Vi IMproved 7.2 (9 de agosto de 2008, compilado em 24 de março de 2009 17:31:52)
Compilado por rampion@Myrrhy.local
Versão normal com GUI GTK2.  Recursos incluídos (+) ou não (-): 
... 
+ clientserver + clipboard + cmdline_compl + cmdline_hist + cmdline_info + comentários
 ...

No entanto, mesmo após a compilação, não era possível copiar para a área de transferência ao executar o vim no Terminal.app, apenas no X11.app.


3
Compilei a versão mais recente com a área de transferência + e agora a área de transferência nativa trabalha com ela como o registro *. Além disso, a configuração "definir área de transferência = sem nome" no seu arquivo .vimrc torna a área de transferência do sistema a típica. Na verdade, usei github.com/adamv/homebrew/blob/duplicates/Library/Formula/… essa fórmula caseira para compilar e compilar.
rado 14/09/10

Hmm, não sei por que o Vim não apareceu no meu Homebrew, mas eu o copiei para / usr / local / Library / Formula, executei o brew install vim e falhou com "ld: library não encontrado para -lruby-static " Estou usando o RVM e estava no 1.8.7. Quando mudei para 1.9.2, o erro foi "ld: library not found for -lruby.1.9.1". A solução foi usar o sistema Ruby executando primeiro o sistema de uso do rvm.
justsee

9
Um pouco mais fácil do que procurar a palavra "área de transferência" no que geralmente é uma longa lista de recursos: faça :echo has("clipboard"). Se mostrar 0, não será compilado. Se mostrar 1, será.
ravron

3
você também pode compilar o vim com a área de transferência usando o homebrew: brew install vim
Anton Koval '

4
Cuidado! Eu tinha uma +clipboardversão, mas tinha instalado o --with-client-serverque habilita +x11, e tentar copiar / colar para x11 no terminal vim no macOS não funcionou :) Eu tive que reinstalar sem +clientserver.
26417 jacwah

96

Você pode selecionar visualmente o texto e digitar :w !pbcopy<CR>

Ou você pode incluir os mapeamentos de teclas abaixo em seu ~/.vimrcarquivo. Eles cortam / copiam texto no modo visual para a área de transferência do sistema operacional.

vmap <C-x> :!pbcopy<CR>  
vmap <C-c> :w !pbcopy<CR><CR> 

fonte: http://drydevelopment.com/blog/vim-pbcopy-on-os-x


6
Você também pode selecionar texto na linha de comando, como: 1,10w! Pbcopy para copiar as linhas de 1 a 10 para a área de transferência. O w é importante junto com o espaço a seguir para manter o texto original no lugar. O link da fonte acima é agora quebrado, mas há uma discussão aqui: vim.wikia.com/wiki/Mac_OS_X_clipboard_sharing
sdjuan

Eu segui isso para fazer com que isso funcionasse no tmux: superuser.com/questions/231130/…
Wex

@Wex Fazer a ligação foi corrigido
SnoringFrog

2
Observe que isso parece funcionar apenas para selecionar linhas inteiras. Parece que não funciona se você deseja selecionar apenas parte de uma linha. stackoverflow.com/questions/16196826/…
Kevin Wheeler

1
@ Kevin Wheeler: você pode tentar com o seguinte comando, que pode resolver a cópia não linear, noremap <silent> <leader> y: <CR>: deixe @ a = @ "\ | execute" normal! vgvy "\ | let res = system (" pbcopy ", @") \ | let @ "= @ a <CR>
dragonxlwang 8/16

38

aspas duplas asterisco ( "*) antes que qualquer comando yank puxe os resultados no buffer de cópia. Isso funciona para Windows e Linux também.


11
apenas parece emitir um caractere de campainha e nenhum outro efeito para mim #
247/09

3
No X11, "* é PRIMÁRIO" do Vim + é CLIPBOARD e SECUNDARY não recebe um registro nomeado. (Não que alguém usa-lo ...)
ephemient

Perfeitamente. Realmente ajuda, especialmente com a seleção de blocos (ctrl-v).
Sonique

Como a pergunta era especificamente sobre o Mac OS X, é desnecessário acrescentar que ela funciona no Mac "demais".
Paul Tomblin

@PaulTomblin bem, bastante justo :-)
apprenticeDev

26

No macos 10.8, o vim é compilado -clipboardpara usar, "*yvocê precisará recompilar. Felizmente brew install vim, compilaria uma nova versão facilmente para você e será +clipboard.


1
Algo a ter em mente - de forma bizarra, brew install vimcom atualizações vi, e não vim . Portanto, você pode ter que alternar as coisas de maneira diferente depois de instalar o vim com o homebrew.
shridharama

18

Selecione visualmente o texto e digite:

ggVG
!tee >(pbcopy)

O que acho melhor do que:

ggVG
:w !pbcopy

Como ele não exibe um prompt: "Pressione ENTER ou digite o comando para continuar"


Cópias ainda toda a linha
Karl Pokus


11

Se você estiver usando o MacPorts, poderá atualizar o seu VIM para incluir o suporte da área de transferência através de:

port install vim +x +x11

Agora você usa o "+registro para puxar seu texto diretamente para a área de transferência do Mac. Funciona como um encanto.


1
Isso é exatamente o que eu precisava. Basta ter certeza de que $ PATH está correto e você está recebendo / opt / local / bin / vim e não o Apple vim.
Gareth

8

Se você estiver no MacOS X:

$ brew install vim
$ vim --version
VIM - Vi IMproved 7.4 [...]

Em seguida, adicione ao seu .vimrc:

set clipboard=unnamed

Agora você só precisa estar no vim e fazer :%y, para ter todo o conteúdo copiado para a área de transferência.


o conteúdo foi arrancado, mas não consigo colar fora do VIM.
precisa saber é o seguinte

5

Use o vim de Homebrew :brew install vim

O Mac (a partir de 10.10.3 Yosemite) vem pré-instalado com um sistema vim que não possui o clipboardsinalizador ativado.

Você pode compilar o vim para si mesmo e ativar essa bandeira, ou simplesmente usar o vim do Homebrew, que está configurado corretamente.

Para ver isso, verifique o sistema de estoque vim com /usr/bin/vim --version

Você verá algo como:

$ /usr/bin/vim --version

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov  5 2014 21:00:28)
Compiled by root@apple.com
Normal version without GUI.  Features included (+) or not (-):
... -clientserver -clipboard +cmdline_compl ...

Note o -clipboard

Com o vim do homebrew, você obtém

$ /usr/local/bin/vim --version

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled May 10 2015 14:04:42)
MacOS X (unix) version
Included patches: 1-712
Compiled by Homebrew
Huge version without GUI.  Features included (+) or not (-):
... +clipboard ...

Note o +clipboard


1
Então, como fazer a cópia?
Frozen Flame

com a versão de cerveja do vim eu era capaz de fazer o que eu queria: eu destacou as linhas usando Ventão :w !pbcopye funcionou
davidpm4

5

Se o seu Vim não é compilado com pranchetas, você deseja copiar o texto selecionado em vez de linhas inteiras, não deseja instalar o MacVim ou outra GUI, a solução mais simples é adicionar essa linha ao seu .vimrc:

map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>

Para usá-lo, basta selecionar visualmente o texto que deseja copiar e depois Control- C. Se você quiser uma explicação completa desta linha, leia " Como copiar para a área de transferência no vim ".


mas também está me dando duas linhas pretas depois que o texto foi copiado
Nic Wanavit

4

Eu usei:

map <C-x> :!pbcopy<CR>
vmap <C-c> :w !pbcopy<CR><CR>

Funcionou muito bem.


3

Você pode usar o MacVim quando estiver em um Mac para acessar facilmente a área de transferência usando as teclas padrão do sistema operacional.

Também é totalmente compatível com o Vim normal, então nem preciso ter um separado .vimrc.


Eu uso o MacVim e, em seguida, vinculei os sinônimos do vim da linha de comando ao meu ~/binpara substituir os padrões.
the Tin Man

2

comando-C? Isso pelo menos funciona para o vim iniciado no Terminal.app para o texto selecionado com o mouse.


6
boa resposta ingênua mas a produção breaks se você estiver usando subjanelas verticalmente-split no vim (que é realmente o caso que tenho em mente), ou se o resultado é mais do que uma tela do terminal
ʞɔıu

3
Você está certo, eu não pensei nesses casos. Deixo minha resposta apenas para impedir que outras pessoas dêem respostas semelhantes e não úteis.
Mouviciel 24/03/09


2

Meu principal problema foi a versão OSX padrão do Vim. Instalando-o via homebrew adicionado +clipboardà compilação.

Você pode verificar com:

vim --version

para ver se diz -clipboardou +clipboard.


2

se você tiver a +clipboardopção na instalação do Vim (você pode verificar com :version) e estiver no modo visual, poderá fazê-lo. "+yIsso puxará a seleção para o buffer +que é a área de transferência.

Eu adicionei os seguintes mapas ao meu vimrc e ele funciona bem.

vmap <leader>y "+y : Com isso eu posso fazer o leader keyseguinte ypara copiar para a área de transferência no modo visual.

nmap <leader>p "+p : Com isso eu posso fazer o leader keyseguinte ppara colar da área de transferência no modo normal.

PD: No Ubuntu, tive que instalar o vim-gtk para obter a +clipboardopção.


0

no mac, quando qualquer outra coisa parecer funcionar - selecione com o mouse, clique com o botão direito do mouse e escolha copiar. uff


0

Atualmente, estou no OS X 10.9 e meus esforços para compilar o vim com + xterm_clipboard não me trouxeram nada. Portanto, minha solução atual é usar o MacVim no modo terminal com a opção set clipboard=unnamedno meu arquivo ~ / .vimrc. Funciona perfeito para mim.


0

O que funcionou para mim na minha .vimrc

set clipboard=unnamed
if has("unnamedplus") " X11 support
    set clipboard+=unnamedplus
endif

0

Para Mac - mantenha pressionada a optiontecla seguida de ctrl Vselecionar o texto.


0

Shift cmd c - definir o modo de cópia Arraste o mouse, selecione o texto, cmd c para copiar o texto selecionado Cmd v para colar


-1

Para usuários do Ubuntu, o pacote que você deseja recuperar para usar a área de transferência está cheio de vim. Os outros pacotes (vim-tiny, vim) não incluem o recurso da área de transferência.


vim-full não é mais um nome de pacote ubuntu. o pacote vim padrão (7.3.154) possui um conjunto mínimo de recursos, incluindo -clipboard. A instalação do vim-gtk ou vim-nox fornecerá uma versão + da área de transferência.
Spazm

-1

Copiar para a área de transferência usando o registro '+' ou '*' não está funcionando?

Motivo: Sua versão específica do vim foi compilada sem o suporte da área de transferência. Digite vim --verion no console e você verá -xterm_clipboard . A instalação do vim com pacotes gui resolve esse problema. No ubuntu, você pode fazer isso digitando no shell:

sudo apt-get install vim-gui-common

Agora novamente faça o vim --version no console. Muito provavelmente, você estaria vendo + xterm_clipboard agora !!

Portanto, agora você pode copiar qualquer coisa para a área de transferência usando o registrador + (como "+ yy para copiar a linha atual para a área de transferência)


-1

macvimEncontro o mesmo problema, após a instalação ainda não funcionar, finalmente encontrei uma maneira de resolver:

Tente desinstalar todo o vim primeiro,

brew uninstall macvim

brew uninstall --force vim

e reinstale o macvim

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

Então você pode usar "*you "+y, não precisaset clipboard=unnamed


-2

O Command-c funciona para mim tanto no MacVim quanto no terminal.


Copiar e colar tradicional não funciona com os buffers do Vim e pode atrapalhar completamente sua formatação. Por exemplo, copiar 15 linhas de objetos aninhados com Cmd + C e colar com Cmd + V fará com que perca a compreensão do aninhamento. Isto muito provavelmente depende de suas configurações no seu .vimrc e pode ser muito particular
netpoetica
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.