Ideas para ser mas productivo con Vim

Este es uno de los capítulos del tutorial Vim, un editor atemporal. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.

Aún queda mucho que aprender de Vim, y creo que cuanto mas profundizo, mas claro tengo que tengo que seguir estudiando para conocer Vim. En este caso, esa célebre frase de solo se que no se nada, tiene mas sentido que nunca. Cuanto, mas estudio Vim, cuanto mas leo, sobre Vim, cuanto mas me documento, mas cuenta me doy de todo lo que me queda por hacer. En este nuevo capítulo del tutorial quiero centrarme en diversas herramientas para ser mas productivo con Vim.

Se trata de conocer una serie de opciones y posibilidades que Vim pone a tu disposición,y que seguro te ayudarán en tu trabajo diario con Vim. Simplemente indicarte que son solo algunas.

Como he comentado anteriormente, las posibilidades que tienes con Vim son enormes, y no se trata de verlas todas. Sin embargo, si considero que es necesario conocer algunas de ellas, que, potencialmente puedes utilizar con mas frecuencia, y que seguro que te resultarán de mas ayuda.

Todas estas operaciones no es necesario, ni mucho menos, que las aprendas de memoria. Recuerda que existen, y donde las encontraste, para cuando las necesites, puedas recurrir a ellas sin problemas.

ideas para ser mas productivo con Vim

Ideas para ser mas productivos con Vim

Numeración y numeración relativa

Una opción que tienes disponible en Vim, y que a mi me resulta de gran utilidad son la numeración y la numeración relativa. Esto me permite desplazarme con mucha rapidez entre líneas. Pero no solo esto, sino que también te va a permitir realizar operaciones como borrar, copiar o mover, sin necesida de desplazarte.

Esto lo puedes probar utilizando estas dos opciones,

set number
set relativenumber

La primera opción te muestra la numeración de las líneas, mientras que la segunda te lo muestra de forma relativa. Esto es muy cómodo a la hora de desplazarte, y realizar operaciones.

Si quieres que esta configuración sea fija, simplemente añade estas líneas a la configuración en el archivo .vimrc. Esta es una de las ideas que te pueden ayudar a ser mas productivo con Vim

Intercambiar letras, palabras y líneas

Esto de equivocarse al escribir una palabra, cambiando dos letras entre sí. O incluso, cuando estás redactando un texto, darte cuenta que esa palabra debería haber precedido a otra, o incluso, intercambiar dos líneas en el código que estás implementando, es algo realmente normal. Mucho mas habitual de lo que podrías pensar. Y por supuesto, en Vim, es posible resolverlo, no solo con facilidad, sino también con mucha elegancia.

Desde luego que puedes hacerlo a la antigua usanza. Borrando y escribiendo de nuevo. Sin embargo, el objetivo de este artículo, es darte alguna que otra idea para ser mas productivo con Vim.

En general para cualquier operación, tienes que recordar el poder de las mayúsculas y minúsculas. En este sentido, recuerda que siempre que utilizas la letra mayúscula la operación que sea que estés realizando, la estarás realizando antes, mientras que si utilizas la minúscula, la estarás realizando después. Por ejemplo,

  • x y X la primera corta el carácter sobre el que te encuentras, mientras que la segunda el carácter inmediatamente anterior.
  • p y P en este caso, pegamos a continuación del cursor con la primera, mientras que con la segunda, pegamos después del cursor.

En este sentido, si quieres cambiar una letra de sitio, estando en el modo normal, tan solo tienes que situarte sobre ella y utilizar Xp si quieres cambiar la letra con la anterior o xP si la quieres cambiar con la siguiente.

En el caso de querer intercambiar palabras puedes utilizar alguna de estas combinaciones dawwP o dawelp para cambiar la palabra en curso con la siguiente, mientras que si la quieres intercambiar con la anterior, la operación a realizar sería dawbP.

Y por último te quedaría intercambiar líneas. En el caso de que quisieras intercambiar la línea en la que te encuentras, con la línea siquiente, tienes que utilizar ddpl. Mientras que si lo que quieres, es intercambiar con la línea anterior podrías utilizar cualquiera de las dos siguientes ddkP o ddkkp.

Copiar y mover líneas

Existen dos comandos que te pueden ser de mucha utilidad para copiar y mover líneas de forma sencilla, sin necesidad de desplazar el cursor de donde se encuentre, se tratan del comando co y m.

Así, si estás utilizando número relativos, por ejemplo, puedes copiar dos líneas atrás a la línea en la que te encuentras utilizando el comando :-2co-1. Pero no solo esto, sino que también puedes copiar rangos de líneas. Por ejemplo, puedes copiar las cuatro líneas anteriores donde te encuentras, :-6,2co-1.

Igualmente, también puedes mover líneas, sin necesidad de desplazamiento del cursor. Básicamente la operativa es la misma que has visto en el punto anterior. Así para mover la línea anterior a la línea siguiente podría ser algo como :-2m+2. Y de la misma manera que has hecho antes, también pudes mover rangos de líneas, no solo una línea. Por ejemplo, :-6,-2m+2.

Borrar líneas

