viernes, 30 de noviembre de 2012

Tips para convertirse en un ZinjaI Master (parte 1)

No hay IDE en el mundo con el que pueda desarrollar programas en C++ más rápido que con ZinjaI. Y esto se debe a una razón simple y clara: yo lo hice, ergo, yo conozco todas sus mañas y sus trucos. Y que quede claro otra vez: el hecho de que yo sea mucho mucho más rápido con ZinjaI que con algún otro IDE nada tiene que ver con que ZinjaI sea o no sea superior a ese otro IDE. Entonces, dejando para otro día la discusión de si es el mejor o el peor, y suponiendo que si alguien se toma la molestia de leer esto es porque ya ha decidido darle una oportunidad, voy a tratar de compartir en esta serie de posts muchos de esos trucos y explicar muchas de esas mañas que decía antes, para que el lector usuario de ZinjaI pueda aspirar a ser el programador más rápido del oeste.

Para empezar, es fundamental poder moverse cómodamente por el código. Y en ZinjaI hay muchas formas de ir y venir por el mismo. Están las formas convencionales de todo editor de texto: Ctrl+F para buscar, Ctrl+G para ir a un número de linea en particular, F3 y Shift+F3 para repetir la última búsqueda hacia atrás o hacia adelante, y Ctrl+Alt+F para mover el foco del teclado al cuadro de búsqueda rápida que aparece en la barra herramientas. Pero hay algunos atajos específicos que pueden resultar muy muy útiles.

Es muy frecuente querer ir rápidamente hacia la definición de una clase, función o método. Supongamos que estamos en un código que invoca una función o método y queremos ir a ver o corregir algo. Ctrl+F puede ayudar, pero hay una mejor opción que es Ctrl+Shift+G (G de Go to * definition...). Con este atajo aparece una nueva ventanita donde poniendo parte del nombre de una clase, un método, una función o una macro, se muestran rápidamente las coincidencias y al presionar enter se abre el archivo que contenga esa definición en la línea adecuada. Si al presionar Ctrl+Shift+G estamos sobre una palabra o tenemos algo seleccionado, esto aparecerá como valor inicial para la búsqueda. Una forma aún más rápida que funciona en algunos casos, es Ctrl+Click sobre el nombre del método o función en cualquier parte del código. Si no hay ambigüedades (sobrecargas por ejemplo) ZinjaI irá directamente a la defición sin preguntar nada, y si las hay mostrará antes la misma ventana que Ctrl+Shift+G con las posibles opciones.


Para moverse entre archivos, ocurre algo similar. Con Ctrl+Shift+F (F de File), aparece un cuadro muy similar al de Ctrl+Shift+G, pero como imaginarán, en este aperecen los nombres de los archivos abiertos o del proyecto actual. Y la alternativa directa para algunos casos es Ctrl+Enter. Con este atajo abrimos directamente un archivo cuyo nombre aparece en el código fuente. Para Ctrl+Enter se toma como ruta base para los path relativos, el directorio de trabajo del programa, ya que está pensado para abrir rápidamente archivos que son escritos o leidos por el programa, pero también puede funciona para ir a cabeceras desde los #includes. Y finalmente, una tecla para mi fundamental es F12 (la misma tecla que en mi editor preferido hasta antes de ZinjaI, Kate), con la cual alternamos entre un .h y un .cpp de mismo nombre. Si fuese una clase por ejemplo, alternamos entre las implementaciones y la declaración (suponiendo que estén debidamente organizadas en un .cpp y un .h respectivamente).

