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


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

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


147


origen




Respuestas:


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

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

Otra forma es gramo  gramo  "  +  y  GRAMO pero es probable que admitas que lo anterior es más rápido y más fácil.


128



@Tuxmentat, ¿puedes explicar qué hace cada tecla en :%y+ - Jas
Esta respuesta sería mejor si explicara qué hace cada tecla para ambas secuencias. - AsksAnyway
Mi mejor suposición: el ':' significa que estamos usando un comando "ex mode" (creo). De todos modos, es un comando. '%' es un especial especificador de rango de línea de comando que especifica el archivo completo. 'y' tira todo, y '+' especifica el registro del portapapeles. : help <command> me ayudó a resolver esto. - Hawkeye Parker
Debo estar haciendo algo mal. yo tecleo :%y+y obtengo E488: Trailing characters - johny why
Obtengo "E850: nombre de registro invá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


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

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

Incluso he reasignado Ctrl + A para este propósito, ya que realmente no necesito incrementar un entero con el atajo (predeterminado) Ctrl + A mapa).

Solo agrega esto a tu .vimrc:

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

Tiene <esc> primero, para asegurarse de que el usuario esté en modo normal.


67



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
Yo personalmente uso ggVG, pero gg0vG$ podría ser más apropiado ya que reproduce más de cerca la operación Ctrl + A "normal". - Sheharyar


Puedes usar cat file y luego seleccione salida y copie y pegue si necesita pegarlo en su navegador.

Para vi, así es como puedes 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.


35



Para pegar en el navegador web cat file es el camino a seguir. los shift v el método solo copia en el búfer interno de Vi. - Aleksandr Levchuk
no, si usa el portapapeles del sistema que usa el registro *, pero esto solo funciona en X y escuché en Windows, así que si usa 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, tenemos que mantener el código de copia de seguridad en la máquina local para que podamos revertir. - Nagama Inamdar
+1 para gato y seleccione en masilla. Por supuesto, no funcionará para archivos grandes y no es el método más fácil de usar. Pero para copiar pequeños archivos de script que va fuera de la ventana de la pantalla es suficiente. - Arnis Juraga


UTILIZAR ggVG. escribe "gg" para ir a la cima de la prueba Luego escribe VG.


13





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


6



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í lo incorrecto. - frabjous


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

:%y

Entonces solo p en el siguiente archivo donde quiero una copia completa.

O 

Puedes usar el comando cat.

cat copyfile > pastefile

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


4





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

cat file.txt | pbcopy

Los contenidos de file.txt están ahora en el portapapeles para pegarlos 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, logra el mismo objetivo en una Mac.


3