La intención de este tutorial NO es decir absolutamente todos los atajos de teclado, sino nombrar algunos de los más útiles, además de herramientas interesantes o consideraciones a tener en cuenta. ¡Te sorprenderá todo lo que se puede hacer!
Índice de contenidos
- 1. Entorno
- 2. Introducción
- 3. Navegación
- 4. Editor
- 5. Live Templates
- 6. Generación y transformación de código
- 7. Control de versiones
- 8. Integraciones con otros productos
- 9. Tests
- 10. Consideraciones
- 11. Conclusiones y agradecimientos
- 12. Recursos
Entorno
El tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil MacBook Pro 15′ (2 Ghz Intel Core I7, 8GB DDR3).
- Sistema Operativo: Mac OS El Capitan 10.11
- Entorno de desarrollo: IntelliJ IDEA (Minerva) Ultimate 2016.1
Nótese que al usar un Mac, los atajos serán distintos, sin embargo acompaño después del atajo de Mac el correspondiente en Windows.
Introducción
La doctrina principal del Dios de la productividad en IntelliJ es la búsqueda de acciones:
[⌘ ⇧ A] ó [Ctrl + ⇧ + A]
Este es el atajo de teclado que abre el camino a todos los demás atajos. Básicamente despliega un popup de búsqueda en el que puedes buscar cualquier acción. Si la acción buscada tiene asociado un atajo de teclado, éste se mostrará. Aquí podría terminar el tutorial, ya no necesitas más, pero vamos a seguir. Seguro que lo agradeces.
La intención de este tutorial no es decir absolutamente todos los atajos de teclado, sino nombrar algunos de los más útiles, además de herramientas interesantes o consideraciones a tener en cuenta.
Abrir preferencias con [⌘ ,] ó [Ctrl + Alt + S] en Windows. Así lo puedes tunear a tu gusto en un primer vistazo, como por ejemplo mostrando los números de línea en el editor (tengo esa costumbre).
Navegación
Navegar a una clase: [⌘ O] ó [Ctrl + N].
Puede hacerse uso de CamelCase, por ejemplo, para la clase AnotherClientOfAuthenticator, con poner ACOA nos debería mostrar ese resultado.
O a un fichero: [⇧ ⌘ O] ó [Ctrl + ⇧]
Si necesitamos navegar a un directorio, con que acabe en / nos es suficiente.
Por supuesto, también podemos hacer uso de expresiones como * de forma que para DependentObjectArchitecture, con poner *object o *endentOb funcionaría.
Si por lo que sea necesitamos ir a una línea específica de una clase en concreto, podemos hacerlo mediante NombreDeClase:numlinea, como por ejemplo User:24 para ir al fichero User en la linea 24.
Para buscar un método, atributo, etc. en concreto, podemos usar la búsqueda por símbolo con [⌥ ⌘ O] o [Ctrl + ⇧ + Alt + N].
Siguiendo con más opciones de navegación, una forma rápida para trabajar entre distintos ficheros es la acción «Ficheros recientes» mediante [⌘ E] o [Ctrl + E].
Similar a la anterior pero de una forma más directa, a través de (⌘ + [) y (⌘ + ]) ó [Ctrl + Alt + Izquierda] y [Ctrl + Alt + Derecha] podemos ir rotando entre los últimos archivos que hemos ido editando.
Podemos explorar las distintas ventanas como la estructura del proyecto con el botón [⌘ 1] ó [Alt + 1].
Si nos fijamos en las distintas pestañas en los bordes de la pantalla, algunas tienen número. Ese número es el que junto al botón ⌘ ó Alt nos permite navegar hacia esa pestaña. Algunos típicos son [⌘ 4] o [⌘ 5] ó [Alt + 4 o 5] para las ventanas de Ejecución y Debug respectivamente. Para ganar agilidad y ahorrar clicks, se puede volver al editor con la tecla ESC.
Editor
Puedes ahorrarte unos valiosos segundos al tener un atajo de teclado para seleccionar el contexto en que nos encontramos, empezando por la palabra, en lugar de tener que desplazarte al principio o el final de una palabra para seleccionarla. ¿Cómo lo hacemos?
[Alt + Arriba]
Podemos encadenarlo para que nos vaya seleccionando la línea, bloque o incluso el fichero completo en el que nos encontremos. Podemos disminuir la selección con [Alt + Abajo].
Una situación que se nos puede dar normalmente es que nos falte por cerrar un paréntesis o un punto y coma. En estos casos es útil el atajo [⌘ ⇧ Enter].
Una función muy interesante si desarrollas aplicaciones con soporte a varios idiomas es la gestión que hace IntelliJ de ese tipo de ficheros de recursos. Ficheros de properties, como los del tipo messages_en.properties, etc. se pueden editar a la vez en todos los idiomas para así facilitar el llevar un control más exaustivo de lo que se escribe. Para hacer uso de esta funcionalidad únicamente hay que situarse en uno de estos ficheros y ponerse en la vista Resource Bundle en lugar de la vista normal en modo texto.
Con [⇧ + Ctrl + Izquierda/Derecha] se puede alternar entre ambas pestañas.
Live Templates
Estoy convencido de que no se le da la importancia que necesita a este tipo de plantillas personalizables. Navegamos hasta las preferencias de IntelliJ, Editor -> Live Templates. Ahí podemos consultar las que vienen por defecto y añadir nuevas.
Como ejemplo veremos cómo crear una plantilla para hacer un test haciendo uso de variables. Las variables se definen entre símbolos ‘$‘ de forma que podemos ir moviéndonos entre ellas con el tabulador.
Al crear la plantilla definimos con qué atajo se desencadena: en nuestro caso al escribir test y pulsar TAB. Sin embargo, podemos usar enter o cualquier otra. Destacar también la variable $END$, una variable especial que simboliza la posición final al desplazarnos a la última variable.
Como vemos en la imagen, al usarlo nos permite escribir en el lugar que hemos definido como variable en la parte anterior.
Generación y transformación de código
[⌘ N] ó [Ctrl + Enter] para crear código. Por ejemplo, los típicos constructores, getters y setters, generar los métodos con override, etc.
Pero no siempre queremos generar código de la nada, quizá únicamente queremos transformarlo de alguna forma. Por ejemplo, quizá queramos mover un bloque de código a un método privado, o convertir un valor en una constante, incluso guardar en una variable el resultado de una determinada sentencia.
La parte de refactoring es muy extensa. Nombraremos algunas de las opciones más comunes. Uno de los atajos esenciales que tenemos a nuestra disposición es la invocación del menú de refactor con [Ctrl + T].
Es importante recalcar que este menú, como tantos otros, depende del contexto desde el que se le invoque. Es decir, el contenido del menú será distinto si se le invoca desde una parte del código u otra.
En ocasiones nos interesa asignar el contenido de una sentencia a una variable. Además de a través del menú que acabamos de ver, podemos usar el atajo [⌘ ⌥ V] ó [Ctrl + Alt + V].
Si lo que queremos es extraer un método, seleccionamos el código a extraer y pulsamos [⌘ ⌥ M] ó [Ctrl + Alt + M].
Como os habréis dado cuenta, este tipo de atajos siguen un patrón, la letra a pulsar es la inicial de lo quieres extraer: M para método o V para variable. Siguiendo este patrón podemos deducir algunos de los siguientes atajos, como extraer parámetros con [⌘ ⌥ P] ó [Ctrl + Alt + P], campos o atributos con [⌘ ⌥ F] ó [Ctrl + Alt + F] y constantes con [⌘ ⌥ C] ó [Ctrl + Alt + C] entre otros.
Acabando con este apartado, nos puede ser útil el Inline. Consiste en cambiar un método o una variable por su valor asignado. Para usarlo debemos usar [⌘ ⌥ N] ó [Ctrl + Alt + N].
Control de versiones
De forma similar al refactoring, VCS también tiene su menú rápido asociado a través de [Ctrl + V].
Tenemos desde las operaciones típicas como Commit con [⌘ K] ó [Ctrl + K] o Push con [⌘ ⇧ K] ó [Ctrl + ⇧ + K], hasta funciones más avanzadas integradas en IntelliJ. Entre estas últimas destacan las anotaciones (la opción 5 en el menú desplegable más arriba), que permiten saber quién ha sido la última persona en modificar cada una de las líneas de un determinado fichero como vemos más abajo.
Disponemos, por supuesto, de un historial clásico de las ramas y commits que se han ido haciendo a lo largo del tiempo con varias opciones de filtrado. Para poder verlo navegamos hacia la ventana de control de versiones con [⌘ 9] ó [Alt + 9], y posteriormente seleccionamos la pestaña de Log.
Desde este histórico podemos realizar múltiples operaciones: Checkout, Cherry-Pick, ramas nuevas, tags, etc. Además de ver qué archivos se han cambiado en cada uno de los commits y comparar cambios.
Integraciones con otros productos
Merece la pena hablar de las integraciones de distintos productos en IntelliJ, ya sean nativas como Maven o el cliente integrado de bases de datos o a través de plugins, como la integración con Docker o con Findbugs.
La integración con Maven o Gradle permite, entre otras cosas, lanzar y consultar goals directamente.
Conexiones a bases de datos sin necesidad de clientes en la ventana de Database. En ella podemos configurar varias conexiones sobre las que ejecutar consultas a través de una consola que nos proporciona, entre otros, un autocompletado bastante potente.
Una vez creamos una consulta, podemos ejecutarla con [⌘ Enter] ó [Ctrl + Enter]. Al usar este atajo, despliega un menú en el que podemos seleccionar la consulta a ejecutar, desde la más interna a la más externa (en caso de tener consultas complejas).
Como podéis comprobar esto nos evade de tener que usar otros clientes de bases de datos además de que el rendimiento es muy bueno.
La última integración nativa que vamos a ver es la terminal integrada. Mediante el atajo [Alt + F12] navegamos hasta la ventana del terminal, cuyo directorio de trabajo será el de nuestro proyecto. Siempre útil.
Además, a través de Plugins podemos incrementar las integraciones que IntelliJ provee por defecto. Para ello, vamos a las opciones de IntelliJ, en el apartado de plugins. Desde este apartado podemos consultar todos los plugins disponibles para IntelliJ. Nombraremos un par de ellos que proveen integraciones con Docker y Findbugs, para hacernos una idea de lo completos que pueden llegar a ser.
El plugin de integración con Docker nos permite gestionar las imágenes y contenedores de docker desde una ventana integrada en IntelliJ. Lo primero que tenemos que hacer es configurar la conexión contra la máquina de Docker.
Una vez conectados, podemos gestionar nuestros contenedores como queramos.
La integración con Findbugs, a través de la cual puedes analizar el código de tu proyecto en busca de vulnerabilidades o malas prácticas con explicaciones detalladas de cada tipo de problema que encuentre y cómo solucionarlo. Este tipo de herramientas merecen tutoriales a parte. Son un gran modo de aprendizaje y crecimiento como desarrollador.
Tests
Sobre los tests, sólo destacar una funcionalidad integrada que nos permite conocer el porcentaje de cobertura de nuestros tests. Esta opción está disponible a la hora de ejecutar los tests, aunque por defecto no tiene un atajo de teclado asociado recomiendo asignarle alguno.
En cualquier caso, además de ejecutar los tests que le indiquemos, se crea un informe de cobertura que podemos ir explorando por paquetes o clases.
Consideraciones
Algo muy a tener en cuenta es hacer un backup de nuestras preferencias con un simple Export Settings, que podemos buscar con nuestro primer mandamiento: [⌘ ⇧ A]. De esta forma exportaremos nuestras preferencias a un archivo jar que podemos usar en cualquier momento para importar todas nuestras preferencias, como en el caso de una nueva instalación.
Otra consideración a tener en cuenta es el hecho de que la versión de maven que trae el bundle de IntelliJ puede diferir con la que se tenga instalada en local y, por tanto, puede haber incongruencias en los resultados de maven en función de si su ejecución se hace a través de la integración con maven de IntelliJ o desde la propia terminal integrada en IntelliJ.
Conclusiones y agradecimientos
Podemos concluir que nuestra productividad con éste o con cualquier otro IDE recae al final en cuánto conocemos la herramienta. Cuando más conozcamos la herramientas más posibilidades tendremos de hacer las cosas, y más rápido.
Mi recomendación es que siempre intentéis dedicar tiempo a aprender las herramientas que utilizáis con asiduidad. Es muy sencillo aprender alguna cosa nueva sobre la herramienta que nos facilite la vida, aunque llevemos mucho tiempo usándola.
No dudéis en comentar cualquier problema que tengáis o cualquier cosa que creáis que falte en este artículo. Decir que me comprometo a completar el artículo con cosas que vaya descubriendo en el futuro sobre IntelliJ.
Ante la duda, la más… [⌘ ⇧ A] ó [Ctrl + ⇧ + A] .
Gran parte del contenido de este tutorial no sería posible sin la ayuda de mis compañeros de Autentia: Jose Luis Rodriguez, Javier Sanchez o Yair Segura. Echadle un ojo a sus tutoriales, ¡ son la %&¿#* !.
Recursos
En esta sección destacaré contenido útil que merece la pena ver. En concreto el vídeo es lo mejor que podéis ver si tenéis un rato libre.
Pero entonces, ¿IDEA es mucho mejor que ECLIPSE?
«Podemos concluir que nuestra productividad con éste o con cualquier otro IDE recae al final en cuánto conocemos la herramienta. » Llevo un año recibiendo «críticas» por no cambiar a IDEA, herramienta de pago, y según veo en este tutorial no hay casi cosas que no se hagan con el eclipse básico y estoy casi convencido que instalando 3 plugins, 15 minutos como mucho, se podrán hacer las demás.
Si yo fuera tú le daría una oportunidad a IDEA. Sí que es cierto que conociendo la herramienta es como mejor aumentas tu productividad, en IntelliJ y en todas, sin embargo creo que IntelliJ ofrece más facilidades en ese sentido (buena documentación, gran cantidad de opciones de personalización que no te hacen llorar), y todo muy bien montado. A nada que lo pruebas irás comprobando esos pequeños detalles. También es de esperar, al fin y al cabo, por un producto de pago. Eclipse en mi opinión ya se queda atrás, no han sabido cuidarlo bien.
¡Buen post!
Echo en falta el atajo de «Last edit location» -> «Ctrl + Shift + Backspace» (en Ubuntu, en Mac ni idea) que te lleva a la última modificación. Yo lo uso bastante para volver a centrar el foco en lo que estaba editando después de explorar algo en el proyecto.
¡Saludos!
Hola Amigo Peláez.
Espero se encuentre bien, gracias por el artículo está muy interesante.
Por favor, podría ayudarme en el siguiente tema.
Deseo configurar el PHP Storm, de manera que pueda observar una vista previa del trabajo realizado en tiempo real, a medida que vaya colocando el código, se muestre en algún panel la web en ejecución, tal como se puede hacer en brackets.
Espero pueda ayudarme con esta interrogante, saluds cordiales