Existe uma maneira de copiar um bloco de texto para a área de transferência do sistema, para que eu possa colá-lo em outro programa?

Comentários

  • Isso já foi perguntado e respondido no SO. Você pode encontrar mais e diferentes informações lá.
  • Tenho usado este plug-in no macvim christoomey / vim-system-copy e realmente adoro. Funciona muito bem com movimentos cpip, cpi{.
  • O que você realmente precisa é EasyClip . Ele fará exatamente isso e muito mais …
  • Não posso adicionar uma resposta, mas um comentário. Se você deseja apenas copiar um texto, também pode usar sed :). sed -n 5p file; apenas 5ª linha. sed -n -e 5p -e 8p file; apenas 5ª e 6ª linhas. sed -n 5,8p file; linhas entre 5 e 8. Ele irá imprimir as linhas no console. Você pode copiar facilmente selecionando o texto.

Resposta

Para X11 sistemas baseados (ou seja, Linux e muitos outros UNIX sistemas semelhantes) existem duas pranchetas independentes uma da outra:

  • PRIMÁRIA – Isso é cópia na seleção e pode ser colado com o botão do meio do mouse.
  • CLIPBOARD – Isso é copiado com (geralmente) ^C e colado com ^V (é como o MS Windows).

OS X e Os sistemas Windows têm apenas uma área de transferência.

Para X11 sistemas também existem várias ferramentas que sincronizam essas pranchetas para você; então, se elas parecerem iguais, você pode ter uma delas em execução.

O Vim tem dois registros especiais ters correspondentes a estas pranchetas:

  • * usa PRIMARY; mnemônico: S tar é S eleger (para cópia em- s eleger)
  • + usa CLIPBOARD; mnemônico: CTRL MAIS C (para o atalho de teclado comum)

No Windows & OS X não há diferença entre + e *, uma vez que esses sistemas têm apenas um área de transferência e ambos os registros referem-se à mesma coisa (não importa qual deles você usa).

Você pode usar esses registros como qualquer registro. Por exemplo, usando a área de transferência PRIMÁRIA * com os comandos y e p:

  • "*yy
  • "*p

Talvez você possa usar isto como atalhos de teclado mais convenientes:

noremap <Leader>y "*y noremap <Leader>p "*p noremap <Leader>Y "+y noremap <Leader>P "+p 

Se você deseja ” automaticamente ” fazer interface com o sistema “na área de transferência em vez de se referir a ela manualmente o tempo todo, você pode definir a variável clipboard:

  • Defina-o como unnamed para usar * (PRIMÁRIO, na seleção)
  • Defina-o como unnamedplus para usar + (CLIPBOARD, ^C)

Agora, apenas usar yy irá para a área de transferência do sistema, em vez do registro sem nome do Vim “, e p irá colar o sistema “s área de transferência.

Você também pode atribuir a esses registros como qualquer registro com let:

  • :let @+=42
  • :let @*=42

O clipboard configuração tem mais algumas opções (como filtros de exclusão); mas estes são os princípios básicos. Veja :help "clipboard" para a história completa 😉

gVim

Se você usar o gVim, poderá obter o comportamento de cópia na seleção quando usando :set guioptions+=a.
Isso é habilitado por padrão em sistemas X11 (cópias para PRIMARY), mas não em MS Windows & OSX (já que selecionar qualquer texto sobrescreveria sua área de transferência).

Não +clipboard?

O Vim requer o +clipboard sinalizador de recurso para que isso funcione; você pode verificar se seu Vim tem isso usando :echo has("clipboard") de dentro do Vim (se a saída for 0, ela “ não presente, se “s 1, está) ou verificando a saída de vim --version para +clipboard.

A maioria das distribuições Linux vem com um ” mínimo ” compilação Vim por padrão, que não tem +clipboard, mas geralmente você pode instalá-lo:

  • Debian & Ubuntu: Instalar vim-gtk3.
  • Fedora: instale vim-X11 e execute vimx em vez de vim ( mais informações ).
  • Arch Linux: install gvim (isso ativará +clipboard para vim normal também).

Você também pode use xclip, xcopy ou xsel para copiar texto para a área de transferência; veja o seguinte perguntas para soluções:

SSH

