Como seleciono todo o texto no Vi / Vim?

193

Usando a ferramenta VI para editar arquivos de configuração.

Como posso selecionar todo o texto de um arquivo (cerca de 1000 linhas), copiá-lo e colá-lo no Google Docs?

Tarun Gupta
fonte

Respostas:

159

A maneira mais simples e rápida é usar: : % y +vá para o Google Docs (ou qualquer outro lugar) e cole. Explicação:

  • % para consultar o próximo comando para trabalhar em todas as linhas
  • y  arrancar essas linhas
  • +  copiar para a área de transferência do sistema

Outra maneira é, g g " + y Gmas você provavelmente admitirá que o exposto acima é mais rápido e fácil.

Tuxmentat
fonte
10
@Tuxmentat você pode por favor explicar o que cada tecla faz em:%y+
Jas
10
Essa resposta seria melhor se explicasse o que cada tecla faz para as duas seqüências.
AsksAnyway
6
Meu melhor palpite: o ':' significa que estamos usando um comando "ex mode" (eu acho). De qualquer forma, é um comando. '%' é um especificador de intervalo de linha de comando especial que especifica o arquivo inteiro. 'y' puxa tudo e '+' especifica o registro da área de transferência . : help <comando> me ajudou a descobrir isso.
precisa
11
Eu devo estar fazendo algo errado. eu digito :%y+e receboE488: Trailing characters
johny why
25
Recebo "E850: nome de registro inválido". O segundo método funcionou bem para copiar, mas não chega à área de transferência do sistema no Ubuntu 16.04 (pelo menos para mim --- eu tenho um .vimrc que pode estar afetando as coisas).
precisa
95

Muitas respostas dadas também arrancam a seleção, que eu não estava procurando.

Estou usando ggVGpara esse fim (precisa ser executado no modo normal). Este comando seleciona apenas o texto inteiro dentro do documento.

Até remapeei Ctrl+Apara esse fim, pois não preciso incrementar um número inteiro com o atalho ( Ctrl+Amapa padrão ).

Basta adicionar isso ao seu .vimrc:

map <C-a> <esc>ggVG<CR>

Ele tem <esc>em primeiro lugar, para garantir que o usuário está no modo normal.

Arda
fonte
2
Exatamente o que eu estava procurando, e é bom ver que Ctrl + A não está ocupado no vim por padrão. Espero que não haja efeitos colaterais.
Nikos Alexandris
2
Eu uso pessoalmente ggVG, mas gg0vG$pode ser mais apropriado, pois replica mais de perto a operação Ctrl + A 'normal'.
Sheharyar 22/09/16
39

Você pode usar cat filee selecionar saída, copiar e colar, se precisar colá-lo no seu navegador.

Para o vi, é assim que você pode selecionar todo o texto e gravá-lo em um novo arquivo:

shift v  -- visual mode
shift g -- jump to eof
"*y -- yank select text
:e my_new_file -- create a new file
"*p -- paste into a new file

Em teoria, isso deve funcionar no Linux e no Windows - eu tentei em um Mac, mas não funciona.

silviud
fonte
1
Colar no navegador da Web cat fileé o caminho a percorrer. O shift vmétodo copia apenas para o buffer interno do Vi.
Aleksandr Levchuk
não se você usar a área de transferência do sistema que usa o registro * - mas isso funciona apenas no X e eu ouvi no Windows - por isso, se você ssh, precisa do -X - para verificar se o vim suporta isso no vim -: set clipboard + = sem nome
Existe alguma alternativa para fazer isso sem criar um novo arquivo.se estivermos editando ao vivo no servidor, precisamos manter o código de backup na máquina local para que possamos reverter.
NJInamdar
+1 para gato e selecione em massa. Obviamente, não funcionará para arquivos enormes e não é o método mais amigável. Mas, para copiar pequenos arquivos de script que saem da janela de exibição da tela, é bom o suficiente.
Arnis Juraga 14/10
16

USE ggVG. digite "gg" para ir no topo do teste. Em seguida, digite VG.

user402791
fonte
8

Estou usando o Vim 7.4 no ambiente CentOS-7. O que me ajudou a selecionar todo o texto

:%y

Depois, pno próximo arquivo, onde eu quero uma cópia completa.

Ou

Você pode usar o comando cat.

cat copyfile > pastefile

Este repositório git também tem outros comandos úteis.

Sachith
fonte
7

gg"+yG

ou

gg"*yG

dependendo se + ou * é a área de transferência do sistema. (Em muitos unixes, + é o buffer de seleção do mouse para clicar com o botão do meio do mouse e * é a área de transferência do sistema).

frabjous
fonte
1
Eu acho que é o contrário: "* é seleção e" + é área de transferência. vimdoc.sourceforge.net/htmldoc/gui_x11.html#x11-selection
Mikel
Você está certo. Eu também sabia disso, mas digitei a coisa errada. Fr
frabjous
3

Para um Mac, use pbcopy (cópia em papelão):

cat file.txt | pbcopy

O conteúdo de file.txt agora está na área de transferência para colar em outro aplicativo (por exemplo, navegador).

Você também pode colar o conteúdo da área de transferência em um arquivo usando o pbpaste:

pbpaste > file.txt

Embora isso não envolva o vi especificamente, ele atinge o mesmo objetivo em um Mac.

Chris
fonte
1

Se você estiver usando uma área de trabalho linux, poderá carregá-la na área de transferência usando xclip ou xsel. Para algo desse tamanho, convém usar o recurso de upload no google docs.

Cakemox
fonte
1

Outra maneira seria:

Você pressiona a vtecla do teclado e transforma o VIM em VISUAL

Em seguida, selecione todo o texto rolando para baixo

^+ INSERTpara copiar

SHIFT+ INSERTpara colar o texto onde você quiser no Google Docs.

user237678
fonte
0

Use o seguinte comando.

cat <your file name>

Irá ecoar o conteúdo do arquivo. Agora selecione, role, copie, cole.
Fim de jogo

Ex.:

cat bobis.txt
user359247
fonte