¿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?

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.


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.


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.


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.


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.


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).


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.


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.


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.




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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.