UNIX - Como copiar e colar entre diferentes janelas bash com arquivos abertos com VI?

4

Digamos que eu faça login no bash, abra um arquivo no vi e, em seguida, usando alt-f2, abro um novo terminal. Depois de logar, eu naveguei para um segundo arquivo e o abri no vi. Como posso CnP entre esses dois arquivos?

Achei isso em wikia.com . Eu não estou familiarizado com este comando shift-8-y-y. Eu sigo o vimtutor e uso o modo virtual. Eu tentei esta seqüência e não tive sucesso.

E eu li isso sobre registros. Eu encontrei uma menção de usar double_quote-p para ' coloque 'ou cole o registrador, mas isso não funciona em um arquivo diferente. O segundo arquivo relatou o registro vazio.

Como alternativa, eu li nos documentos do VIM, é possível abrir vários arquivos em telas divididas. Isso pode ser um caminho para uma solução. A necessidade que eu frequentemente encontro me faz navegar em uma janela bash diferente para encontrar um arquivo, e então eu desejo copiar entre os dois. Considerando que, imagino, uma janela dividida do VIM é útil para arquivos no mesmo diretório.

    
por xtian 16.06.2011 / 00:15

6 respostas

1

Você não pode fazer isso sem ajuda de um modo genérico padrão com o vim que você tem.

Em primeiro lugar, verifique se você tem uma boa versão compilada e instalada na sua distro.

Em seguida, sugiro usar gvim com janelas separadas ou usar vim -o para abrir vários arquivos e apenas entre os quadros usando ^W^W para alternar e copiar e colar.

    
por 16.06.2011 / 01:23
3

Não é de admirar que não tenha funcionado para você. Você está soletrando os comandos. Não é - 8 - y - y . Nem é double_quote - p . Os comandos são:

  • Arranca a linha atual para a área de transferência X11 : " + y y
  • Cole da área de transferência do X11 : " + p
  • Selecione a linha atual para a seleção X11 (primária) : " * y y
  • Cole da seleção X11 (primária) : " * p

Modifique a parte do movimento de acordo com o gosto. vim tem que saber que um servidor X está lá, é claro. Portanto, você terá que informar explicitamente onde o servidor X está e qual exibição nesse servidor será usada se você não o estiver executando em uma sessão X em que herda implicitamente a variável de ambiente DISPLAY e assim por diante.

    
por 16.06.2011 / 00:52
1

Você pode querer instalar o pacote "general purpose mouse" (gpm), que permite o uso de copiar e colar do mouse sem uma GUI.

    
por 16.06.2011 / 00:23
1

O vi que está incluído em muitas distribuições GNU / Linux é uma pequena versão do Vim que foi compilada sem muitos recursos do Vim, incluindo a interface para a área de transferência do X Window System. Até mesmo seu programa vim do modo terminal é frequentemente construído sem suporte para X. Sem suporte para X, seu vi e vim não poderão acessar a área de transferência e você não poderá copiar e colar entre diferentes instâncias de o programa.

Uma solução para isso é executar o programa gvim no modo de terminal usando a opção -v , como

$ gvim -v your_file

Para evitar digitar isso, ou esquecer de digitar isso, todas as vezes, você pode adicionar esses aliases ao seu arquivo ~ / .bashrc:

alias vim='gvim -v'
alias vi='gvim -v'

Quando estiver usando uma versão do Vim compilada com suporte para o X, você pode usar os comandos descritos na resposta do JdeBP. Você também pode ler sobre esses comandos no manual interno do usuário e no manual de referência do Vim executando

:help 04.7
:help 09.3
    
por 16.06.2011 / 01:15
1

Já que você parece estar usando o console (sem janelas do X, muitas das outras respostas não são relevantes) você pode apenas editar os vários arquivos em uma sessão vim. Tente :split ... para editar os dois arquivos de uma só vez e use os buffers de corte do vim para mover o texto entre eles.

Como alternativa, você pode usar o gpm e cortar e passar entre os consoles.

    
por 16.06.2011 / 04:29
0

Eu não sei sobre o vi, mas com o emacs você pode ter os outros terminais anexados à sessão primária do emacs com emacsclient e então todos eles compartilharão o mesmo kill ring (e buffers, etc) para que você possa matar e puxar entre eles.

    
por 16.06.2011 / 03:53