Hace tiempo escribí un post sobre cómo sacarle el máximo rendimiento a tu terminal utilizando zsh, en el que introducía zsh y el framework oh-my-zsh para tener una experiencia más placentera usando el terminal.
Hoy veremos algunas funcionalidades extras que nos aporta esta herramienta y que nos puede ayudar a decidirnos a empezar a utilizarla.
Auto Completado
Una de las cosas que comentamos en el artículo original era que el auto completado de comandos era bastante potente, pero podemos mejorarlo aun más. Añadiendo esto a nuestra configuración
zstyle ':completion:*' verbose yes zstyle ':completion:*' group-name ''
obtendremos la lista de posibles acciones agrupadas por tipo. Por ejemplo, escribiendo vi y dándole al tabulador
$ vi --- external command VirtualBox vi view vim vimdiffvisudo --- shell function vi_mode_prompt_info virtualenv_prompt_info --- alias vim --- local directory videos/
Como podéis ver, en vez de salirme un listado enorme con todo, vemos las opciones agrupadas por tipo. Como dijimos anteriormente, no hace falta usar el tabulador para moverme por las opciones, si no que puedo utilizar los cursores del teclado para ir más rápido.
Y no solo vale con comandos, si no también con argumentos de los comandos:
$ ping - --- option -L -- suppress loopback of multicast packets -Q -- somewhat quiet -R -- record route -a -- audible for each packet -d -- set SO_DEBUG on the socket -f -- flood ping -n -- numeric output only -q -- quiet -r -- bypass normal routing tables -v -- verbose -I -P -S -T -c -i -l -m -p -s -t
O subcomandos:
$ git --- common commands add -- add file contents to the index bisect -- find by binary search the change that introduced branch -- list, create, or delete branches checkout -- checkout a branch or paths to the working tree clone -- clone a repository into a new directory commit -- record changes to the repository diff -- show changes between fetch -- download objects and refs from another repository grep -- print lines matching a pattern init -- create an empty Git repository log -- show commit logs merge -- join two or more development histories together mv -- move or rename a file, a directory, or a symlink pull -- fetch from and merge with another repository push -- update remote refs along with associated objects rebase -- forward-port commits to the updated upstream reset -- reset current HEAD to the specified state rm -- remove files from the working tree show -- show various types of objects status -- show the working tree status tag -- create, list, delete or verify a tag object signed
Sugerencias
He visto muchas utilidades en Gthub que cuando escribimos un comando incorrectamente en la terminal, nos sugiere comandos válidos porque seguramente nos hemos equivocado en algún caracter. Esto que es bastante útil viene también con zsh. Podemos comprobar cómo funciona
$ vom zsh: correct 'vom' to 'vim' [nyae]? y
Cuando detecta que el comando es incorrecto, nos ofrece alguna sugerencia y nos da cuatro posibles respuestas:
- n: no, quiero probar mi comando aunque no lo reconozca zsh
- y: sí, quiero abrir la sugerencia de zsh
- a: abortar, olvídate de mi comando y volvamos a la terminal
- e, volver a la terminal para editar mi comando antes de ejecutarlo
Sugerencias en auto completado
Fíjate que incluso mezcla estas dos funcionalidades! Utilicemos el auto completado otra vez
$ cat tost corrections (errors: 1) test.jmx test.json --- original tost
Al escribir cat tost y pulsar tabulador, me sugiere posibles correciones, ya que no hay ningún fichero que coincida con el nombre “tost”, pero sí con “test”.
Lo mismo con comandos
$ vom corrections (errors: 1) comptry vim compcall vimdiff composer homebrew/ --- original vom
Conclusión
Como véis, hay muchos motivos para utilizar zsh y que estar en la terminal sea un placer. ¿Conocéis algún otro truco que no esté aquí?