Habitualmente, para el borrado de líneas, yo me desplazo a la primera de las líneas que tengo que borrar, y utilizo <n>dd donde <n> se corresponde con el número de líneas que quiero borrar. Sin embargo, esto mismo lo puedes hacer vía comandos utilizando para ello :<n>d donde <n> en este caso es la línea que quieres borrar. Por supuesto que también puedes borrar un rango de líneas. Por ejemplo puedes borrar desde la línea 5 a la 10 utilizando :5,10d.

Interactuar con la línea de comandos

Es posible ejecutar comandos en la línea de comandos, en la shell, directamente desde Vim, sin necesidad de salir. Para esto, hacer esto, en la línea de comandos de Vim, tienes que anteponer ! al comando que quieras ejecutar.

Así, por ejemplo, si ejecutas :!ls verás los archivos que se encuentran en el directorio que te encuentres.

Pero aún hay algunas ayudas interesantes como,

  • :! ejecutará el último comando que se encuentre en la historia del shell
  • :!! repite el último comando
  • :silent !<comando> no necesitas pulsar Enter
  • :r !<comando> pone la salida de la ejecución en el texto en el que estés trabajando.

Cualquiera de los comandos que has visto es, sinceramente espectacular. Si estás trabajando con archivos, esto seguro te resultarás de enorme utilidad. Por ejemplo, cuando estás haciendo operaciones con ellos, puedes listarlos, utilizando :r !ls para posteriormente modificarlos o manipularlos, como puede ser modificar el nombre de cada uno de ellos, de forma sencilla y sin utilizar un bucle.

Un terminal en Vim

A partir de la versión 8.2 tienes en Vim la posibilidad de iniciar un terminal. Simplemente en la linea de comandos ejecuta :term. En este caso, Vim se dividirá en dos, y podrás trabajar directamente en el terminal.

Para pasar de una ventana a otra puedes utilizar Ctrl+w Ctrl+w o por supuesto también puedes utilizar Ctrl+w j o cualquiera de los otros atajos de teclado.

Mientras estés utilizando el terminal, estás en una consola con todas sus ventajas e inconvenientes. En el momento que ejecutes exit, puedes realizar diferentes operaciones con lo que allí quede, como por ejemplo copiar en el terminal y pegar en otra memoria.

Un uso interesante es el de tener las instrucciones que tienes que ejecutar en una ventana de Vim, y en la otra un terminal de forma que tan solo tienes que ir copiando de una ventana a otra.

Así, cuando estás en la ventana donde tienes las instrucciones utilizas la combinación "+yy para copiar cada una de las líneas, y por otro lado, utilizas Ctrl+Mayusc+V para pegar desde el portapapeles.

Me parece una solución muy elegante para hacer todo este tipo de operaciones.

Rangos

Otra opción muy interesante que tienes es la de poder introducir rangos de números, algo que es relativamente normal de hacer. Así, para escribir 5 líneas del 1 al 5, simplemente tienes que ejecutar la siguiente instrucción :put=range(1,5).

Pero, esto no es nada mas que la punta del iceberg, y si quisieras escribir 5 IP cada una terminada en 10, 20,… En este caso la instrucción podría ser,

for i in range(0,50,10) | put='192.168.1.'.i | endfor

Si, y es que como te puedes imaginar, tienes la posibilidad de crear tus propios scripts para Vim, para automatizar todo tipo de tareas.

Encadenando operaciones

Como ya has podido deducir del apartado anterior, es posible encadenar operaciones utilizando el separador |. De esta manera, en una misma línea de comando, puedes introducir tantas operaciones como necesites. Que mejor forma de ser mas productivo con Vim, que uniendo varias operaciones en una sola línea. Por ejemplo, podrías encadenar varias operaciones de reemplazar como te muestro a continuación,

:%s/192/145/g | %s/168/111/g

Inicio y fin

Moverse al inicio o fin de una línea o de una palabra es algo que ya tienes prácticamente interiorizado. En el caso de la línea se trata de utilizar 0 y $, para el inicio y fin respectivamente, mientras que para el caso de una palabra, puedes utilizar b y e.

Pero, todavía puedes ser mas productivo con Vim, ¿y si no te quieres mover al principio de la línea exactamente y si te quieres mover al primer carácter que no sea un tabulador o espacio?¿Sabes a lo que me refiero? Básicamente me estoy refiriendo a las sangrías. En el caso de las sangrías, no quieres moverte al principio de la línea, sino justo donde termina la sangría. Para estos casos, tienes varias opciones,

  • _ te lleva al primer carácter que no sea un espacio de la línea en curso.
  • + hace exactamente lo mismo que el caso anterior, pero salta a la línea siguiente
  • - idem, pero para la línea anterior.

Esto te va a permitir moverte con mucha facilidad y soltura entre sangrías, sin que te tengas que preocupar de donde se encuentre esta exactamente.

Conclusiones

Estas son algunas de las muchas opciones que puedes realizar para ser mas productivo con Vim. Sinceramente, esto es un no parar. Hay tanto que aprender y mejorar… Y eso que parecía un editor de nada.


Imagen de portada de krisna iv en Unsplash

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *