Bram Moolenaar November 2000 - Traducido por Victorhck (2022)
Si pasas mucho tiempo escribiendo texto sin formato, escribiendo programas o código HTML, puedes ahorrar mucho de ese tiempo utilizando un buen editor y usándolo de manera efectiva. Este documento te mostrará pautas y trucos para hacer tu trabajo de una manera más rápida y con menos errores.
El editor de texto de código abierto Vim (Vi IMproved) será el utilizado aquí para presentar las ideas de una edición más efectiva, pero también se aplican a otros editores. Escoger el editor adecuado es, en realidad, el primer paso hacia una edición de texto más efectiva. La discusión sobre qué editor es el mejor para ti, ocuparía mucho espacio por lo que se evitará. Si no sabes qué editor utilizar o no estás satisfecho con el que estás utilizando actualmente, dale una oportunidad a Vim, no te decepcionará.
[Los comandos y opciones de Vim se mostrarán con esta fuente
]
La mayor parte del tiempo se emplea en leer, comprobar errores y buscar el lugar adecuado en el que trabajar, en vez de insertar nuevo texto o en cambiarlo. Navegar por el texto, es una tarea que se realiza a menudo, por tanto deberías aprender cómo hacerlo de manera rápida.
Es muy frecuente que quieras buscar algún texto que sabes que está por ahí. O buscar todas las líneas de texto donde aparece cierta palabra o frase. Simplemente puedes utilizar el comando /patrón
para encontrar el texto deseado, pero hay maneras más interesantes:
*
. Tomará la palabra que se encuentre debajo del cursor y buscará la siguiente.incsearch
, Vim mostrará la primera coincidencia del patrón buscado, mientras la estés escribiendo. Esto ayuda a mostrar rápidamente si se produce algún error en el patrón.hlsearch
, Vim resaltará todas las coincidencias del patrón marcándolas con un fondo amarillo. Esto da un rápido vistazo de dónde te llevará el comando de búsqueda. En un texto de un código, sirve para mostrar dónde es utilizada una variable. No es necesario mover el cursor para ver todas las coincidencias.En texto estructurado hay incluso más posibilidades de moverse de una manera rápida por el texto. Vim tiene comandos específicos para programas en C (y lenguajes similares como C++ y Java):
%
para saltar de un la apertura de un paréntesis a su pareja de cierre. O de un “#if” a su pareja “#endif”. De hecho, %
puede saltar a diferentes parejas de elementos. Es muy útil comprobar si las construcciones () y {} están equilibradas correctamente.[{
para volver al “{” del comienzo del bloque de código actual.gd
para saltar del uso de una variable a su declaración local en el archivo.Por supuesto existen muchos más. La cuestión es que necesitas aprender estos comandos. Podrías objetar que no es posible que aprendas todos estos comandos, (hay cientos de comandos de movimientos diferentes, algunos simples, otros más inteligentes) y que te llevaría semanas de entrenamiento aprenderlos todos. Bueno, no necesitas hacerlo, en vez de eso, identifica cual es tu forma específica de editar y aprender solo esos comandos que hacen que tu edición de texto sea más efectiva.
Hay tres pasos básicos:
Vamos a utilizar un ejemplo para mostrar cómo funciona:
*
para buscar otros lugares en los que aparece el nombre de la función, pero acabas pasando por un montón de coincidencias en donde la función es utilizada en vez de dónde está definida. Llegas a la conclusión de que debe haber una manera más rápida de hacer esto.CTRL-]
y te das cuenta que al usarlo te ahorra mucho tiempo. Para hacerlo más sencillo, añades unas cuantas líneas a tu archivo Makefile para generar de manera automática el archivo de etiquetas.Un par de cosas a considerar cuando sigas estos tres pasos:
En las siguientes secciones encontrarás sugerencias de acciones con las que la mayoría de la gente tiene que lidiar. Puedes usarlas como inspiración para usar los tres pasos básicos para tu propio trabajo.
Hay un número limitado de palabras que escribimos. E incluso un número limitado de párrafos o frases. Especialmente en los programas de ordenador. Obviamente, no querrás escribir lo mismo dos veces.
A menudo querrás cambiar simplemente una palabra por otra. Si esto hay que hacerlo en todo el archivo, puedes utilizar el comando :s
(sustituir). Si únicamente es necesario cambiarlo en algunos casos, un método más rápido es utilizar el comando *
para encontrar la siguiente coincidencia de la palabra y utilizar cw
para cambiar la palabra. Después escribir n
para encontrar la siguiente palabra y .
(punto) para que repita el comando anterior cw
.
El comando .
repite el último cambio. Un cambio, en este contexto, se refiere a insertar, borrar o reemplazar un texto. Poder repetir esta acción es una utilidad muy potente. Si organizas tu edición de texto en torno a ello, muchos cambios se convertirán simplemente en pulsar únicamente la tecla .
para realizar los cambios. Ten cuidado si haces otros cambios entre medias, porque el comando reemplazará el cambio que estabas repitiendo. En su lugar, quizás te podría interesar marcar la ubicación usando el comando m
, continuar con tu cambio repetido y regresar más tarde a esa ubicación para cambiar lo que fuera necesario.
Algunos nombres de funciones o de variables pueden ser muy complicadas de escribir. ¿Puedes escribir rápidamente “XpmCreatePixmapFromData” sin ningún error y sin volver a revisar cómo se escribe? Vim tiene una utilidad de completado automático que hace que eso sea sencillo. Busca palabras en el archivo que estás editando, y también en los archivos #include. Puedes escribir “XpmCr” y después pulsar CTRL-N
y Vim la completará a “XpmCreatePixmapFromData” para ti. No solo hacer esto te ahorra mucho tiempo de escritura, también evita que cometas errores y tener que solucionarlos más tarde cuando el compilador te muestre un mensaje de error.
Cuando estás escribiendo una frase o una oración muchas veces, hay incluso una manera más rápida de hacerlo. Vim tiene una utilidad con la que grabar una macro. Escribes qa
para empezar a grabar la macro en el registro ‘a’. Después escribes tus comandos de manera normal y para finalizar pulsas q
de nuevo para detener la grabación de la macro. Cuando quieras repetir la macro grabada, simplemente escribe @a
. Hay 26 registros disponibles para esto.
En la grabación de la macro puedes repetir muchas acciones diferentes, no solo insertar texto. Ten esto en cuenta cuando sepas que vas a repetir algo.
Una cosa a tener en cuenta cuando grabes una macro, es que los comandos serán repetidos exactamente como los escribiste. Cuando te muevas por el texto, debes tener en cuenta que el texto por el que te muevas podría ser diferente cuando el comando sea repetido al reproducir la macro. Moverse cuatro caracteres a la izquierda podría funcionar en el texto donde estás grabando la macro, pero podrían ser cinco caracteres cuando se repitan los comandos. A menudo es necesario utilizar comandos para moverse por los diferentes textos (palabras, frases) o moverse a un caracter específico.
Cuando los comandos que necesitas repetir se van haciendo más complejos, escribirlos bien a la primera se vuelve más difícil. En vez de grabarlos, deberías escribir un script o una macro. Esto es muy útil para crear plantillas para partes de tu código, por ejemplo, la cabecera de una función. Puedes hacer esto, tan inteligente como quieras.
Es normal cometer errores al escribir. Nadie puede evitarlo. El truco consiste en detectarlos y corregirlos rápidamente. El editor debería poder ayudarte con esto. Pero necesitas decirle lo que está mal y lo que está bien.
A menudo cometerás los mismos errores una y otra vez. Tus dedos simplemente no hacen lo que quieres. Esto puede corregirse con las abreviaciones. Veamos algunos ejemplos:
:abbr Lunix Linux
:abbr accross across
:abbr hte the
Las palabras se corregirán de manera automática después de que las hayas escrito.
El mismo método puede ser utilizado para escribir una palabra larga, escribiendo únicamente unos pocos caracteres. Es especialmente útil para palabras que te resultan difíciles de escribir y así evitar escribirlas mal. Algunos ejemplos:
:abbr pn pingüino
:abbr MS Mandrake Software
Sin embargo, este método tiende a expandir la palabra completa cuando quizás no lo necesitas, lo que hace difícil saber cuándo realmente quieres únicamente escribir “MS” en tu texto. Es mejor utilizar palabras cortas que por sí mismas no tengan significado propio.
Para encontrar errores en tu texto, Vim tiene un método inteligente de resaltado. En realidad, esto estaba destinado a ser utilizado para resaltar la sintaxis de los programas, pero también puede detectar y resaltar errores.
El resaltado de sintaxis muestra los comentarios en color. Esto no parece una funcionalidad muy importante, pero una vez que comienzas a utilizarlo, verás que se convierte en una gran ayuda. Rápidamente puedes localizar texto que debería ser un comentario, pero no está resaltado como debería (quizás olvidaste añadir el marcador que indica que es un comentario). O viste una línea de código resaltada como un comentario (olvidaste insertar un “/”). Estos son los errores que son difíciles de localizar en un texto simplemente en blanco y negro y que pueden hacer que pierdas mucho tiempo tratando de depurar el código.
El resaltado de sintaxis, también puede encontrar paréntesis a los que le falta una pareja. Un paréntesis “)” sin pareja de apertura, es resaltado con un fondo rojo. Puedes utilizar el comando %
para ver cómo coinciden e insertar un “(” o “)” en la posición correcta.
Otros errores comunes también se detectan rápidamente, por ejemplo, usar “#included <stdio.h>” en lugar de “#include <stdio.h>”. Es fácil pasar por alto el error en blanco y negro, pero rápidamente se da cuenta de que “include” está resaltado mientras que “included” no lo está.
Un ejemplo más complejo: para el texto en inglés hay una larga lista de todas las palabras que se usan. Cualquier palabra que no esté en esta lista podría ser un error. Con un archivo de sintaxis se pueden resaltar todas las palabras que no están en la lista. Con algunas macros adicionales, se pueden agregar palabras a la lista de palabras, para que ya no se marquen como un error. Esto funciona tal como cabría esperar en un procesador de textos. En Vim, se implementa con scripts y se pueden ajustar aún más para tu propio uso: por ejemplo, para verificar solo los comentarios en un programa en busca de errores ortográficos.
La gente no trabaja en un solo archivo. En su mayoría, hay muchos archivos relacionados y se editan varios uno tras otro, o incluso varios al mismo tiempo. Deberías poder aprovechar tu editor para hacer que trabajar con varios archivos sea más eficiente.
El método de las etiquetas mencionado anteriormente, también funciona para saltar entre archivos. La uso más normal, es generar un archivo de etiquetas para el proyecto completo en el que estés trabajando. Puedes saltar rápidamente entre todos los archivos del proyecto para encontrar las definiciones de funciones, estructuras, tipos de definiciones, etc. El tiempo ahorrado frente a la búsqueda manual es inmenso, crear un archivo de etiquetas es la primera cosa que hago cuando estoy navegando por un programa.
Otro método muy potente, es encontrar todas las ocurrencias de un nombre en un grupo de archivos, utilizando el comando :grep
. Vim realiza una lista de todas las coincidencias, y salta a la primera. Con el comando :cn
te llevará a cada una de las siguientes coincidencias. Esto es muy útil cuando necesitas cambiar ek número de argumentos en la llamada de una función.
Los archivos Include contienen información útil. Pero encontrar el que contiene la declaración que necesitas ver, puede llevar mucho tiempo. Vim conoce los archivos include y puede buscar en ellos la palabra que buscas. La acción más común es buscar el prototipo de una función. Coloca el cursor sobre el nombre de la función en su archivo y escribe [I:
Vim mostrará una lista de todas las coincidencias para el nombre de la función en los archivos incluidos. Si necesita ver más contexto, puede saltar directamente a la declaración. Se puede usar un comando similar para verificar si incluyó los archivos de encabezado correctos.
En Vim puedes dividir el área en el que se muestra el texto en pantalla en varias partes para editar archivos diferentes. Así puedes comparar el contexto de dos o más archivos y copiar/pegar texto entre ellos. Hay muchos comandos para abrir y cerrar ventanas, saltar entre ellas, ocultar de manera temporal archivo, etc. De nuevo deberás utilizar los tres pasos básicos que se mencionan al comienzo para seleccionar el grupo de comandos que quieres aprender a utilizar.
Hay más usos de ventanas múltiples. El método de previsualización de etiquetas es un muy buen ejemplo. Esto abre una ventana de visualización especial, mientras el cursor se mantiene en el archivo en el que estás trabajando. El texto en la ventana de previsualización muestra, por ejemplo, la declaración de la función para el nombre de la función que está bajo el cursor. Si mueves el cursor a otro nombre y lo mantienen durante un segundo, la ventana de previsualización ahora mostrará la definición de ese nombre. Podría ser también el nombre de una estructura o una función que está declarada en un archivo incluido en tu proyecto.
Un editor es para editar texto. Un programa de correo electrónico es para enviar y recibir correos electrónicos. Un sistema operativo es para ejecutar programas. Cada programa tiene su propia tarea y debería ser bueno haciéndola. La potencia llega cuando tenemos diferentes programas que pueden trabajar juntos.
Un ejemplo simple: Necesitas escribir un informe de no más de 500 palabras. Seleccionas el párrafo actual mediante la selección visual y lo escribes en el programa “wc”: vip:w !wc -w
. El comando externo “wc -w” es utilizado para contar las palabra. ¿Fácil, no?
Siempre habrá alguna funcionalidad que necesites que no esté en el editor. Hacer posible filtrar texto con otro programa significa que puedes añadir esa funcionalidad de manera externa. Siempre ha sido el espíritu de Unix tener programas separados que hagan bien su trabajo y trabajen juntos para realizar una tarea más grande. Desafortunadamente, la mayoría de los editores no funcionan muy bien junto con otros programas. Por ejemplo, no puedes reemplazar el editor de correo electrónico en Netscape por otro. Terminas usando un editor con pocas funcionalidades . Otra tendencia es incluir todo tipo de funcionalidades dentro del editor. Emacs es un buen ejemplo de dónde puede terminar eso. (Algunas personas lo llaman un sistema operativo que también se puede usar para editar texto).
Vim intenta integrarse con otros programas, pero esto sigue siendo una lucha. Actualmente es posible utilizar Vim como el editor en MS-Developer Studio y Sniff. Algunos programas de correo electrónico que admiten el uso de un editor externo, como Mutt, pueden utilizar Vim. La integración con Sun Workshop está en progreso. Generalmente esto es un área que tiene que ser mejorada en el futuro más cercano. Solo así conseguiremos un sistema que sea mejor que la suma de sus partes.
A menudo trabajarás con texto que tienen algún tipo de estructura, pero diferente de lo que admiten los comandos disponibles. Así que, tendrás que recurrir a los “bloques de compilación” del editor y crear tus propias macros y complementos para trabajar con ese texto. Aquí ya estamos llegando a las cosas más complicadas.
Una de las cosas más simples es acelerar el ciclo de edición-compilación-solución. Vim tiene el comando :make
, que inicia la compilación, comprueba los errores que produce y te permite saltar a la ubicación de esos errores para solucionar los problemas. Si utilizas un compilador diferente, los mensajes de error no se reconocerán. En vez de regresar a antiguo sistema de “anotarlos a mano”, deberías ajustar la opción ‘errorformat’. Esto le dice a Vim cuales son tus errores y cómo obtener el nombre del archivo y el número de línea de estos. Funciona para mensajes de error complicados de gcc, así que seguramente serías capaz de hacerlo funcionar en casi cualquier compilador.
A veces adaptarse a un tipo de archivos es únicamente una cuestión de ajustar algunas opciones o escribir algunas macros. Por ejemplo, para saltar a las páginas de manual, puedes escribir una macro que guarde la palabra bajo el cursor, limpie el buffer y después lea la página del manual para esa palabra en el buffer. Esa es una manera simple y eficiente de buscar referencias cruzadas.
Utilizando los tres pasos básicos, puedes trabajar de una manera más efectiva con cualquier tipo de archivo estructurado. Simplemente piensa en las acciones que quieres realizar con el archivo, encuentra los comandos del editor que lo hacen y comienza a utilizarlos. Es realmente tan simple como parece. Simplemente tienes que hacerlo.
Aprender a conducir un coche conlleva esfuerzo. ¿Es esa una razón para seguir usando tu bicicleta? No, te das cuenta que necesitas invertir tiempo para aprender una nueva habilidad. La edición de texto no es algo diferente. Necesitas aprender nuevos comandos y convertirlos en un hábito.
Por otra parte, no deberías tratar de aprender cada comando que ofrece un editor. Eso sería una completa pérdida de tiempo. La mayoría de personas sólo necesitan aprender un 10 o 20% de los comandos para sus trabajos. Pero es un conjunto de comandos diferentes para cada persona. Es necesario que aprendas de vez en cuando y te preguntes si hay alguna tarea repetitiva que pudiera ser automatizada. Si realizas una tarea solo una vez y no crees que tengas que volver a realizarla de nuevo, no intentes optimizarla. Pero probablemente te des cuenta que estás repitiendo algo muchas veces a la hora. Entonces busca la documentación para encontrar el comando que haga eso de una manera más rápida. O escribe una macro que la realice. Cuando es una tarea más extensa, como alinear una clase especial de texto específico, podrías buscar en foros o por Internet para ver si alguien más ya lo solucionó antes que tu.
Los pasos básicos esenciales es la última parte. Puedes pensar en una tarea repetitiva, encontrar una solución idónea para ella y después del fin de semana olvidar cómo lo hiciste. Eso no funciona. Tendrás que repetir la solución hasta que tus dedos lo hagan de forma automática. Solo entonces conseguirás el nivel de eficiencia que necesitas. No intentes aprender muchas cosas a la vez. Pero el realizar unas pocas cosas al mismo tiempo sí funcionará. Para conseguir que tus dedos se adapten con trucos que no utilizas a menudo, quizás deberías escribirlos para poder echarles un vistazo más tarde cuando los necesites. De todas formas, si mantienes tu meta siempre a la vista, encontrarás maneras de hacer tu edición de texto más y más efectiva.
Un último consejo, para recordarte qué ocurre cuando las personas ignoran todo lo anterior. Todavía veo a gente que pasa la mitas de su día detrás de una pantalla, mirando a la pantalla y después a dos de sus dedos, de nuevo a la pantalla, etc. Y después se preguntan por qué se cansan tanto… ¡Escribe con diez dedos! No solo es más rápido, también es mucho menos cansado. Utilizando una programa para tu ordenador únicamente una hora al día, solo te llevará un par de semanas aprender a mecanografiar.
La idea para el título del artículo, proviene del exitoso libro “Los 7 hábitos de las personas altamente efectivas” de Stephen R. Covey. Lo recomiendo a quien quiera solucionar sus problemas personales y profesionales (¿y quién no quiere?). Aunque algunas personas dirán que proviene del libro de Dilbert “Siete años de gente altamente defectuosa” del dibujante Scott Adams (¡también recomendado!). Más libros y CD recomendados en https://iccf-holland.org/click1.html.
Bram Moolenaar es el autor principal del editor Vim. Escribe las funcionalidades principales de Vim y selecciona qué código por otras personas es incluido. Se graduó en la Universidad Técnica de Delf como técnico de computadoras. Ahora trabaja principalmente en software, pero todavía sabe cómo manejar un soldador. Es el fundador y tesorero de ICCF Holland, que ayuda a huérfanos en Uganda. Hace trabajos freelance como arquitectura de sistemas, pero pasa la mayoría de su tiempo trabajando en Vim. Su dirección de correo electrónico es Bram arroba Moolenaar.net.