lunes, 3 de diciembre de 2012

Tips para convertirse en un ZinjaI Master (parte 2)

Ya les revelé en el post anterior "secretos" varios para deslizarse de un punto a otro de su proyecto con apenas un puñado de teclas. Digo "secretos" entre comillas porque estos atajos no son secretos para nada. Están a la vista en los menúes y la mayoría comentados en la ayuda. Pero por alguna misteriosa razón, el 99% de los usuarios no los ve, entonces, cuando uso algunos de estos atajos en público no falta quien me pregunte cómo hice eso tan rápido. ¿Después de al menos un cuatrimestre de programar con ZinjaI, jamás le pegaron una mirada al menú Editar para ver que había?. Supongo que la respuesta es no, yo tampoco lo haría al principio. Soy de los que empiezan a usar y ya, sin manuales; pero cuando me decido a adoptar finalmente una herramienta para un trabajo prolongado me tomo un ratito para jugar con su interfaz y ver qué cosas pueden ser útiles que no conozca. En fin, en esta segunda entrega, quiero comentar atajos de teclados para pequeñas tareas de edición, bastante triviales, pero que hacemos millones de veces mientras programamos.

Los atajos de teclado pueden verse en los menúes o en la ayuda.

El primer par de atajos que es obligatorio que conozcan es el formado por Ctrl+L y Ctrl+T. Ctrl+L (L de Line) duplica la linea actual (o las lineas seleccionadas si la selección abarca varias). Su contraparte, Ctrl+Shift+L las elimina. Ctrl+T (T de Toggle) intercambia la linea actual (o las seleccionadas) con la anterior. Es decir, "sube" la linea actual una linea más arriba. Su contraparte, Ctrl+Shift+T la baja. Con este par de atajos se pueden reemplazar unas cuantas pulsaciones de Ctrl+C,flechita-...-flechita,Ctrl+V. Es más directo, suele requerir menos teclas, y, por sobre todo, no mueve el cursor (y esto no es un detalle menor). Es algo muy muy simple, pero creanme que si se acostumbran a eso después van a odiar trabajar en otros editores si no lo tienen.

Pasando ahora a atajos específicos para editar código C++, hay uno básico presente en todo IDE, que es el que permite comentar o descomentar rápidamente algunas líneas de código. En ZinjaI, esto se hace con Ctrl+D (comentar, la D es por mi previa costumbre de usar KWrite y Kate) y Ctrl+Shift+D (descomentar). Si estamos en una línea sin seleccionar nada, Ctrl+D agrega "//" al comienzo para comentar toda la línea. Si la selección abarca varias líneas, Ctrl+D agrega "//" en todas ellas. Pero si la selección abarca solo una parte de solo una linea, Ctrl+D comenta solo esa parte agregando "/*" antes de la selección y "*/" después. El proceso inverso, Ctrl+Shif+D para descomentar, sigue las reglas similares. Esto es muy útil, por ejemplo, cuando estamos probando distintas alternativas en un código, y entonces queremos hacer una cambio en una línea sin perder la versión original. Entonces, estando en esa linea, apretamos Ctrl+L y Ctrl+D, y ya tenemos la copia comentada.

Otro atajo menos popular, pero que puede ser de interés para combinar con estos comandos que trabajan con bloques de líneas, es Ctrl+M. Este atajo selecciona el bloque lógico actual. Esto significa, que si estamos en un término de una expresión que está entre paréntesis selecciona la expresión (de paréntesis a paréntesis), si estamos en una cadena, la cadena (de comilla a comilla), si estamos en un índice de un arreglo, la expresión del índice (de corchete a corchete), y si estamos fuera de todo eso, pero dentro de un bloque de código (algo definido por llaves, como una función, un struct, la parte verdadera de un if, el interior de un while, etc), selecciona ese bloque (de llave a llave). Es una forma rápida de seleccionar toda una función, o toda una estructura condicional o repetitiva. Al seleccionarla por primera vez, el cursor se ubicará al final de la misma, pero si se presiona nuevamente, el cursor se ubicará al inicio. Así que también es una forma rápida de ver desde donde y hasta donde llega un bloque, y moverse de extremo a extremo.

