Cmder una consola de Linux en Windows

Personalmente cada día hago un uso más intensivo de la consola de comandos, ya sea para programar con PHP (usando Laravel o Yii), Node.js, incluso para mis proyectos web usando Gulp, y claro está, no podría faltar el uso de la consola de comandos para administrar mis repositorios git.

Pero todo hay que decirlo, la consola de comandos de Windows no es particularmente buena, o más bien, tendría que decir que no es particularmente completa; claro está, tenemos la consola PowerShell que nos brinda muchas más funcionalidades, pero para ciertas tareas se queda corta, sobre todo cuando trabajamos con proyectos Open Source, que en su inmensa mayoría, por no decir todos, están construidos para ser usados desde entornos *nix.

Fue esta necesidad la que me impulsó en la búsqueda de un buen emulador de terminal (un emulador de terminal *nix) para Windows. Mi primer acercamiento fue mysysgit (les recomiendo la versión portable, que pueden incluso tener en un dispositivo USB). Digamos que estuve muy satisfecho al principio, pero luego quise y necesité más. Una de las cosas que quise y necesité fue tener más de una terminal en la misma ventana, y también poder definir aliases para mis comandos y aplicaciones más usados.

Así que comencé una búsqueda en internet, y como en muchas otras oportunidades, stackoverflow me dió la respuesta, y así fue como llegué a Cmder, el que a mi concepto es el mejor emulador de terminal que he probado en Windows (todavía me falta probar Terminator).

A la vez que cumple con todo lo que necesitaba y quería como soporte para git a través de mysysgit, multiples consolas en una sola ventana y aliases, también me permite escoger el esquema de colores de una lista preestrablecida con los esquemas más usados o conocidos, o personalizar un esquema a mi gusto, entre muchas más funcionalidades.

Instalación

Lo primero que debemos hacer es descargar una copia de Cmder de su sitio web; recomiendo bajar la versión full que es la que viene con mysysgit. La podemos descomprimir donde queramos.

Posteriormente procedemos a ejecutar el archivo Cmder.exe que se encuentra dentro del directorio en el que descomprimimos los archivos. Nuestra primera vista será la siguiente:

Configuración

Como vimos anteriormente, la instalación de Cmder es muy simple, así que a continuación procederemos a su configuración, para que sea mucho más útil y fácil de usar. Debo aclarar que Cmder nos permite guardar la configuración tanto en el registro del sistema (no lo recomiendo) como en un archivo en nuestros PC o dispositivos USB. Para acceder a la configuración de Cmder hay dos formas: click en la parte superior izquierda de la ventana de Cmder o Win + Alt + P.

General

Hay algunos parámetros por defecto de Cmder que no me gustan o no me parecen cómodos, como por ejemplo que aparezca un ícono en la barra de aplicaciones por cada consola que abra de Cmder (cuando divido la ventana para tener varias consolas):

Multiples íconos de Cmder

Para cambiar este comportamiento vamos a la sección Main => Task bar y en la categoría de Taskbar buttons cambiamos de Show all consoles a Active console only:

Mostrar solo la consola activa

Otro parámetro por defecto que me gusta cambiar es la transparencia de la ventana de Cmder. Personalmente me gusta tener una ventana con un poco de transparecia, ya que en ciertas circunstancias ayuda mucho. Para cambiar la transparencia de la ventana de Cmder vamos a la sección Features => Transparency y cambiamos a nuestro gusto la categoría Alpha transparency:

Posición y Tamaño de la Pantalla

Algo que me gusta configurar en Cmder es que la ventana siemrpe arranque en la misma posición y tamaño que la última vez que la usé, eso se configura en la sección Main => Size & pos y marcar la opción Auto Save window size and position on exit:

Startup

Personalmente creo que lo mejor es que nuetsra shell de inicio siempre sea bash, para esto debemos seleccionar la shell por defecto en la configuración, en la sección startup, tercera opción (Specified named task):

Comandos Adicionales

Hay algunos comandos que no vienen de serie en mysysgit como por ejemplo chown, md5sum, unrar, wget, zip. Estos nuevos comandos, que básicamente son ejecutables, los podemos obtener del proyecto UnxUtils, o de otras fuentes si gustan. Una vez tengamos los nuevos ejecutables, los debemos copiar en f:/cmder/vendor/msysgit/bin, (de ahora en adelante tomaré esta ruta como ejemplo, reemplácenla por la suya).

