1 # Cuatro tips para ser un buen junkie de la terminal
3 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.
5 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!
7 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?)*
11 `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:
13 1. Es normal sentirse as��.
15 3. Vas a subestimar lo que quiero decir con "Todo va a mejorar".
18 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)
20 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.
22 Un tutorial recomendado es `vimtutor`: corriendo ese comando en la terminal, podr��s seguir un ��til tutorial guiado usando9 el mismo editor. Puedes complementarlo con [uno de tantos][vim-cheat2] [Cheat Sheets.][vim-cheat1]
26 ��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.
28 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)
30 Adem��s, te hace ver interesante.
32 Si quieres configurar mejor tu `tmux` y aprender algo sobre que puede hacer, recomiendo [esta gu��a][tmux1] [en dos partes][tmux2].
34 ### Extra hit: tmuxinator ###
36 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.
38 ## 3. Sincroniza tus dotfiles
40 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.
42 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*....
46 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.
48 Si tienes dudas, puedes consultar [esta buena gu��a][dotfiles] para tener tus dotfiles sincronizados en "la nuuuubeeeeee" *(agregue un efecto de arcoiris)*.
52 `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`.
54 ��Blasfemia! ��Qu�� podr��a tener de mejor `zsh`? Una lista de mis features favoritos:
56 * 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.)*
57 * Autocompletado interno de paths *(e.g. /Us/be/Do/pr/m + tab => /Users/benbeltran/Documents/projects/my-project.)*
58 * Historial compartido.
59 * Correci��n de errores *(e.g. si escribes vmi, te preguntar�� si no quieres decir vim :)*
60 * Poder navegar con las flechas cuando aparecen las opciones para tab completion
61 * 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.
63 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.
65 ---------------------------------
67 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].
69 [vim-cheat1]: http://www.viemu.com/vi-vim-cheat-sheet.gif
70 [vim-cheat2]: http://www.tuxfiles.org/linuxhelp/vimcheat.html
71 [tmux1]: http://blog.hawkhost.com/2010/06/28/tmux-the-terminal-multiplexer/
72 [tmux2]: http://blog.hawkhost.com/2010/07/02/tmux-%E2%80%93-the-terminal-multiplexer-part-2/
73 [tmuxinator]: https://github.com/aziz/tmuxinator
74 [dotfiles]: http://blog.smalleycreative.com/tutorials/using-git-and-github-to-manage-your-dotfiles/
75 [oh-my-zsh]: https://github.com/robbyrussell/oh-my-zsh
76 [twitter]: https://twitter.com/benbeltran
77 [mail]: mailto:ben@nsovocal.com