Ejemplo de selección de un bloque if, presionando Ctrl+M dentro del mismo

Y ya que tenemos seleccionado un bloque, podemos utilizar Ctrl+I para corregir su indentado (los tabs a la izquierda según el anidamiento de las estructuras), cosa que también puede aplicarse a la linea actual si no hay selección (y así resulta especialmente útil luego de varios Ctrl+T o Ctrl+Shift+T). Un detalle adicional respecto al indentado, es que esto se aplica automáticamente al pegar código con Ctrl+V (verán que si copian algo de adentro de un for y lo pegan afuera aparece con un tab menos). Si quieren evitar esa corrección, pueden pegar con Shift+Insert (otro atajo muy común para pegar, creo que heredado de editores de DOS, pero que pocos recuerdan).

Siguiendo con la línea de los bloques, habrán notado que hay en los márgenes del código, además de los números de líneas, unos símbolos + y - donde se abren los bloques delimitados por llaves. Haciendo click sobre ellos, se "pliega" el bloque. Esto quiere decir que se muestra solo la primer línea. Los atajos de teclado para plegar y desplegar el bloque actual son Atl+Izquierda y Alt+Derecha, pero más útil pueden ser Ctrl+algún número y Alt+algún número. El primero pliega todos los bloques del nivel que indica el número (cero es para todos los niveles), mientras que el segundo los despliega. Los #ifdefs también determinan bloques, así que por ejemplo, en un .h que define clases, el #ifdef que lo envuelve sería el primer nivel, las clases el segundo, los métodos implementados en las clases el tercero, las estructuras de control en esos métodos el cuarto, etc. En ese caso, con Ctrl+2 plegamos todas las clases y entonces vemos un "resúmen" con la lista de clases definidas sin ver su contenido. Con 3 en lugar de 2, vemos las clases y los prototipos de los métodos sin ver las implementaciones. Solo hay que aclarar que estos últimos atajos (los que usan números) nunca pliegan el bloque actual, por lo que hay que aplicarlos desde afuera de cualquier clase o método para obtener esos resultados.

 A la izquierda, el plegado nivel 3 muestra la clase y sus métodos pero sin las implementaciones;
a la derecha, el plegado nivel 1 muestra solo los nombres de clases y prototipos de funciones globales definidas.

Por útilmo, otro de los que considero más usados, y que no es tan desconocido es Ctrl+H (H de Header). Cuando un error de compilación dice "no está definido tal símbolo" porque nos olvidamos un #include, podemos ir a pararnos sobre el nombre de ese símbolo (con Ctrl+<) y apretar Ctrl+H para que ZinjaI agregue solo el #include que corresponda (si es que adivina cual). En general esto anda muy bien (hasta detecta si el #include ya estaba, pero estaba comentado, para descomentarlo), a menos que el archivo tenga muchos #ifdefs, en cuyo caso puede llegar a confundirse respecto a dónde agregarlo. Funciona tanto para elementos del C++ estándar o de cualquier biblioteca que tenga su índice de autocompletado correctamente cargado, como para las cosas definidas por el usuario en su proyecto, y tiene en cuenta también las rutas adicionales para buscar cabeceras configuradas en pefil de compilación, de forma de colocar una ruta simplificada si es posible.

En la próxima entrega escribiré algo sobre otros atajos y trucos varios, incluyendo algunos que, al igual que estos, nos evitan tener que escribir parte del código, pero algo más complejos.

Este post es continuación de Tips para convertirse en un ZinjaI Master (parte 1) y continúa en Tips para convertirse en un ZinjaI Master (parte 3)

No hay comentarios:

Publicar un comentario en la entrada