El manifiesto de aplicaciones web
6 minutos de lectura
Fecha: 20/3/2018
Antes de hablaros del proyecto open source oh-my-zsh es necesario explicar que es Zsh y porqué merece la pena que comenzar a usarlo.
En primer lugar Zsh es la abreviatura de ZShell una terminal alternativa a la que traen muchas distribuciones de Linux.
Por ejemplo, Ubuntu viene configurado para ser usado con Bash, y aunque no esta nada mal, podríamos buscar por la razón que sea, un Shell más potente y configurable, si eso es lo que necesitas muy probablemente acabes llegando hasta Zsh.
Que nadie piense que por instalar Zsh pierdes Bash, al instalarlo simplemente tendrás disponibles ambos, y después tu decides cual usar (casi seguro que va a ser Zsh ya verás).
Zsh es una alternativa muy interesante al shell nativo de nuestra distribución de Linux/Unix/MacOs y esto no soy yo quien lo dice, solo el proyecto Oh-my-Zsh tiene alrededor de 67.000 estrellas en Github y ha sido forkeado más de 14.000 veces.
Para que os hagáis una idea de la dimensión de esto, jQuery tiene casi 50.000 estrellas, así que se trata de un proyecto que usa muchísima gente y algo bueno tendrá para que sea así.
¿Entonces que es oh-my-zsh?
Dicho de forma simple oh-my-zsh es un proyecto que sirve para configurar y añadirle plugins y temas al Shell Zsh
Para que nos hagamos una idea de porque son importante los plugins y los temas, simplemente pensemos en un editores como Sublime, Studio Code, Notepad++ y otros tantos, ¿que haríamos si nos quitaran los plugins y temas instalados que les tenemos?
Pues Zsh es lo mismo, por si solo es muy bueno y ya tiene características que lo hacen superior a otros shells, pero si le añadimos plugins y temas (que tiene muchísimos) aumentamos sus capacidades y conseguimos un terminal justo para lo que queremos.
Por esta razón el framework oh-my-zsh es casi imprescindible.
¿Que ventajas tiene oh-my-zsh?
Claro está que, solo porque tenga esa enorme cantidad de estrellas en Github, no es una razón válida para que convencer a nadie que lo instale en su máquina.
Como lo que realmente importa es el valor real que te aporta en el día a día, vamos a ver las razones por la que puede ser el mejor shell para ti, obviamente si de estas cosas que te cuento ninguna te va a resultar práctica no lo instales.
En primer lugar la integración que nos proporciona con git es espectacular, y un buen programador suele usar siempre algún tipo de control de versiones, siendo git la opción más popular hoy en día.
Entre las cosas que ganamos esta la información adicional que puede mostrarnos por consola, como la rama en la que estamos, ver si tenemos cambios por confirmar, ver cuantos commits estamos por encima o por debajo del remoto, número de stashes, el hash de nuestro commit actual…
La verdad es que tenemos a nuestra disposición prácticamente toda la información relevante de nuestro repo, ahora es decisión nuestra que queremos mostrar en nuestro tema.
Mucha información podría hacer poco legible nuestra consola, así que tenemos que decidir que necesitamos tener.
Además oh-my-zsh nos da un gran número de alias para casi todas las operaciones que necesitemos usar en git, y otras muchas que seguro no hemos usado nunca, si quieres ver cuales son te los dejo aquí debajo.
Alias | Comando |
---|---|
g | git |
ga | git add |
gaa | git add —all |
gapa | git add —patch |
gb | git branch |
gba | git branch -a |
gbd | git branch -d |
gbl | git blame -b -w |
gbnm | git branch —no-merged |
gbr | git branch —remote |
gbs | git bisect |
gbsb | git bisect bad |
gbsg | git bisect good |
gbsr | git bisect reset |
gbss | git bisect start |
gc | git commit -v |
gc! | git commit -v —amend |
gca | git commit -v -a |
gca! | git commit -v -a —amend |
gcan! | git commit -v -a —no-edit —amend |
gcans! | git commit -v -a -s —no-edit —amend |
gcam | git commit -a -m |
gcsm | git commit -s -m |
gcb | git checkout -b |
gcf | git config —list |
gcl | git clone —recursive |
gclean | git clean -fd |
gpristine | git reset —hard && git clean -dfx |
gcm | git checkout master |
gcd | git checkout develop |
gcmsg | git commit -m |
gco | git checkout |
gcount | git shortlog -sn |
gcp | git cherry-pick |
gcpa | git cherry-pick —abort |
gcpc | git cherry-pick —continue |
gcs | git commit -S |
gd | git diff |
gdca | git diff —cached |
gdct | git describe —tags git rev-list --tags --max-count=1 |
gdt | git diff-tree —no-commit-id —name-only -r |
gdw | git diff —word-diff |
gf | git fetch |
gfa | git fetch —all —prune |
gfo | git fetch origin |
gg | git gui citool |
gga | git gui citool —amend |
ggpnp | git pull origin $(current_branch) && git push origin $(current_branch) |
ggpull | git pull origin $(current_branch) |
ggl | git pull origin $(current_branch) |
ggpur | git pull —rebase origin $(current_branch) |
glum | git pull upstream master |
ggpush | git push origin $(current_branch) |
ggp | git push origin $(current_branch) |
ggsup | git branch —set-upstream-to=origin/$(current_branch) |
gignore | git update-index —assume-unchanged |
gignored | git ls-files -v | grep «^:lower:« |
git-svn-dcommit-push | git svn dcommit && git push github master:svntrunk |
gk | gitk —all —branches |
gl | git pull |
glg | git log —stat —max-count = 10 |
glgg | git log —graph —max-count = 10 |
glgga | git log —graph —decorate —all |
glo | git log —oneline —decorate —color |
glog | git log —oneline —decorate —color —graph |
glp _git_log_prettily (git log —pretty=$1) | |
gm | git merge |
gmt | git mergetool —no-prompt |
gp | git push |
gpoat | git push origin —all && git push origin —tags |
gr | git remote |
grba | git rebase —abort |
grbc | git rebase —continue |
grbs | git rebase —skip |
grbi | git rebase -i |
grh | git reset HEAD |
grhh | git reset HEAD —hard |
grmv | git remote rename |
grrm | git remote remove |
grset | git remote set-url |
grt cd $(git rev-parse —show-toplevel | |
grup | git remote update |
grv | git remote -v |
gsd | git svn dcommit |
gsps | git show —pretty = short —show-signature |
gsr | git svn rebase |
gss | git status -s |
gst | git status |
gsta | git stash save |
gstaa | git stash apply |
gstd | git stash drop |
gstl | git stash list |
gstp | git stash pop |
gsts | git stash show —text |
gts | git tag -s |
gunignore | git update-index —no-assume-unchanged |
gunwip | git log -n 1 | grep -q -c «—wip—» && git reset HEAD~1 |
gup | git pull —rebase |
gvt | git verify-tag |
gwch | git whatchanged -p —abbrev-commit —pretty = medium |
gwip | git add -A; git ls-files —deleted -z | xargs -r0 git rm; git commit -m «—wip—« |
Otro de los puntos fuertes que tiene es la navegación entre directorios, y considero que es muy interesante porque si usamos mucho la linea de comandos seguro que lo usamos. Veamos algun ejemplo:
- Solo con escribir cd y tabular nos muestra todos los directorios que cuelgan del punto donde estamos, podemos movernos por ellos luego tanto con el tabularor como con las flechas.
- Escribiendo ‘..’ navega al directorio superior, con ‘…’ navega dos niveles por encima, con ‘….’ ya son tres niveles, y así sucesivamente.
- No es necesario escribir cd para navegar, si pones solo el nombre de la carpeta ya es suficiente.
- Ni es necesario escribir todo el nombre de la carpeta para navegar, si pones cd y comienzas a escribir el nombre, el intenta adivinarlo, de manera que autocompleta si solo hay una opcion o te muestra los coincidentes si hay varias.
A mayores existen plugins como autojump o Z que aun mejoran más la navegación, para cosas como navegar automáticamente al directorio que mas utilizamos (hay un historial de directorios) solo con escribir porque letra o letras empieza.
También mejora la búsqueda en el historial de comandos, si no sabes de lo que hablo, tu en Bash por ejemplo pulsando la tecla de flecha arriba/abajo podías navegar entre los últimos comandos que fuiste usando.
En Zsh se va un paso más allá y si comienzas a escribir un comando y luego pulsas las teclas de flecha arriba/abajo muestra los últimos comandos usados que coincidan con lo que has puesto.
Esta caraterística es como hacer una búsqueda inversa solo que es más rápido.
A mayores como decíamos, podemos usar algunos de los muchos plugins que la comunidad desarrolla para hacerlo aun más completo.
Por citar algunos…
- Zsh-autosuggestions para el autocompletado de comandos
- Sudo que como bien indica sirve para añadir sudo al comando que este escrito o si no hay ninguno al que escribieramos antes.
- Zsh-syntax-highlighting para que resalte la sintaxis en el terminal
- Extract que nos provee de un comando para descomprimir la mayoría de archivos desde el terminal.
¿Como instalo oh-my-zsh?
Si llegados a este punto no estás seguro de si instalar o no Zsh deja que te haga una recomendación, instalalo igual y pruebalo unos dias que es la mejor manera de que te convenzas si merece la pena, total como deciamos al principio no tienes que desinstalar Bash, ni tan si quiera tienes que hacer de Zsh tu shell por defecto, si decides quitarlo no hay ningun problema.
En primer lugar instalamos Zsh con este comando:
sudo apt-get install zsh
Y listo, tenemos la base, ahora instalamos el framework oh-my-zsh para gestionar de forma sencilla todo:
// CON CURL
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
//CON WGET
sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"
Ya tenemos todo listo, más fácil imposible.
Y si no te gusta lo puedes desinstalar con este comando:
uninstall_oh_my_zsh
En un próximo tutorial os explicaré como añadir o quitar plugins y temas, un saludo!