Copiar y pegar en Vi/Vim


nullDesde un tiempo a esta parte, influenciado por la presencia en mi lugar de trabajo de uno de mis mejores amigos de la facultad, ando trabajando con el editor de textos Vi.

Siempre había querido aprender a utilizarlo pero no terminaba de encontrarle la gracia a memorizar n-cientas combinaciones de teclas para hacer cosas que, al fin y al cabo, podía hacer con editores que tuviesen una interfaz gráfica como Gedit o Mousepad.

Vaya por delante que no soy un «máquina» con él pero poco a poco voy añadiendo nuevos conocimientos que voy adquiriendo conforme me va haciendo falta y cada día observo que lo uso más.

He empezado con las combinaciones para hacer búsquedas en el texto (que me sirven con el comando less y son útiles a la hora de buscar en los logs de los servidores) pero venía echando de menos el uso del «porta papeles» para cortar/copiar y pegar líneas de texto (ya me cansé de escribir «a mano» contenidos que tenía que cambiar de sitio o repetir en otro lugar :()

A modo de chuleta personal, que espero sirva para los lectores curiosos que abundan en este blog, he optado por escribir el presente artículo: ¡qué aproveche!

Cortar y Copiar

Debemos colocarnos en la primera línea que contiene el texto que nos interesa y pulsar

  1. el número de líneas a utilizar y
  2. si queremos copiarlas (yy) o cortarlas (dd)

Así tenemos que pulsar (todo seguido):

  • 3yy copia 3 líneas contando aquella en la que nos encontramos.
  • 10dd corta 10 líneas a partir de la actual.

Pegar

Una vez realizado el paso anterior sólo tenemos que situarnos donde queremos colocar el texto que hemos copiado (o cortado) y pulsar

  • p si queremos pegar DEBAJO de la línea actual.
  • P para pegar ENCIMA de la línea en la que nos encontramos.

Cortar y copiar bloques de líneas

Es más que posible que te resulte incómodo y/o imposible tener que contar cuántas líneas queremos copiar o mover de sitio.

Para evitarlo siempre podemos optar por marcar zonas utilizando el comando m (colócate antes al comienzo del bloque que vas a utilizar) y seguidamente el nombre que queremos darle a la marca.

Así tenemos que:

  • mc crearía una marca que identificaremos como c.
  • mp haría lo mismo pero dándole por nombre p.

Colócate al final del bloque de texto que te interesa (ojo, funciona para líneas completas; independientemente de la columna en la que coloques el cursor utilizará toda la línea, por lo que no tiene sentido que te mates ubicándolo: baja hasta donde te interesa y listo) y pulsa:

  1. y’c para COPIAR (observa la y) el bloque c (podríamos haber hecho lo mismo para el p con y’p)
  2. d’p para CORTAR (observa la d) el bloque p

¿Cómo pegar un bloque?

Pues igual que hemos hecho hasta ahora: utilizando pP según quieras pegar debajo (p) o encima (P) de la línea en la que se encuentra situado el cursor.

Conclusión

Vi y Vim son unas herramientas muy potentes que requieren un esfuerzo (de memoria ;)) aprender a utilizar en todo su esplendor.

Personalmente he optado por ir aprendiendo aquello que más utilizo y, por tanto, me hace falta en el día a día.

En esta ocasión ha sido el uso del «porta papeles» como medio de duplicar y mover la información existente en cualquier fichero de texto.

Espero que os sea de utilidad a aquellos que, como yo, comenzáis a utilizar este

  • extendido (suele venir instalado por defecto en cualquier distribución Linux)
  • potente (no he hecho más que rascar la superficie y ya me siento atraído por él)
  • liviano (ocupa pocos recursos en lo que a memoria y disco se refiere frente a otras soluciones que no hacen ni la mitad que éste)
  • y útil editor.

19 comentarios en “Copiar y pegar en Vi/Vim

  1. Creo que es más fácil copiar con la selección.

    v – Para seleccionar lineas y te desplazas hasta donde quieras, si es al principio del fichero gg si es al final G.

    Ctl+v – Para seleccionar por columnas muy útil en algunos momentos.

    Me gusta

      1. He encontrado la respuesta, hay que usar un comando de tipo «ex» (poniendo dos puntos delante)

        «USAR LOS COMANDOS ex

        Para visualizar el numero de cada linea, teclear
        :set nu[return]

        Para no visualizarlas, teclear
        :set nonu[return]

        Copiar lineas

        El formato basico del comando de copiar del ex es:

        :#linea,#linea co #linea[return]

        donde los dos primeros numeros(separados por coma) especifican el rango de
        lineas a copiar, y el tercer numero es la linea anterior al punto de insercion.

        Se pueden usar abreviaturas para especificar los rangos de lineas:
        – «.» denota la linea actual.
        – «$» denota el final del fichero.»

        Fuente: http://www.dc.fi.udc.es/~afyanez/info-vi/version-texto.txt

        Me gusta

    1. Hola Eduardo. Quisiera saber: si tengo tres columnas de datos y quisiera copiar sólo una (por ejemplo la del medio), ¿cómo hago exactamente?. Saludos.

      Me gusta

  2. Pingback: BlogESfera.com
  3. Vaya que ha llegado tarde esta info, aunque no nunca.

    Recuerdo hace unos tres meses que anduve configurando un servidor que no tenia ssh, y me vi en la obligación de anotarlo todo y escribirlo por completo.

    Ahora rara vez tengo que usarlo, excepto cuando se presenta un problema serio (ya le instale SSH). xD

    Me gusta

  4. ¿Has notado alguna diferencia respecto a usar un editor gráfico?
    Yo estuve aprendiendo algo de emacs y vi, pero no vi que valiese la pena el poder hacer todo con el teclado respecto al tiempo invertido aprendiendo a usarlos a un nivel algo alto.
    Si tengo que editar algún archivo rápido uso nano (este si que es fácil xD), OpenOffice para documentos y algún IDE para programar.

    Me gusta

    1. Estoy contigo en que Nano es mucho más sencillo (pero también menos potente) y que muchas de las cosas que hacemos habitualmente pueden hacerse sin ningún problema utilizando un editor gráfico (de hecho lo hago así normalmente); la ventaja que le encuentro a usar Vi es que está disponible en cualquier servidor al que me conecte por ssh (Nano no siempre está y puede que no tengas permiso para instalar nada) y, sobre todo, porque me encanta la posibilidad de hacer búsquedas utilizando expresiones regulares (esto también puede hacerse con muchos editores con entorno gráfico).

      Por lo demás no me aporta gran cosa @EgoPL

      Me gusta

  5. Y como haria si quisiera pegar al final de una linea ??? supongamos que corto algo de arriba de mi archivo y quisiera pegarlo al final de este texto? no arriba ni abajo aca –> pegar <—

    Me gusta

  6. Oye amigo, gracias por tu info, pero si yo quiero copiar texto en un archivo y pegarlo en otro archivo que tengo abierto al mismo tiempo en otra terminal, es posible? como se haria, muchas gracias.

    Me gusta

    1. Para estos casos cuando estar en terminal y no puedes hacer uso del portapapeles lo que hago es usar sed, ya que con este puedes extraer lineas del inicio, del fin, intermedias, que cumplan un patrón y lo puedes enviar a un archivo intermedio o directamente al archivo destino.

      Me gusta

  7. otro k dejo a vi por nano, aunque reconozco k este ultimmo es mas potente
    m puedes contar algo sobre las expresiones regulares del vi(intento usar los dos aunque por comodidad/desconocimiento siempre acabo llendome al nano), son las mismas q utiliza la shell/ sed/openofficce??

    Me gusta

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.