Como copiar texto do vim para um programa externo?


84

Estou tentando copiar e colar algum texto do vim. Estou fazendo v para entrar no modo visual e, em seguida, y quando seleciono meu bloco.

Parece copiar o texto na área de transferência do vim, porque p o colará. Mas em outro programa (por exemplo, Chrome), clique com o botão direito do mouse em> colar e não cola o texto correto. Como copiar texto para a área de transferência correta?

Respostas:


62

O seguinte funcionará apenas se vim --versionindicar que você possui um +xterm_clipboardrecurso. Caso contrário, você terá que instalar pacotes extras ou recompilar o vim com esse recurso adicionado.


Na verdade, existem duas opções para isso:

"+y

copia para o buffer da área de transferência "usual" (para que você possa colar usando Ctrl + V, clique com o botão direito do mouse e selecione "Colar" etc), enquanto

"*y

cópias para a seleção X11 - você pode colar desse buffer usando o botão do meio.

Observe isso "*e "+trabalhe nos dois sentidos. Portanto, se você selecionou algum texto em outro aplicativo, poderá colá-lo no vim usando "*pe se tiver copiado algum texto (usando, por exemplo, Ctrl-C), poderá colá-lo no vim usando "+p.


@Tshepang não está funcionando com massa de vidraceiro. O que devo fazer ?
Rahul Patil

@RahulPatil não sei; talvez faça uma pergunta separada, talvez sobre Superusuário (já que é uma ferramenta do Windows, seria mais bem-vindo lá).
tshepang

@RahulPatil - se você estiver usando massa de vidraceiro, estará editando o arquivo em um servidor remoto, não na máquina local. Geralmente, o servidor remoto não conhece a área de transferência na sua máquina local. Se você estava usando uma área de trabalho Linux, pode fazer o ssh com o encaminhamento do X (desde que você tenha instalado as bibliotecas do X no servidor), mas como o putty é executado no Windows, você não tem o X em execução e não pode encaminhar.
amigos estão dizendo

1
Olá a todos, Como digitar "+ y deve i digitá-lo no modo Visual ou no modo de comando coisa boba, mas eu sou incapaz de descobrir isso?.
Alind Billore

@AlindBillore: no modo de comando. Literalmente, pressione as teclas shift'em seguida, shift=em seguida, y(não todos de uma vez, um após o outro, exceto as mudanças de curso).
Reid

31

Se você estiver usando o vim> = 7.3.74, poderá colocar isso no seu vimrc:

set clipboard=unnamedplus

O qual usará automaticamente o +buffer (a área de transferência do sistema) por padrão. Para puxar (copiar), basta usar o ycomando regular , etc.

No entanto, achei esse comportamento bastante irritante, pois comandos como dcolocam o texto em que operam no buffer padrão, o que significava que eu não podia fazer um jejum dde colar uma linha da Internet, por exemplo.


2
+ É um regiser prancheta
Kit Ho

1
Em relação ao seu último ponto, ddsignifica "cortar uma linha", para que esse seja o comportamento esperado. No raro caso em que você realmente deseja excluir uma linha no esquecimento, "_ddfará o truque.
usar o seguinte comando

Também como @HamishDowner observa em sua resposta: O seguinte funcionará apenas se vim --versionindicar que você possui um +xterm_clipboardrecurso. Caso contrário, você terá que instalar pacotes extras ou recompilar o vim com esse recurso adicionado.
precisa

24

Mantenha pressionada a tecla Shift e selecione o texto com o cursor do mouse.
O texto será copiado para a área de transferência.

Isso também funciona para colar da área de transferência no vim.

Para ficar claro, isso funciona para vimrodar em um terminal como o xterm.


Você quer dizer manter pressionada a tecla Shift ao selecionar texto? É assim que eu faço xterm.
Nozimica

@nozimica: Sim.
Loop Space

Esta resposta deve ter mais
votos positivos

O @LoopSpace para seleções de várias linhas também copiará os números de linha também quando set nuestiver ativado. Então, você provavelmente desejaria alternar os números de linha com algum atalho ou executar o :set nonucomando antes de cada seleção.
Steven Pribilinskiy

No MAC, mantenha pressionada a tecla Opção e selecione o texto com o cursor do mouse
abreschi

10

Acho o padrão "+gPe os "+ycomandos muito difíceis de usar. Então, eu remapeei Ctrl-Ypara puxar a área de transferência e Ctrl-Pcolar da área de transferência. Adicione isto a.vimrc

nnoremap <C-y> "+y
vnoremap <C-y> "+y
nnoremap <C-p> "+gP
vnoremap <C-p> "+gP

5

Não importa, eu encontrei a resposta - está escrita nos menus do vim.

"+y

Muito intuitivo.


Você está usando gvim?
Nozimica 3/11

@ nozimica- yeah
ripper234

1
Isso também está disponível no vim executando em um xterm ou emulador de terminal semelhante no X (se o vim for compilado com o +xterm_clipboardrecurso).
Gilles

3

Apenas para adicionar uma resposta não específica do vim: Você pode Ctrl+Shift+Ccopiar para a área de transferência do sistema no Ubuntu (se a funcionalidade for fornecida pelo emulador de terminal, o gnome-terminal será fornecido). Ctrl+Shift+Vcola em outra janela do terminal; Ctrl+Vcola regularmente em um aplicativo GUI.

Além disso, se você selecionar o texto no terminal e clicar com o botão do meio, ele será colado na área de transferência do X11.


Por alguma razão, isso não funciona. Basta selecionar no modo visual, copiar com ctrl-shift-C e colar em outro aplicativo usando Ctrl-shift-V? O texto não é copiado para mim.
Ripper234

2
@ ripper234: isso não funciona se você estiver usando o gvim. Como crazy2be disse, essa funcionalidade é do seu emulador de terminal.
Reid

@ ripper234: 1) É a funcionalidade fornecida pelo emulador de terminal (gnome-terminal para um fornece), 2) Ctrl + Shift + V é para colar no terminal , os aplicativos da GUI ainda usam Ctrl + V, como de costume. Vou editar a resposta para torná-la mais clara.
crazy2be

se você usar o comando mousedrag com controle de mudança - selecione o texto, será fácil copiar e colar de uma janela de buffers.
Stephan

2

Por padrão, se você instalar a versão light do vim, não terá o +xterm_clipboardrecurso on ( vim --version | grep xterm), necessário para usar os registradores *e +fora do vim.

Para ativá-lo, você deve compilar o vim por conta própria ou instalar uma versão do vim que vem pré-ativada. Eu costumava vim-gnome: sudo apt-get install vim-gnome. Se você executar vim --version | grep xterm, verá que é agora +xterm_clipboard.

Agora, tente copiar para o +e *e ele deve funcionar.


2

Quando verifiquei, meu vim não estava suportando a área de transferência:

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

Instalei o vim-gnome e depois verifiquei novamente

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

Agora eu posso copiar e colar usando "+ ye" + p, respectivamente.


1

Mantenha pressionada a tecla SHIFT e o mouse seleciona o texto para copiá-lo.

Em seguida, cole em outro programa com CTRL + v.

Funciona no terminal do meu Ubuntu 16.04. Não tenho certeza sobre gvime outros sistemas.

insira a descrição da imagem aqui


Isso não funciona.
Astrid

resposta criativa
vidur punj

0

Apenas para adicionar, se algo funcionar, tente mudar o terminal que envolve o vim (se você estiver usando o vim a partir do terminal). Eu descobri que, por exemplo, a área de transferência é inacessível por guake enquanto é acessível a partir do terminal gnome.

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.