É possível copiar para a área de transferência diretamente do Vim? yy
apenas copia coisas para o buffer interno do Vim. Quero copiar para a área de transferência do sistema operacional. Existe algum comando no Vim ou você só pode puxar coisas dentro do Vim?
753
sudo apt-get install vim-gnome
antes de aplicar esses comandos abaixo ou você receberá um erro de registro inválido!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:
O
*
registro fará isso. No Windows,+
e*
são equivalentes. No unix, há uma diferença sutil entre+
e*
:*
é provavelmente o que você deseja na maioria das vezes, então eu o uso*
porque funciona como eu esperava nos dois ambientes.Nas distros do Linux, você precisa instalar
vim-gtk
(akagvim
) primeiro para obter a funcionalidade da área de transferência. Isso ocorre porque o non-gtk vim geralmente é compilado sem o suporte ao X11. Isso permite que ele seja executado apenas em máquinas de console (geralmente servidores).E para aqueles confusos sobre como usar registros ao puxar ou colocar, basta escrever
"
o nome do registro. Então, para copiar algo para a área de transferência, você digita"*y
e, em seguida, coloca-o"*p
(crédito: Kyle Mathews)fonte
vim --version|grep .xterm_clipboard -o
e se for,-
então você não tem suporte. Faça o download de uma versão diferente, de acordo com o ubuntuforums.org/showthread.php?t=1686955+
registrar. Por exemplo, se você deseja copiar três linhas na área de transferência do sistema, use comandos comov3j"+y
e, em seguida, cole-os em outro aplicativo, mais em outro VIM. O uso do*
registro no Linux pode copiar e colar apenas entre diferentes aplicativos VIM.No Mac OSX
copiar parte selecionada: selecione visualmente o texto (digite
v
ouV
no modo normal) e digite:w !pbcopy
copie o arquivo inteiro
:%w !pbcopy
colar da área de transferência
:r !pbpaste
Na maioria das distribuições Linux , você pode substituir:
pbcopy
acima comxclip -i -sel c
ouxsel -i -b
pbpaste
usingxclip -o -sel -c
orxsel -o -b
- Nota: Caso nenhuma dessas ferramentas (
xsel
exclip
) esteja pré-instalada em sua distribuição, você provavelmente poderá encontrá-las nos repositóriosfonte
vim --version
mostre-clipboard
vnoremap <C-c> :w !pbcopy<CR><CR> noremap <C-v> :r !pbpaste<CR><CR>
Para usar esse mapeamento, se você deseja copiar, realce o texto no modo visual e pressione Ctrl-c para copiar. Para colar da área de transferência do sistema, pressione Ctrl-v.vnoremap <C-C> :w !xclip -i -sel c<CR><CR>
No seu arquivo vimrc, você pode especificar o uso automático da área de transferência do sistema para copiar e colar.
No Windows, defina:
No conjunto Linux (vim 7.3.74+):
NOTA: Pode ser necessário usar uma versão atualizada do Vim para que funcionem.
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
fonte
+xterm_clipboard
recurso (visível quando você executavim --version
). Este foi o meu caso (executando o Kubuntu 12.10). Eu tive que instalar ovim-gui-common
pacote para obter a funcionalidade correta.set clipboard=unnamed
obras em Mac OS 10.11.6 (El Capitan) com vim 7,4set mouse=v
eset clipboard=unnamed
set clipboard=unnamed
trabalha no MacOS CatalinaUse o registro
"+
para copiar para a área de transferência do sistema (em"+y
vez dey
).Da mesma forma, você pode colar de
"+
para obter texto da área de transferência do sistema (ou seja, em"+p
vez dep
).fonte
+
/*
diferença éSELECTION
vsPRIMARY
buffers de cópia (não me lembro qual é qual atm)"+yy
(copiar linha para a área de transferência) e"+yy
(copiar linha para seleção);"+p
(colar da área de transferência) e"*p
(colar da seleção)."
é selecionar o registro que é o próprio registro interno do vim por padrão (da maneirayy
ep
funcionaria sem fazer referência a qualquer tipo de registro). PS: Gostaria de saber se existe um caractere para o registro interno do Vim, algo como o"&yy
que aconteceyy
por padrão.@ Jacob Dalton mencionou isso em um comentário, mas ninguém parece ter mencionado em uma resposta que o vim precisa ser compilado com o suporte da área de transferência para que qualquer uma das sugestões mencionadas aqui funcione. O meu não estava configurado dessa maneira no Mac OS X por padrão e eu tive que reconstruir o vim. Use este comando para descobrir se você o possui ou não
vim --version | grep 'clipboard'
.+clipboard
significa que você é bom e as sugestões aqui funcionarão para você, enquanto-clipboard
significa que você precisa recompilar e reconstruir o vim.fonte
brew install vim
. No Ubuntu, você pode usarsudo apt-get install vim-gnome
. Em outras distros do Linux (não GNOME), você pode instalarvim-gtk
ouvim-athena
.vim
e instalargvim
wiki.archlinux.org/index.php/Vim#Installationbrew install vim
adicionar oset clipboard=unnamed
.vimrc. Executesource ~/.vimrc
na linha de comando. Em .bash_profile eu adicioneialias vim="/usr/local/bin/vim"
e executesource ~/.bash_profile
. Agora no vim apenas usary
ep
copiar / colarResumindo e facilitando para iniciantes,
Para copiar a linha atual, no modo de comando, digite:
Para copiar o arquivo / buffer inteiro, no modo de comando, primeiro vá para o início via
gg
e digiteComo se observa, isso requer
+clipboard
foravim --version
, que indicam a disponibilidade de apoio prancheta,-clipboard
significa não.fonte
"*5yy
diz5 lines yanked
mas nada na área de transferência? os / x.nnoremap <leader>c "*
em.vimrc
funciona muito bem como uma "cópia" de tipos, seguido de um movimento para agarrar o objeto de texto que deseja copiar para a área de transferência do sistema operacional.vim-gtk
para transformar-clipboard
em+clipboard
, que"+yy
está funcionando.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
instale a versão gui do vim:
brew install macvim
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.Método atualizado :
Nunca fiquei satisfeito com o método definido da área de transferência por anos. A maior desvantagem é que isso atrapalha o histórico da área de transferência, mesmo quando você usa
x
a exclusão. Aqui está uma solução melhor e mais elegante.Copie o texto [intervalo] do vim na área de transferência do sistema. (Dica: use
v
ouV
para selecionar o intervalo primeiro e digite os dois pontos:
para ativar o comando Ex)::[line-range]yank +
por exemplo,
:5,10y *
(copiar / puxar as linhas 5 a 10 para o*
registro da área de transferência do sistema )Cole o conteúdo da área de transferência do sistema no vim em uma nova linha:
:put +
Nota:
brew info vim
poderá ver outras opções para instalar o vim. Atualmente, não possui outras opções.fonte
--with-override-system-vim
deveria ser--with-override-system-vi
Para Ubuntu - julho de 2018
Use o registro "+ para copiar para a área de transferência do sistema (ou seja, " + y em vez de y ).
Da mesma forma, você pode colar de "+ para obter texto da área de transferência do sistema (ou seja, " + p em vez de p ).
Você também deve garantir que o vim seja compilado com suporte para a área de transferência. Tentar:
e se for -xterm_clipboard (um prefixo negativo), você não terá suporte.
Aqui estão algumas instruções para trocar com uma versão funcional do vim que suporta a área de transferência.
Verifique novamente com
vim --version | grep .xterm_clipboard -o
e você pode confirmar que a área de transferência está agora disponível (ou seja, + xterm_clipboard )Boa sorte.
fonte
set clipboard=unnamedplus
no meu.vimrc
arquivo para que o puxão funcionasse. Estou usando o Ubuntu 18.04.Não consegui copiar para o sistema da minha área de transferência porque o tinha no meu arquivo ~ / .vimrc:
Mas se você adicionar esta linha a seguir, permitirá que você simplesmente Ctrl+c obtenha o que você selecionou na sua área de transferência.
Discussão original e mais detalhes: Copie o texto do vim com set mouse = a enabled
fonte
a solução para mim foi instalar o vim adicional que possui a opção de área de transferência:
fonte
"+y
sugestão só funcionouvim-gnome
. Usando o Linux Mint 18.2.Se você estiver usando o GVim, também poderá
set guioptions+=a
. Isso acionará a cópia automática na área de transferência do texto destacado no modo visual.Desvantagem: observe que os gerentes avançados da área de transferência (com histórico) receberão neste caso todo o seu histórico de seleção ...
fonte
Você pode encontrar as respostas aqui Arch Wiki
Para Linux: Antes de tudo, você precisa habilitar a Área de transferência na sua versão vim instalando
gvim
.Em seguida, você deve colocar esta linha no seu
.vimrc
arquivo.set clipboard=unnamedplus
fonte
Se o seu vim for compilado sem
+xterm_clipboard
opção como a padrão no Debian e eu acho que o Ubuntu, você pode canalizar a seleção ou o buffer inteiro para um programa externo que lida com a área de transferência da área de trabalho. Paraxclip
(que talvez você precise instalar anteriormente), o comando será:w !xclip -sel clip
fonte
-xterm_clipboard
nas bandeiras mostradas quando euvim --version
.No vim apenas no terminal ubuntu,
pressione
shift + drag mouse
para selecionar um texto no vim e depoisctrl + shift + c
no terminaldepois
ctrl + v
em outro editorfonte
Se você tiver o xclip, uma maneira fácil de copiar texto para a área de transferência é a seguinte:
y
comando no vanilla vim):call system("xclip -selection clipboard", @")
:call system()
executa um comando do terminal. São necessários dois argumentos, o primeiro o comando, o segundo o que canalizar para esse comando. Por exemplo,:echom system("head -1", "Hello\nWorld")
retorna Olá (Com algum preenchimento). echom retorna a saída de um comando, a chamada não.xclip -selection clipboard
apenas copia o texto na área de transferência do sistema, em oposição à área de transferência X padrão, (Acessado pelo botão do meio do mouse).@"
retorna o último texto arrancado. "é o registro padrão, mas você pode usar qualquer registro. Para ver o conteúdo de todos os registros, digite:registers
.fonte
:call system("pbcopy",@")
. Pode-se vincular esse comando a uma chave.Esta resposta é específica para usuários de MAC.
O VIM padrão disponível no MAC não vem com a opção de área de transferência ativada. Você precisa dessa opção para acessar a área de transferência do sistema.
Para verificar se o seu vim tem essa opção ativada, use o comando abaixo
No resultado, você deveria ter
+clipboard
. Se for-clipboard
, seu VIM NÃO tem a opção de acessar a área de transferência do sistema.Você precisa fazer e instalar o seu VIM com a opção que você precisa. A seguir estão os comandos.
O acima irá instalar o VIM mais recente com a opção
+clipboard
ativada.Agora você precisa definir a área de transferência do sistema. Anexe a seguinte linha a
~/.vimrc
Agora você pode puxar o texto para a área de transferência do sistema. As etapas abaixo explicam como puxar.
press v
, isso mudará você para o modo VISUAL.Press y
, isso copiará o texto selecionado para a área de transferência.CMD + v
cole.Eu uso o MACBook Pro com o macOS Mojave e os itens acima funcionam nele.
fonte
Talvez alguém ache útil. Eu queria permanecer independente da área de transferência do X e ainda poder copiar e colar algum texto entre dois vims em execução. Esse pequeno código salva o texto selecionado no arquivo temp.txt para cópia. Coloque o código abaixo no seu .vimrc. Use CTRL-c CTRL-v para fazer o trabalho.
vnoremap: w! cp / dev / null ~ / temp.txt && cat> ~ / temp.txt
noremap: r! cat ~ / temp.txt
fonte
set clipboard=unnamed
no seuvimrc
.Visual
modo (pressione v para entrar).Normal
modo (Pressione a tecla [esc]), pressione y para copiar.Normal
modo Vim .fonte
Sou iniciante no Vim, mas, para copiar todo o texto na área de transferência do sistema (por exemplo, se você quiser colá-lo em um processador de texto ou em outro editor de texto como gedit, mousepad etc.), no modo normal:
ggVGy
ou, mais simplesmente:
:% y
Como sugerido, eu também instalei o vim-gtk e coloquei
definir área de transferência = unnamedplus
no meu .vimrc
e tudo funciona bem
Se você deseja copiar apenas uma parte do texto, use o modo visual (v) , selecione o texto que deseja copiar e pressione y .
Finalmente, sugiro um programa de área de transferência como o Clipman (meu favorito), Clipit, Parcellite ou similar.
(Estou usando o vim 8.0 no Debian Stretch Xfce)
Perdoe-me pelo meu inglês! :-)
fonte
Eu tive um problema porque meu vim não suportava a área de transferência :
Instalei o vim-gnome (que suporta a área de transferência) e verifiquei novamente:
Agora eu posso copiar e colar usando "+ ye" + p, respectivamente.
fonte
Estou lutando com isso há meses até agora no MacOsX usando atalhos de teclado. Eu sei que a pergunta não é sobre o uso de shorts do teclado. Mas isso pode ajudar alguém com a mesma preocupação.
Descobri que se você desmarcar:
no menu Terminal, você poderá copiar para a área de transferência usando
novamente.
fonte
Eu escrevi uma linha simples no meu .vimrc para que a cópia funcione. Espero que isso ajude alguém. Infelizmente, meu vim não está instalado com o suporte da área de transferência, portanto, nenhuma dessas sugestões funcionou para mim. Basicamente, cole esta linha no seu .vimrc:
Se você quiser ler detalhes sobre o que isso faz, leia sobre isso no meu blog.
fonte
Para alguns teclados internacionais, pode ser necessário pressionar "+ Spacepara obter uma
"
.Então, nesse caso, você teria que pressionar "Space+you"Space*y
fonte
Caso você não queira usar nenhuma interface gráfica para o vim e preferir ficar com o emulador de terminal, pode haver uma abordagem muito mais simples para esse problema. Em vez de usar o puxão ou algo assim, primeiro dê uma olhada na documentação do terminal que você usa. Eu tenho lutado com o mesmo problema (tentando usar + clipboard e xclip e assim por diante) e, no final, verificou-se que, no meu emulador de terminal, basta pressionar Shift e selecionar qualquer texto que você deseja copiar. É isso aí. Muito simples e sem necessidade de mexer na configuração. (Eu uso urxvt por sinal).
fonte
para OSX, como as respostas 10342 acima esclarecidas, você precisa se certificar de que o vim suporta o recurso de área de transferência, disse que aquele que vem pré-enviado com o OSX NÃO suporta a área de transferência e que, se você executar
brew install vim
, funcionará.Exceto que a execução do vi ainda fará com que você execute a versão pré-enviada do OSX, e não a que você instalou do brew.
para superar isso, eu simplesmente aliastei meu comando vim para a versão brew, não a padrão OSX:
e agora eu sou de ouro
fonte
Minha solução foi colocar a seguinte linha em .vimrc:
O script copia a linha selecionada (através do modo visual) ou o conteúdo do arquivo (se nenhum estiver selecionado) na área de transferência usando Ctrl + y. Estou usando o Manjaro Linux, se isso importa.
fonte
Estou no mac osx (10.15.3) e novo no vim. Achei isso tão frustrante e todas as respostas aqui muito complicadas e / ou não se aplicam à minha situação. Acabei fazendo isso funcionar de duas maneiras:
mapeamento de chave que usa pbcopy : funciona na versão antiga do vim que acompanha o mac.
Instale a versão mais recente do vim para que eu possa acessar a solução mais recomendada em outras respostas:
fonte
selecting
com a ajuda domouse
eright-click copy
funcionou no meu caso.Eu não queria que os números das linhas fossem incluídos, então
:set nonumber
antescopying
.fonte
Nada acima funcionou para mim no meu laptop Windows.
Ctrl+ Cfoi bom para copiar .. mas eu precisava Shift+ Insertpara colar!
(Um bom motivo para sempre obter um laptop onde Insertsempre pode ser acessado sem pressionar uma tecla secundária)
fonte
Shift+ Ctrl+ C se você estiver no modo gráfico do Linux, mas primeiro precisará selecionar o que precisa copiar.
fonte