Você também pode usar uma área de transferência em máquinas remotas se habilitar o encaminhamento X11 por SSH. Isso é especialmente útil com a dica acima, pois você pode usar xclip para acessar a área de transferência de sua área de trabalho. O Vim na máquina que você está procurando ainda precisará do +clipboard recurso.

Isso requer a ForwardX11Trusted configuração e deve ser feito apenas com servidores confiáveis , pois isso dá ao servidor controle quase completo sobre sua sessão X11:

$ ssh -XY myhost 

Para tornar essas configurações persistentes (para que você não precise adicionar -XY todas as vezes), você pode fazer algo assim em seu ~/.ssh/config:

# Do **NOT** set this globally; it gives the server complete control over # your X11 session. Host myhost ForwardX11 yes ForwardX11Trusted yes 

Neovim

O Neovim renovou o suporte da área de transferência. A interface integrada foi removida e substituída por um sistema que chama um utilitário externo, como xclip, xsel ou pbcopy / pbpaste.

Deve autom pegar esses utilitários de forma atômica e usá-los. No OS X, pbcopy e pbpaste deve estar disponível por padrão, no Linux você provavelmente deseja instalar xclip, já que é o mais amplamente disponível (na verdade existem duas versões de xsel com sinalizadores incompatíveis . é realmente estúpido).

Veja também :help clipboard em Neovim.

Comentários

  • ssh -Y implica -X, portanto -X pode ser omitido.
  • Um efeito colateral muito interessante de aprender isso (alguns anos atrás) para mim foi a constatação de que " pode selecionar muitos registros nomeados. "+ não é mágico, ‘ s basta registrar +. Então, por exemplo, se você deseja copiar três coisas ao mesmo tempo e colar cada uma delas uma por uma, você pode "1y, "2y e "3y e l ater "1p, "2p e "3p. Isso é realmente poderoso e inexistente em quase qualquer outro editor. Outro uso interessante é olhar para as macros armazenadas. Por exemplo, se você gravar com qq, mas perceber que precisa corrigi-lo, você pode: em uma linha temporária "qp, corrigir ele, e "qd.
  • Apenas uma observação: o OS X tem duas pranchetas separadas. Um é acessado usando Cmd-C e Cmd-V e o outro usando os atalhos de teclado emacs Ctrl-K e Ctrl-Y.
  • @shahbaz – provavelmente melhor usar os registradores de letras para tal propósito, uma vez que os numerados são alterados sempre que o texto é excluído.
  • Copie & e cole conforme descrito na pergunta destina-se ao desktop. É verdade que a instalação do pacote gvim ao lado de vim oferece funcionalidades de área de transferência. mas em navegadores de arquivos são oferecidos dois editores de texto para abrir arquivos! E isso parece feio. É por isso que é melhor instalar apenas os pacotes vim e vim-gui-common. Posteriormente, são fornecidas as funcionalidades da área de transferência sem a necessidade de instalar gvim. Isso está no Linux Debian 10.

Resposta

De http://vim.wikia.com/wiki/Accessing_the_system_clipboard

set clipboard=unnamedplus 

Isso muda o registro Vim padrão para + registro, que está vinculado à área de transferência do sistema.De :h clipboard-unnamedplus :

 clipboard-unnamedplus unnamedplus A variant of the "unnamed" flag which uses the clipboard register "+" (quoteplus) instead of register "*" for all yank, delete, change and put operations which would normally go to the unnamed register. When "unnamed" is also included to the option, yank operations (but not delete, change or put) will additionally copy the text into register "*". Only available with the +X11 feature. Availability can be checked with: if has("unnamedplus") 

Comentários

  • Por que isso não funciona para mim quando yank & cola entre instâncias do vim (cada uma em um terminal terminator separado)?
  • Se você estiver no Linux e o Vim tiver sido compilado com o recurso + X11, e você tiver o conjunto clipboard = unnamedplus, deverá ser capaz de puxar uma linha em uma instância do vim e colá-la em outra instância de vim. Você também deve conseguir colá-lo em qualquer outro aplicativo com CTRL + V ou SHIFT + INSERT. Você pode usar :version no Vim para ver se + X11 aparece na lista de recursos incluídos. Você também pode verificar se o recurso ‘ unnamedplus ‘ está disponível com :if has('unnamedplus')⏎ echo 'yes'⏎ endif Se você estiver não no Linux, então você deve usar sem nome em vez de sem nome plus.