Una alternativa que estuvo presente desde las primeras versiones y que no todos conocen es Shift+F1. Con F1 accedemos a la ayuda "normal", la que nos dice cosas sobre ZinjaI, pero con Shift+F1 accedemos a una ayuda que nos dice cosas sobre el código. Estaba pensada originalmente para tener una ayuda rápida sobre los elementos del C++ estándar, pero puede generar automáticamente ayuda sobre los símbolos definidos en un programa o proyecto. Por ejemplo, si buscamos ayuda sobre una función, muestra su prototipo completo y dónde está declarada y dónde está definida. Estos "dóndes" son hipervínculos, por lo que sirven para ir rápidamente a estos lugares; y nótese que así podemos diferenciar definición (implementación) de declaración (prototipo), cosa que no es posible con Ctrl+Shift+G o Ctrl+Enter (siempre va a la definición, a menos que no exista todavía). Además, los otros símbolos que ZinjaI reconozca en el prototipo (por ejemplo los tipos de los argumentos o atributos) también serán colocados como hipervínculos para acceder rápidamente a ellos. Si el elemento a buscar fuera, en cambio, una macro de preprocesador, podemos ver su definición completa en este espacio de ayuda. Y hay un bonus adicional para esta ayuda que ZinjaI construye automáticamente. Para hacerlo, utiliza información que brinda el parseo de los archivos fuente (la misma que usa para el autocompletado, y que se actualiza al guardar o ejecutar el programa, o al presionar F2); pero también puede utilizar la documentación generada por Doxygen. Entonces, para clases, métodos y funciones, ZinjaI incluye (si es que existe) las descripciones que obtiene de parsear la documentación HTML generada por Doxygen (siempre y cuando esta sea generada desde ZinjaI). Así podemos ver entonces rápidamente nuestros propios comentarios sobre la misma.


Además de movernos según símbolos definidos y archivos, podemos marcar ubicaciones arbitrariamente con Ctrl+B (no recuerdo nemotecnia para esta B, supongo que las letras razonables ya estaban ocupadas cuando la elegí, pero pueden imaginar que es de Bookmark). Al presionarlo, la linea actual, o las lineas seleccionadas se resaltan con un fondo rojo claro. Esto es útil a nivel visual, para resaltar lineas importantes o ubicar líneas clave de un vistazo. Y también para mover rápidamente el cursor saltando directamente entre las lineas resaltadas, lo cual se hace con Ctrl+Shift+B. En un proyecto, cuáles son las lineas resaltadas es algo que se guarda con el proyecto y por lo tanto permanecerán resaltadas luego de cerrar y abrir ZinjaI nuevamente.


Finalmente, pero no por ellos menos útil, hay un atajo especial para saltar entre los errores o warnings que produce el compilador. Es decir, luego de intentar compilar sin éxito, presionando Ctrl+< y Ctrl+Shift+<, el cursor saltará entre los puntos donde el compilador marcó errores o advertencias, en cualquier archivo del proyecto o programa (y de paso se hará visible el árbol de errores si estaba oculto). Elegí estas tres teclas porque están pegadas en la mayoría de los teclados, para que sea extremadamente rápido y cómodo, ya que es un atajo que uso realmente mucho.

Pero entre tantas idas y vueltas, puede que ya no sepamos bien dónde estamos. Esto suele pasar en archivos largos o en grandes funciones. Presionando Ctrl+Alt+Espacio, ZinjaI nos informa en qué archivo, número de línea y columna se encuentra el cursor, pero también (y esto es lo interesante), dentro de qué definición de clase, o método o función.

Con estos tips ya pueden empezar a saltar alegremente por el código. En las próximas entregas comentaré los atajos más útiles a la hora de editarlo, cuestiones de personalización importantes, y otros trucos varios que espero les sirvan para trabajar cada vez más rápida y cómodamente.

Este post continúa en Tips para convertirse en un ZinjaI Master (parte 2)

5 comentarios:

  1. Muy interesante....
    Felicidades q buen trabajo haz realizado!

    ResponderEliminar
  2. Excelente. realmente tu IDE me resulta más sencillo e intuitivo que otros. Muchas gracias!!!

    ResponderEliminar
  3. muy claras las explicaciones. Quisiera saber si existe una tecla para el seguimiento paso a paso, tipo visual studio. Si no es mucha molestia ¿podrías colocar fondo blanco con letras negras? , he quedado...
    gracias de todos modos.

    ResponderEliminar
    Respuestas
    1. No entiendo bien a qué teclas de VS en particular se refiere. El menú depuración contiene todos los comandos necesarios para realizar una ejecución paso a paso, y cada comando tiene su atajo (en general de F5 a F8, con combinaciones con shift y alt, y hasta se pueden reconfigurar).

      Eliminar