]>
Commit | Line | Data |
---|---|---|
900ebffc BB |
1 | # Cuatro tips para ser un buen junkie de la terminal |
2 | ||
c0a45f51 BB |
3 | ![Veces que esta escena ha sucedido en la vida real: 0][junkie-header] |
4 | ||
900ebffc BB |
5 | La terminal es un lugar bonito: todo es más rápido y conciso, puedes hacer más en un comando de lo que puedes hacer en una hora dando clicks, además, siempre te devuelve los libros que le prestas y no se queja si llegas repentinamente a su casa de visita; es casi perfecta. Así sin cambiar nada en cualquier sistema unixoso, ya sea una mac o linux o lo que sea que uses, puedes hacer mucho más de lo que creías que era posible con tan solo abrir una terminal y ponerte a regurgitar comandos. |
6 | ||
7 | Lamentablemente no todo es bonito en el mundo de las terminales, oh no. La terminal es una adicción. Empieza de manera inocente: solo la abres para copiar algunas cosas o listar directorios, tal vez un grep de vez en cuando; o, "yo no quería usarla pero me dijeron que arreglaría mis problemas". Todos tenemos historias como esa, todos empezamos así, pero lo inocente pronto va escalando y ya no entras solo por un `ls` o un `cp`, ahora estás entrando a tu servidor por `ssh`; dejaste el `grep` y ahora usas `ack`; empiezas a usar tu source control sin GUI. Va empeorando cada vez más: Empiezas a ponerte nervioso cada vez que tienes que salir de la terminal, notas como el mouse no es tu amigo como lo pensabas, le gritas sudo a las personas cuando no quieren pasarte la salsa. Oh, es un problema muy grande y cada vez quieres más y más. Una vez que llegas a este estado no queda más que dejarse llevar, pero cada vez tocas límites más oscuros del internet: empiezas a buscar aplicaciones, tips, one-liners y plugins. ¡ALGUIEN PIENSE EN LOS NIÑOS! | |
8 | ||
c0a45f51 | 9 | Afortunadamente no tienes que buscar muy lejos, pues tengo aquí un programa de cuatro pasos para hacerte un mejor junkie de la terminal *(¿Qué, quién dijo algo sobre curar la adicción... que monstruo haría tal cosa?)* |
900ebffc BB |
10 | |
11 | ## 1. Usa vim | |
12 | ||
c0a45f51 | 13 | `vim` es una droga bastante particular: ves a los usuarios veteranos y te sorprende la velocidad con la que hacen todo, parecen magos controlando texto; auténticos code-benders. Luego decides intentarlo y te quedas pasmado por aproximadamente quince minutos pensando: "¿Que significa normal? — ¿Dejé el horno prendido? — ¿Como empiezo a escribir? ... ¡creí que era un editor de texto!" y luego lo cerrarás con un gran sentido de confusión solo para reintentarlo cuando el siguiente artículo sobre `vim` llegue al frontpage de Hacker News. Pero no te rindas: |
900ebffc | 14 | |
c0a45f51 | 15 | 1. Es normal sentirse así. |
900ebffc BB |
16 | 2. Todo va a mejorar. |
17 | 3. Vas a subestimar lo que quiero decir con "Todo va a mejorar". | |
18 | 4. Code-bending. | |
19 | ||
c0a45f51 | 20 | Empezar con `vim` es una experiencia más bien rara porque no estás acostumbrado a usar un editor con esa filosofía, y eso toma práctica; es como aprender un nuevo lenguaje. Mi consejo es el siguiente: avientate un tutorial básico, luego usa vim, luego usa vim, luego usa vim y luego por dios y todo lo sagrado usa vim. Los comandos tienen que grabarse en tu memoria muscular y la mejor forma de hacerlo es usandolos una y otra vez. Guarda un [cheat sheet][vim-cheat2] y consultalo cuando no sepas que hacer y sigue trabajandolo. — Ah, si, una recomendación que puede no ser muy popular en algunos círculos es que no instales plugins cuando estés empezando: aprender a usar lo que el editor solo te ofrece te ayudará a conocer más el núcleo y te hará rápido sin hacerte dependiente en una serie de add-ons que pueden o no existir en el `vim` de tu abuelita (si, tu abuelita lo usa y es muy buena con él, pero no instala plugins — bueno, solo CtrlP) |
900ebffc | 21 | |
c0a45f51 | 22 | Es común que durante tus primeros hits de `vim` quieras dejarlo y volver al abrazo cálido y familiar de tu editor de costumbre. No. Lo. Hagas. Sigue editando hasta que te sangren los dedos y obligate a usarlo hata que te sientas cómodo: Una vez que superes la barrera inicial, irás haciendote más rápido, más rápido, hasta el grado en que te empieza a molestar no tener los controles de `vim` en los clientes de correo, en los `<textarea>` y en los cuadernos de composición. |
900ebffc | 23 | |
c0a45f51 | 24 | Un tutorial recomendado es `vimtutor`: corriendo ese comando en la terminal, podrás seguir un útil tutorial guiado usando el mismo editor. Puedes complementarlo con [uno de tantos][vim-cheat2] [Cheat Sheets.][vim-cheat1] |
900ebffc BB |
25 | |
26 | ## 2. Usa tmux | |
27 | ||
c0a45f51 | 28 | ¿Qué es mejor que una terminal? ¡Muchas terminales!. Cantidades enormes de terminales entre las que te puedes mover con el teclado. `tmux` o `terminal multiplexer` es una aplicación que te ayuda a partir tus sesiones de terminal en pestañas y páneles para particionar tu pantalla y organizar mejor tus diferentes terminales. ¿Cuál es el beneficio? Pues todo depende de para que lo uses; en mi caso: Puedo poner `vim` en la mitad izquierda de la pantalla y dos sesiones de `zsh` en la otra mitad, una arriba de la otra; en la de arriba puedo correr comandos como `ack` y `tree`, o hacer operaciones en el disco; en el otro puedo tener el servidor de rails, un irb o algun log con `less` o `tail`; cuando tengo el monitor extra conectado puedo poner una columna con la letra de la canción que estoy escuchando en rdio; también podría tener `vim` y `zsh` en una pestaña, `irb`, `rails s` o `mongo` en otro; o puedo tener un proyecto de rails en un tab, cada rack engine que esté usando en otro y el server de staging en ssh en otro... `htop` en bla bla bla bla bla bla ... De verdad cambia como organizas tu trabajo. |
900ebffc | 29 | |
c0a45f51 | 30 | La otra cosa que hace muy bien es permitirte despegarte de una sesión para reconectarte luego. Puedes abrir una sesión de `tmux` para un proyecto, y cuando ya quieras olvidarte de el simplemente te despegas de la sesión y vuelves a tu terminal normal o empiezas a trabajar en otro proyecto. Cuando quieras volver a el, solo vuelves a pegarte a la sesión y de nuevo estarán tus ventanas como las habías dejado. Es bastante sorprendente el cambio que hace poder "entrar y salir" de contextos: cuando vuelves a la posición de un proyecto anterior, es como si tu cerebro se cambiara de modo al mismo en que estabas cuando lo dejaste. Incluso puedes cerrar la terminal y seguirán ahí (solo no apagues la computadora, para eso hay que seguir leyendo) |
900ebffc | 31 | |
c0a45f51 | 32 | Además, te hace ver interesante. |
900ebffc | 33 | |
c0a45f51 | 34 | Si quieres configurar mejor tu `tmux` y aprender algo sobre que puede hacer, recomiendo [esta guía][tmux1] [en dos partes][tmux2]. |
900ebffc BB |
35 | |
36 | ### Extra hit: tmuxinator ### | |
37 | ||
c0a45f51 | 38 | Si empiezas a usar `tmux` y quieres tener más control sobre como empezar proyectos y que hacer en caso de que apagues la computadora y se mueran tus sesiones, entonces necesitas [`tmuxinator`][tmuxinator]: una gema de ruby que te permite definir tus pestañas, páneles y los comandos que correrá cada uno en un conveniente archivo de yaml que se usará para generar tu ambiente cada vez que tenga que reiniciar la sesión. |
900ebffc BB |
39 | |
40 | ## 3. Sincroniza tus dotfiles | |
41 | ||
c0a45f51 | 42 | Llega un punto en la vida de todo junkie en la cual tiene que usar una computadora nueva, prestada o robada. Ach! Terrible. Después de todo el tiempo que invertiste configurando tu prompt, tus opciones de `ack`, tu configuración de `vim`, tu profile de `bash` o `zsh`; solo para perderlo todo. Llegas a un triste prompt blanco y vacío y tienes tres opciones: a) re-configuras todo hasta un modo aceptable, b) usar la terminal en modo vainilla, o c) pasar tus archivos de configuración de una maquina a otra. |
900ebffc | 43 | |
c0a45f51 | 44 | Obviamente, la razón más sana es c), pero cargar los archivos es una molestia y además, ¿Qué pasa si luego modificas una en otra maquina? o ¿Qué pasa si tienes que usar la terminal remota de un hermitaño que no te permite conectar dispositivos físicos? ... Si tan solo *git* hubiera *git* algo *git* que haga *git* el manejo *git* de versiones de archivos de texto *giiiiit* de una manera *giiiiiiiit* distribuida y que además sea fácil *giiiiiiiiiiiiiiiit* de *giiiiiiiiiiiiiiiiiiiiiit*.... |
900ebffc BB |
45 | |
46 | `git`. | |
47 | ||
c0a45f51 | 48 | Puedes crear un directorio `.dotfiles` en tu directorio base y hacer un repo de git ahí y meter todos tus "dotfiles" como `.bash_profile` o `.ackrc` o todo el directorio `.vim`. Luego solo es cuestión de hacer links a su lugar original y ahora podrás clonar tu repo y reaplicar tus configuraciones en cualquier maquina que tenga git. ¿Y si no tiene `git`? ¿Por qué no lo tiene? ¿Por qué la estas usando? ¿De quién es? ¿Quién podría estar a la puerta a estas horas? ¿Acaso es el dueño de la computadora? Ahora si que estás en problemas. |
900ebffc | 49 | |
c0a45f51 | 50 | Si tienes dudas, puedes consultar [esta buena guía][dotfiles] para tener tus dotfiles sincronizados en "la nuuuubeeeeee" *(agregue un efecto de arcoiris)*. |
900ebffc BB |
51 | |
52 | ## 4. Usa zsh | |
53 | ||
c0a45f51 | 54 | `bash` es una buena terminal y ha sido mi amiga desde hace años: hemos vivido tantas cosas juntos que se podría decir que nuestra relación es tal que solo una persona superficial la dejaría. Pues soy superficial, y la dejé. Por algo mejor: `zsh`. |
900ebffc | 55 | |
c0a45f51 | 56 | ¡Blasfemia! ¿Qué podría tener de mejor `zsh`? Una lista de mis features favoritos: |
900ebffc BB |
57 | |
58 | * Autocomplete en los parametros de comandos *(e.g. con kill te muestra una lista de procesos y con git te muestra los comandos como checkout, merge, etc.)* | |
59 | * Autocompletado interno de paths *(e.g. /Us/be/Do/pr/m + tab => /Users/benbeltran/Documents/projects/my-project.)* | |
60 | * Historial compartido. | |
c0a45f51 | 61 | * Correción de errores *(e.g. si escribes vmi, te preguntará si no quieres decir vim :)* |
900ebffc | 62 | * Poder navegar con las flechas cuando aparecen las opciones para tab completion |
c0a45f51 | 63 | * Globbing avanzado que te permite hacer operaciones avanzadas como seleccionar solo los symlinks de un subdirectorio, o solo los directorios que tengan cierto patrón. * Muchos, muchos plugins. |
900ebffc | 64 | |
c0a45f51 | 65 | La mejor forma de disfrutar `zsh` es utilizando [oh-my-zsh][oh-my-zsh]: una forma sencilla de instalar `zsh` con una buena cantidad de plugins, temas y configuraciones que te harán la vida más fácil. Yo personalmente uso una versión modificada del tema "prose", pero hay mucha variedad para elegir. |
900ebffc BB |
66 | |
67 | --------------------------------- | |
68 | ||
c0a45f51 | 69 | Espero que haya sido de utilidad para esos junkies que estan buscando que más pueden hacer con su terminal, y espero que caigan más y más en el vicio. Si quieres regañarme o exigirme pago por algún destrozo que haya causado en tu casa, o si le molesta que lo tutee, puede encontrarme en [twitter][twitter] o por [correo / jabber][mail]. |
900ebffc BB |
70 | |
71 | [vim-cheat1]: http://www.viemu.com/vi-vim-cheat-sheet.gif | |
72 | [vim-cheat2]: http://www.tuxfiles.org/linuxhelp/vimcheat.html | |
73 | [tmux1]: http://blog.hawkhost.com/2010/06/28/tmux-the-terminal-multiplexer/ | |
74 | [tmux2]: http://blog.hawkhost.com/2010/07/02/tmux-%E2%80%93-the-terminal-multiplexer-part-2/ | |
75 | [tmuxinator]: https://github.com/aziz/tmuxinator | |
76 | [dotfiles]: http://blog.smalleycreative.com/tutorials/using-git-and-github-to-manage-your-dotfiles/ | |
77 | [oh-my-zsh]: https://github.com/robbyrussell/oh-my-zsh | |
78 | [twitter]: https://twitter.com/benbeltran | |
79 | [mail]: mailto:ben@nsovocal.com | |
c0a45f51 | 80 | [junkie-header]: /img/articles/junkie/junkie-header.png |