Resposta

As outras respostas cobrem como copiar texto de seu buffer para a área de transferência do sistema. Outra operação comum é copiar texto de outro registro para a área de transferência. Por exemplo, se você já puxou algum texto para " (o registro padrão), você pode querer carregar esse registro na área de transferência.

Você pode faça isso com :let:

  • let @+=@" — copia o registro padrão para a área de transferência
  • let @*=@" — copia o registro padrão para a seleção primária X11 (“mouse área de transferência “)
  • let @+=@a — copiar do registro a para a área de transferência
  • etc.

Observe que isso funciona para registros em geral: let @a=@b copia o registro b para registrar a.

Resposta

Ativado compilações que o suportam, o registro denominado * é a área de transferência do sistema. Para copiar texto do Vim para a área de transferência do sistema, você pode selecione o texto usando o modo visual e pressione "* y para copiá-lo para a área de transferência do sistema.

Por outro lado, use "* p para colar texto da área de transferência do sistema no Vim.

Resposta

Se você não consegue “descobrir como fazer +clipboard funcionar, o que eu não pude por algum motivo, então você pode fazer isso.

Supondo que você deseja apenas copiar uma seção do arquivo, eu shift + v para ir no modo visual e destaque apenas as linhas que desejo copiar. Então eu faço isso.

# Linux Wayland :"<,">w !wl-copy # Linux Xorg :"<,">w !xclip -selection clipboard 

Explicação

  • "<,"> – significa você usou o modo visual para selecionar um intervalo (você não o digita)
  • w !{cmd} – escreva o intervalo no stdin de cmd, veja mais em :help w_c
  • wl-copy e xclip são programas para os quais você pode enviar texto e eles vão adicioná-lo à área de transferência do sistema

Além disso, uma vez que isso está no seu histórico, você não precisa digitar tudo novamente. Basta selecionar com o modo visual, digitar w e pressionar para cima e o comando deve ser preenchido automaticamente. Além disso, você não precisa usar o modo visual. Você pode definir o intervalo que quiser.

Comentários

  • Votos positivos (sobre a outra resposta semelhante) porque esta dá uma explicação. A propósito, uma nota para mim ou para outros leitores: ao usar xclip, você NÃO precisa adicionar esse parâmetro -selection clipboard, que é muito loooong para digitar. O :'<,'>w !xclip padrão copiaria o conteúdo para o ” principal “, ou seja, cópia selecione a área de transferência, que pode ser colada com o botão do meio do mouse.

Resposta

Eu recomendo que você use o Gvim, e adicione isso ao seu .vimrc:

source $VIMRUNTIME/mswin.vim behave mswin 

Isso ativa o suporte para Ctrl C , Ctrl X , Ctrl V como o bloco de notas no Windows.

Observe que isso também adicionará alguns outros atalhos comuns do Windows, como Ctrl S para :w, Ctrl A para selecionar tudo, etc.

Resposta

Eu estava lutando com a área de transferência do sistema e vim dentro de tmux.

Foi resolvido usando xsel ou xclip, como neste exemplo:

1.) visu almente selecione um bloco de texto no modo normal: V<motionkey>

2.a) com xsel execute ex: :"<,">w !xsel -b

2.b) com xclip execute ex: :"<,">w !xclip -selection clipboard

3.) cole em outro programa

… e agora nmap isto como preferido.

Estas opções (-b ou -selection clipboard) basicamente significam que o programa (xsel ou xclip) é enviado para o fundo e espera por outro programa para cole o conteúdo, para que possa “interferir”.

(em manjaro com i3, xfce4-terminal, tmux)

Resposta

Este é o comportamento Eu queria quando se tratava da área de transferência do sistema:

  • Arrancar uma linha com nova linha funciona
  • Arrancar uma linha sem nova linha funciona
  • Arrancar o que quer que seja visual trabalhos selecionados
  • Cortar trabalhos
  • Cortar uma linha com trabalhos de nova linha
  • Cortar uma linha sem trabalhos de nova linha

