¿Cómo selecciono todo el texto en Vi / Vim?

193

Usando la herramienta VI para editar archivos de configuración.

¿Cómo puedo seleccionar todo el texto en un archivo (alrededor de 1000 líneas), copiarlo y luego pegarlo en Google Docs?

Tarun Gupta
fuente

Respuestas:

159

La forma más simple y rápida es usar: : % y +y luego ir a Google Docs (o donde sea) y pegar. Explicación:

  • % para referir el siguiente comando para trabajar en todas las líneas
  • y  para tirar de esas líneas
  • +  copiar al portapapeles del sistema

Otra forma es, g g " + y Gpero probablemente admitirás que lo anterior es más rápido y fácil.

Tuxmentat
fuente
10
@Tuxmentat, ¿puede explicar qué hace cada tecla?:%y+
Jas
10
Esta respuesta sería mejor si explicara qué hace cada tecla para ambas secuencias.
PreguntaAway
66
Mi mejor conjetura: el ':' significa que estamos usando un comando "modo ex" (creo). De todos modos, es un comando. '%' es un especificador de rango de línea de comandos especial que especifica todo el archivo. 'y' tira de todo y '+' especifica el registro del portapapeles . : help <comando> me ayudó a resolver esto.
Hawkeye Parker
11
Debo estar haciendo algo mal. i tipo :%y+, y me saleE488: Trailing characters
johny por qué
25
Obtengo "E850: nombre de registro no válido". El segundo método funcionó bien para copiar, pero no llega al portapapeles del sistema en Ubuntu 16.04 (para mí, al menos --- Tengo un .vimrc que puede estar afectando las cosas).
EntangledLoops
95

Muchas respuestas dadas también eliminan la selección, que no estaba buscando.

Estoy usando ggVGpara este propósito (debe ejecutarse en modo normal). Este comando solo selecciona el texto completo dentro del documento.

Incluso he reasignado Ctrl+Apara este propósito, ya que realmente no necesito incrementar un número entero con el acceso directo ( Ctrl+Amapa predeterminado ).

Solo agregue esto a su .vimrc:

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

Tiene <esc>en primer lugar, para asegurarse de que el usuario está en modo normal.

Arda
fuente
2
Exactamente lo que estaba buscando, y es bueno ver que Ctrl + A no está ocupado en vim por defecto. Espero que no haya efectos secundarios.
Nikos Alexandris
2
Yo personalmente uso ggVG, pero gg0vG$podría ser más apropiado ya que replica más de cerca la operación Ctrl + A 'normal'.
Sheharyar
39

Puede usar cat filey luego seleccionar salida y copiar y pegar si necesita pegarlo en su navegador.

Para vi, así es como puede seleccionar todo el texto y escribirlo en un nuevo archivo:

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

En teoría, esto debería funcionar tanto en Linux como en Windows: lo probé en una Mac pero no funciona.

silviud
fuente
1
Pegar en el navegador web cat filees el camino a seguir. El shift vmétodo solo copia al búfer interno de Vi.
Aleksandr Levchuk
no si usa el portapapeles del sistema que usa el registro *, pero esto funciona solo en X y escuché en Windows, por lo que si necesita ssh necesita el -X para verificar si vim tiene soporte para esto en vim -: configure el portapapeles + = sin nombre
¿Hay alguna alternativa para hacer esto sin crear un nuevo archivo? Si estamos editando en vivo en el servidor, necesitamos mantener el código de respaldo en la máquina local para que podamos volver atrás.
NJInamdar
+1 para gato y seleccionar en masilla. Por supuesto, no funcionará para archivos grandes y no es el método más fácil de usar. Pero para copiar archivos de script pequeños que salen de la ventana gráfica de pantalla es lo suficientemente bueno.
Arnis Juraga
16

UTILICE ggVG. escriba "gg" para ir al principio de la prueba Luego escriba VG.

usuario402791
fuente
8

Estoy usando Vim 7.4 en el entorno CentOS-7. Lo que me funcionó para seleccionar todo el texto es

:%y

Luego, solo pen el siguiente archivo donde quiero una copia completa.

O

Puedes usar el comando cat.

cat copyfile > pastefile

Este repositorio de git también tiene algunos otros comandos útiles.

Sachith
fuente
7

gg"+yG

o

gg"*yG

dependiendo de si + o * es el portapapeles del sistema. (En muchos unixes, + es el búfer de selección del mouse para hacer clic con el botón central del mouse y * es el portapapeles del sistema).

precioso
fuente
1
Creo que es al revés: "* es selección y" + es portapapeles. vimdoc.sourceforge.net/htmldoc/gui_x11.html#x11-selection
Mikel
Tienes razón. Yo también lo sabía, pero escribí algo incorrecto. ☹
frabjous
3

Para una Mac, use pbcopy (copia de cartón):

cat file.txt | pbcopy

El contenido de file.txt ahora está en el portapapeles para pegarlo en otra aplicación (por ejemplo, navegador).

También puede pegar el contenido del portapapeles en un archivo usando pbpaste:

pbpaste > file.txt

Si bien esto no involucra específicamente a vi, sí logra el mismo objetivo en una Mac.

Chris
fuente
1

Si está utilizando un escritorio de Linux, puede cargarlo en el portapapeles con xclip o xsel. Para algo de ese tamaño, es posible que desee utilizar la función de carga en Google Docs.

Cakemox
fuente
1

Otra forma sería:

Presiona la vtecla en su teclado y convierte VIM en VISUAL

Luego seleccione todo el texto desplazándose hacia abajo

^+ INSERTpara copiar

SHIFT+ INSERTpara pegar el texto donde quieras en Google Docs.

usuario237678
fuente
0

Usa el siguiente comando.

cat <your file name>

Se hará eco del contenido del archivo. Ahora seleccione, desplace, copie, pegue.
Juego terminado

Ex.:

cat bobis.txt
usuario359247
fuente