Aliases

Cmder nos permite definir aliases de manera fácil y rápida, simplemente debemos adicionarlos al archivo aliases que se encuentra en f:/cmder/config. A continuación les presento los alises que trae Cmder por defecto:

e.=explorer .
gl=git log --oneline --all --graph --decorate  $*
ls=ls --color $*
pwd=cd

Como podemos ver los aliases se implementan mediante una expresión simple de asignación, siendo la parte izquierda el alias y la parte derecha el comando o acción que debe ejecutar dicho alias. Personalmente los alias que más utilizo son los de git, y también algunos accesos directos a mis herramientas de desarrollo como Sublime Text, Netbeans, Notepad++, Total Commander, etc.. A continuación les dejo un extracto de mi lista de aliases (zsh aliases):

# GIT aliases
g=git $*
gst=git status $*
gl=git pull $*
gup=git pull --rebase $*
gp=git push $*
gd=git diff $*
gdc=git diff --cached $*
gdv=git diff -w "$@" | view - $*
gc=git commit -v $*
gc!=git commit -v --amend $*
gca=git commit -v -a $*
gca!=git commit -v -a --amend $*
gcmsg=git commit -m $*
gco=git checkout $*
gcm=git checkout master $*
gr=git remote $*
grv=git remote -v $*
grmv=git remote rename $*
grrm=git remote remove $*
gsetr=git remote set-url $*
grup=git remote update $*
grbi=git rebase -i $*
grbc=git rebase --continue $*
grba=git rebase --abort $*
gb=git branch $*
gba=git branch -a $*
gcount=git shortlog -sn $*
gcl=git config --list $*
gcp=git cherry-pick $*
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 $*
gss=git status -s $*
ga=git add $*
gm=git merge $*
grh=git reset HEAD $*
grhh=git reset HEAD --hard $*
gclean=git reset --hard && git clean -dfx $*
gwc=git whatchanged -p --abbrev-commit --pretty=medium $*
gsts=git stash show --text $*
gsta=git stash $*
gstp=git stash pop $*
gstd=git stash drop $*
ggpull=git pull origin $(current_branch) $*
ggpur=git pull --rebase origin $(current_branch) $*
ggpush=git push origin $(current_branch) $*
ggpnp=git pull origin $(current_branch) && git push origin $(current_branch) $*
glp=_git_log_prettily $*
etc...

# custom user aliases
npp=f:\Apps\notepad++.exe $*
nb=f:\Apps\netbeans\bin\netbeans64.exe --console suppress
tc=f:\Apps\totalcmd\TOTALCMD64.EXE
subl=f:\LiberKey\MyApps\SublimeText\sublime_text.exe $*
etc...

Si se preguntan que significa el $* al final de cada alias, (por lo que he podido vislumbrar en mi uso de esta funcionalidad de Cmder), es para que el alias reciba parámetros antes de su ejecución.

Shortcuts

Hay dos shortcuts que yo uso muchísimo, y son los que me permiten dividir la ventana para así tener varias consolas; misteriosamente estos dos importantes shortcuts no vienen configurados, así que vamos a hacerlo. Debemos ir a la sección Keys & Macro y configurar los shortcuts Split: Duplicate active <<shell>> split to bottom y Split: Duplicate active <<shell>> split to right; las combinaciones de teclas que uso para estos dos comandos son ctrl + shift + o y ctrl + shift + e respectivamente:

Shortcut dividir ventana

Llegados hasta aquí podemos decir que tenemos un emulador de terminal muy cómodo y con una configuración básica bastante productiva, pero muchos se preguntarán, ¿para qué me puede servir algo como Cmder?, bueno, por ejemplo para instalar Composer y otros paquetes de software a través de la consola (usando curl por ejemplo), paquetes de software que fueron pensados para ser instalados fácilmente en entornos Linux o Unix y no en Windows, pero también podemos tener toda la fortaleza de tener aliases, multiples consolas en una sola ventana, integración con git y toda la batería de utilidades que nos brinda Cmder.

comments powered by Disqus