Por trabalhos Quer dizer: ainda consigo usar p para colar enquanto estou no vim e também posso usar a área de transferência do sistema. Basicamente, quero que copiar e colar funcione conforme o esperado e não fiz ” não quero bagunçar a área de transferência do sistema mais do que o necessário.

Minha técnica era mapear os comandos comuns de puxar, cortar e excluir para usar a área de transferência do sistema adicionando essas linhas ao meu ~/.vimrc:

" use system clipboard " https://anuragpeshne.github.io/essays/vim/7.html noremap y "*y noremap yy "*yy noremap Y "*y$ noremap x "*x noremap dd "*dd noremap D "*D 

O insight principal de https://anuragpeshne.github.io/essays/vim/7.html a postagem do blog é:

Mapeamento recursivo é ruim, sempre use mapeamento não recursivo. (noremap)

Comentários

  • O que " fazer? A primeira resposta já explicou para que serve *, (referindo-se à área de transferência principal), mas eu não ‘ não vejo nenhuma explicação em qualquer lugar para para que serve " e por que isso faz o comando funcionar.
  • Ele ‘ não é imediatamente óbvio porque você ‘ provavelmente é usado para a citação que está sendo usada para contornar palavras, como "foo"; no entanto, para vim "* é realmente o nome do ” register ” (um vim conceito) que se conecta à área de transferência do sistema. Se você abrir o vim e digitar :registers, poderá ver os nomes de outros registros como: "", "0, "1 e assim por diante. Achei este artigo útil para aprender sobre registros: brianstorti.com/vim-registers

Resposta

Se o seu vim não suportar +clipboard, você pode usar o fakeclip plugin para Linux, Mac, Windows, tmux, screen, …

Resposta

Todas as outras respostas foram cobertas todas as coisas importantes sobre os registros. Gostaria de adicionar mais uma coisa que eu uso.

Existe uma maneira no Vim de copiar diretamente o selecionado visualmente texto na área de transferência. Basta colocar isso em seu arquivo vimrc :

set guioptions+=a 

E, com isso, sempre que você selecionar visualmente algum texto, ele será copiado para o seu prancheta. Para obter mais informações sobre isso, :help guioptions

A propósito, isso é apenas para gVim.

Comentários

  • guioptions+=a também é mencionado na ‘ resposta do Carpetsmoker.
  • @muru Sim, desculpe . Eu não ‘ não vi isso antes. Acabei de ver.

Resposta

Você também pode usar um comando global para colocar algum padrão específico no prancheta. Pode ser útil em situações em que você tem informações espalhadas em um arquivo e o enfrentamento manual está sujeito a erros e é cansativo.

Limpe primeiro o registro que receberá as informações

:let @a="" 

Em seguida, copie todas as linhas contendo o padrão para ele

:g/pattern/yank A 

Finalmente, transferindo (copiando) as informações para a área de transferência do sistema

:let @+=@a 

se você tentar copiar todas as linhas contendo um “padrão” diretamente para a área de transferência, não funcionará porque a área de transferência não tem a capacidade de adicionar novos , portanto, estamos usando aqui um registro normal do vim para armazenar todas as linhas contendo o padrão de uma vez e depois colocá-lo na área de transferência.

OBS: É necessário limpar o registro antes de usá-lo, e o uso da versão em MAIÚSCULAS do registro nos permite acrescentar conteúdo, caso contrário, também não funcionará.

Resposta

MacVim Cmd + x/c/v para cortar / copiar / colar

Se você usar MacVim, os Cmd+x/c/v usuais são definidos em $ VIMRUNTIME / macmap.vim que é fornecido por padrão e, portanto, está disponível sem configuração:

vnoremap <special> <D-x> "+x vnoremap <special> <D-c> "+y cnoremap <special> <D-c> <C-Y> nnoremap <special> <D-v> "+gP cnoremap <special> <D-v> <C-R>+ execute "vnoremap <script> <special> <D-v>" paste#paste_cmd["v"] execute "inoremap <script> <special> <D-v>" paste#paste_cmd["i"] 

No entanto, usá-los pode levar a um usuário do vim que não conhece o caminho do vim e se perdem em um computador / ambiente estranho.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *