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?
cut-copy-paste
os-clipboard
thameera
fonte
fonte
cpip
,cpi{
.Respostas:
Para sistemas baseados no X11 (ou seja, Linux e a maioria dos outros sistemas semelhantes ao UNIX ), existem duas áreas de transferência independentes uma da outra:
^C
e colado com^V
(É como o MS Windows).Os sistemas OS X e Windows possuem apenas uma área de transferência.
Para sistemas X11, também existem várias ferramentas que sincronizam essas pranchetas para você; portanto, se eles parecem iguais, você pode ter um deles em execução.
O Vim possui dois registros especiais correspondentes a essas pranchetas:
*
usa PRIMARY; mnemônico: S tar é S eleito (para copy-on- s eleitos)+
usa CLIPBOARD; mnemônico: CTRL PLUS C (para o teclado comum)No Windows e no OS X, não há diferença entre
+
e*
, uma vez que esses sistemas possuem apenas uma única área de transferência e os dois registros se referem à 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 PRIMARY
*
com os comandosy
ep
:"*yy
"*p
Talvez você possa usar isso como combinações de teclas mais convenientes:
Se você deseja interagir "automaticamente" com a área de transferência do sistema, em vez de se referir a ela manualmente o tempo todo, defina a
clipboard
variável:unnamed
para usar*
(PRIMARY, ao selecionar)unnamedplus
para usar+
(CLIPBOARD,^C
)Agora, apenas o uso
yy
irá para a área de transferência do sistema, em vez do registro sem nome do Vim, ep
colará a área de transferência do sistema.Você também pode atribuir a esses registros como qualquer outro registro com
let
::let @+=42
:let @*=42
A
clipboard
configuração tem mais algumas opções (como excluir filtros); mas estes são os princípios. Veja:help 'clipboard'
a história completa ;-)gVim
Se você usa o gVim, pode obter um comportamento de copiar na seleção ao usar
:set guioptions+=a
.Isso é ativado por padrão nos sistemas X11 (cópias para PRIMARY), mas não no MS Windows e OSX (pois a seleção de qualquer texto substitui a área de transferência).
Não
+clipboard
?O Vim requer o
+clipboard
sinalizador de recurso para que isso funcione; você pode verificar se o seu Vim tem isso usando:echo has('clipboard')
de dentro Vim (se a saída for0
, é não presente, se é1
, é), ou verificar a saídavim --version
para+clipboard
.A maioria das distribuições Linux é fornecida com uma compilação "mínima" do Vim por padrão, o que não tem
+clipboard
, mas geralmente você pode instalá-lo:vim-gtk
ouvim-gnome
.vim-X11
e execute emvimx
vez devim
( mais informações ).gvim
(isso também permitirá o+clipboard
normalvim
).Você também pode usar
xclip
,,xcopy
ouxsel
para copiar texto para a área de transferência; veja as seguintes perguntas para soluções:SSH
Você também pode usar uma área de transferência em máquinas remotas se ativar o encaminhamento do X11 pelo SSH. Isso é especialmente útil com a dica acima, pois você pode usá-lo
xclip
para acessar a área de transferência da área de trabalho. O Vim na máquina para a qual você está trabalhando ainda precisará do+clipboard
recurso.Isso requer a
ForwardX11Trusted
configuração e deve ser feito apenas com servidores confiáveis , pois isso fornece ao servidor controle quase completo sobre sua sessão X11:Para tornar essas configurações persistentes (para que você não precise adicionar
-XY
todas as vezes), você pode fazer algo assim no seu~/.ssh/config
:Neovim
Neovim reformulou o suporte da área de transferência. A interface incorporado foi removido e substituído por um sistema que chamar um utilitário externo, tais como
xclip
,xsel
, oupbcopy
/pbpaste
.Ele deve pegar automaticamente esses utilitários e usá-los. No OS X
pbcopy
epbpaste
deve estar disponível por padrão, no Linux você provavelmente vai querer instalarxclip
, já que é o mais amplamente disponível (na verdade existem duas versões doxsel
com bandeiras incompatíveis . Este é realmente estúpido).Veja também
:help clipboard
em Neovim.fonte
"<Space>
para obter um"
. Então, nesse caso, você teria que pressionar"<Space>+y
ou"<Space>*y
copiar."
pode selecionar muitos registros nomeados."+
não é mágico, é só registrar+
. Assim, por exemplo, se você deseja copiar três coisas ao mesmo tempo e cole cada um deles, um por um, você pode"1y
,"2y
e"3y
mais tarde"1p
,"2p
e"3p
. Isso é realmente poderoso e inexistente em quase qualquer outro editor. Outro uso interessante é examinar as macros armazenadas. Por exemplo, se você gravar comqq
, mas perceber que precisa corrigi-lo, poderá: em uma linha temporária"qp
, corrigi-lo e"qd
.As outras respostas abordam como copiar texto do 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á inseriu algum texto
"
(o registro padrão), convém carregá-lo na área de transferência.Você pode fazer isso com
:let
:let @+=@"
- copia o registro padrão para a área de transferêncialet @*=@"
- copia o registro padrão na seleção principal do X11 ("área de transferência do mouse")let @+=@a
- copiar do registroa
para a área de transferênciaObserve que isso funciona para registros em geral:
let @a=@b
cópias registramb
para registrara
.fonte
Em http://vim.wikia.com/wiki/Accessing_the_system_clipboard
Isso altera o registro Vim padrão para o
+
registro, que está vinculado à área de transferência do sistema. De:h clipboard-unnamedplus
:fonte
: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ê não estiver no Linux, deverá usar unnamed em vez de unnamedplus.Nas compilações que o suportam, o registro chamado
*
é a área de transferência do sistema. Para copiar texto do Vim para a área de transferência do sistema, você pode selecionar o texto usando o modo visual e pressionar "*ypara copiá-lo para a área de transferência do sistema.Por outro lado, use "*ppara colar o texto da área de transferência do sistema no Vim.
fonte
Eu recomendo que você use o Gvim e adicione isso ao seu
.vimrc
:Isso permite o suporte para CtrlC, CtrlX, CtrlVcomo o bloco de notas do Windows.
Observe que isso também adicionará outros atalhos comuns do Windows, como CtrlSpara
:w
, CtrlApara selecionar tudo, etc.fonte
Se o seu vim não suportar,
+clipboard
você pode usar o plugin fakeclip para Linux, Mac, Windows, tmux, screen, ...fonte
Todas as outras respostas cobriram todas as coisas importantes sobre os registros. Eu gostaria de adicionar mais uma coisa que eu uso.
Existe uma maneira no Vim de copiar diretamente o texto visualmente selecionado para a área de transferência. Basta colocar isso no seu arquivo vimrc :
E, com isso sempre que você selecionar visualmente algum texto, ele será copiado para a área de transferência. Para mais informações sobre isso,
:help guioptions
BTW, isso é apenas para gVim.
fonte
guioptions+=a
também é mencionado na resposta de Carpetsmoker.Você também pode usar um comando global para colocar algum padrão específico na área de transferência. Pode ser útil em situações em que você tem informações espalhadas em um arquivo e o enfrentamento manual é propenso a erros e cansativos.
Primeiro limpe o registro que receberá as informações
Em seguida, copie todas as linhas que contêm o padrão para ele
Finalmente, transferir (copiar) as informações para a área de transferência do sistema
se você tentar copiar todas as linhas que contêm um "padrão" diretamente para a área de transferência, elas não funcionarão porque a área de transferência não tem capacidade para acrescentar novo conteúdo; portanto, estamos usando aqui um registro vim normal para armazenar todas as linhas que contêm o "padrão" padrão de uma só vez e depois colocá-lo na área de transferência.
OBS: É necessário clinar o registro antes de usá-lo, e o uso da versão UPPERCASE do registro nos permite anexar conteúdo, caso contrário ele também não funcionará.
fonte
Se você não consegue descobrir como chegar
+clipboard
ao trabalho, o que eu não consegui por algum motivo, você pode fazer isso.Supondo que você deseja copiar apenas uma seção do arquivo, eu faço
shift
+v
para entrar no modo visual e destacar apenas as linhas que quero copiar. Então eu faço isso.Explicação
'<,'>
- significa que você usou o modo visual para selecionar um intervalo (não digita isso)w !{cmd}
- escreva o intervalo para o stdin decmd
, veja mais em:help w_c
wl-copy
exclip
são programas nos quais você pode canalizar texto e eles o adicionam à área de transferência do sistemaAlém disso, quando isso estiver no seu histórico, você não precisará digitar tudo novamente. Basta selecionar com o modo visual, digite
w
e pressione para cima e o comando deve ser preenchido automaticamente. Além disso, você também não precisa usar o modo visual. Você pode definir o alcance que desejar.fonte