Cygwin: integración con Sublime Text y algunos tips

En este tercer post respecto a Cygwin, voy a compartir un par de cosas que he aprendido, y como integrar Cygwin dentro de Sublime Text para poder abrir una consola dentro del directorio del proyecto que estamos trabajando de manera automática.

Antes de seguir adelante, si no conocen Cygwin, les recomiendo revisar mis dos entradas anteriores al respecto:

INICIAR APACHE Y MYSQL DESDE CONSOLA

Cada vez hago más cosas por consola que mediante la GUI (aunque esté en Windows). Tareas como levantar Apache y MySQL, que antes las hacía desde el panel de XAMPP en mi caso, ahora con un simple comando tengo ambos servicios corriendo en mi máquina. Para ello, encontré dos archivos .bat que XAMPP ejecuta cuando deseas levantar tu servidor web local: apache_start.batmysql_start.bat. Por el contrario, cuando deseas detener esos servicios están apache_stop.bat mysql_stop.bat. Lo que hacen es simplemente en el caso de Apache ejecutar el archivo apache/bin/httpd.exe y en MySQL ejecutar apache/bin/mysqld.exe con ciertas opciones de configuración. Así que bien, basta hacer un alias apuntando a esos archivos para poder levantar los servicios desde consola. Pero para ello, nos vamos a hacer de la ayuda de cygstart:

alias apacheup='cygstart --hide /g/xampp/apache_start.bat'
alias apachedown='cygstart --hide /g/xampp/apache_stop.bat'
alias mysqlup='cygstart --hide /g/xampp/mysql_start.bat'
alias mysqldown='cygstart --hide /g/xampp/mysql_stop.bat'
alias webup='apacheup && mysqlup'
alias webdown='apachedown && mysqldown'
alias webrestart='apachedown && mysqldown && apacheup && mysqlup'

Con todos esos comandos ya podemos manejar nuestro servidor web local. Mediante webup levantamos tanto Apache como MySQL y con webdown los detenemos. Les comentaba que nos hicimos de la ayuda de cygstart el cual hace la conexión con el binario de Windows start, que permite ejecutar programas en una ventana distinta a la actual de trabajo. Es por ello que hemos agregado la opción –hide, que indica que si bien queremos que el proceso se levante, no queremos una ventana, si no que el proceso quede en background. Sin esa opción, cada vez que levantemos Apache o MySQL tendremos una ventana con el proceso ejecutándose.

Como éstos son aliases, deben ir en su archivo ~/.bash_aliases.

VER SI APACHE Y MYSQL SE ESTÁN EJECUTANDO

Desde el panel de XAMPP se podía ver si Apache y MySQL se estaban ejecutando, es útil. Pero como me quería deshacer del panel de XAMPP y manejar todo por consola, creé el siguiente comando para ver el estado de ambos servicios:

Estado de Apache y MySQL
Estado de Apache y MySQL
webstat()
{
    red='\e[0;41m'
    green='\e[0;42m'
    NC='\e[0m' # No Color

    if [[ -n $(ps aux -W | grep httpd.exe) ]]; then
        echo -e "Apache:\t"${green}" RUNNING "${NC}
    else
        echo -e "Apache:\t"${red}" STOPPED "${NC}
    fi

    if [[ -n $(ps aux -W | grep mysqld.exe) ]]; then
        echo -e "MySQL:\t"${green}" RUNNING "${NC}
    else
        echo -e "MySQL:\t"${red}" STOPPED "${NC}
    fi
}

Como esto es una función, ésta debe ir en el archivo ~/.bash_functions. Recuerden que es por un tema de orden, puede ir todo en su ~/.bashrc si quieren, pero no es la idea.

OBTENER LA RUTA DEL DIRECTORIO ACTUAL EN FORMATO WINDOWS

Deben conocer el comando pwd, el cual imprime la ruta actual en la que estamos posicionados. Bien, si lo ejecutan en Cygwin va a dar una ruta del tipo /home/usuario/un-directorio. En muchos momentos he requerido obtener la ruta pero no en el formato Unix, si no en el formato de Windows. Para ello vamos a hacer uso de la herramienta cygpath:

# .bash_aliases
alias pwdw='cygpath -w `pwd`'

Cygpath va a convertir la ruta obtenida mediante pwd a formato Windows gracias a la opción -w. Ahora, en vez de imprimir /home/usuario/un-directorio, con pwdw vamos a obtener C:\cygwin64\home\usuario\un-directorio.

INTEGRACIÓN CON SUBLIME TEXT

Siempre quise poder estar en Sublime Text trabajando en un proyecto y mediante un comando poder abrir una nueva pestaña de consola y que automáticamente apareciera dentro del directorio de trabajo de mi proyecto. Y finalmente lo logré, gracias al paquete Terminal para Sublime Text.

Para que el procedimiento funcione, deben tener instalado ConsoleZ en primer lugar, lo que nos permitirá trabajar siempre en una ventana pero con varias pestañas. Suponiendo que ya tienen instalado ConsoleZ, deben proceder a instalar el paquete Terminal desde el gestor de paquetes de Sublime Text.

Ahora sólo nos queda por configurar dos cosas:

  1. Dentro de Sublime Text, deben ir a las opciones del paquete y copiar el contenido de Settings – Default User – Default para no perder las configuraciones en un futuro update del paquete. Una vez copiado, deben configurar la ruta de ConsoleZ y agregar los parámetros correspondientes, así:
    {
        "terminal": "G:\\ConsoleZ\\Console.exe",
        "parameters": ["-d", "%CWD%"]
    }
    

    Deberán cambiar la ruta correspondiente a su ubicación de ConsoleZ. Por defecto, el paquete viene con los atajos Control + Shift + T para abrir la terminal en el archivo de trabajo y Control + Alt + Shift + T para abrir una terminal en el directorio raíz del proyecto actual. Lamentablemente en Sublime Text 3 al menos, ya existe el atajo Control + Shift + T, que permite abrir archivos cerrados. Y por lo menos yo, lo utilizo harto, así que no soporté que me quitara esa funcionalidad. Así que en las opciones de Key Bindings – User tuve que re-mapear esos atajos:

    [
        { "keys": ["ctrl+shift+c"], "command": "open_terminal" },
        { "keys": ["ctrl+shift+t"], "command": "reopen_last_file" }
    ]
    

    Yo por lo menos sólo utilizo el atajo para abrir una consulta en la ruta actual del archivo de trabajo, por lo que sólo configuré ese comando y dejé de lado el atajo para abrir una consola en el directorio raíz del proyecto. Bien, ahora sólo basta reiniciar Sublime Text y probar el comando, debería abrir una ventana nueva de ConsoleZ cada vez que lo presionamos. Pero eso no es lo que buscaba, yo quería mantener una ventana de ConsoleZ y múltiples pestañas de trabajo.

  2. Para lograr que ConsoleZ mantenga una única instancia, debemos ir a las opciones  y en Behavior -> More… desmarcar la casilla que dice «Allow multiple instances». Reiniciamos ConsoleZ y listo.

EDITAR ARCHIVOS CON SUBLIME TEXT

Finalmente, un último tip, es poder desde la consola abrir Sublime Text para editar un archivo, para ello se utiliza la siguiente función:

# Archivo .bash_functions
subl()
{
    "/c/Program Files/Sublime Text 3/sublime_text.exe" $1
}

Deben ajustar la ruta si es necesario y con ello ya pueden editar archivos con Sublime Text desde la consola.

4 comentarios sobre “Cygwin: integración con Sublime Text y algunos tips

  1. Amigo, no puedo abrir sublime desde el terminal para editar. No se como hacerle :(
    Ya le hice lo que pusiste pero me da error
    El siguiente:
    bash: $’\r’: no se encontro la orden
    bas:/home/LEON/ .bashrc: linea 200: error sintactico cerca del elemento inesperado ‘s’\r’ ‘
    ‘ash: /home/LEON/.bashrc: linea 200: ‘subl()

    Me gusta

  2. Hola, amigo, una nueva pregunta, cuando lleno Sublime settings-users, con esos datos, y ejecuto el comando.
    Me abre Consolez, pero no en el directorio actual :c ¿me ayudas? lo puse tal como esta.
    {
    // The command to execute for the terminal, leave blank for the OS default
    // On OS X the terminal can be set to iTerm.sh to execute iTerm
    «terminal»: «C:\ConsoleZ\Console.exe»,

    // A list of default parameters to pass to the terminal, this can be
    // overridden by passing the "parameters" key with a list value to the args
    // dict when calling the "open_terminal" or "open_terminal_project_folder"
    // commands
    "parameters": ["-d", "%CWD%"]
    

    }

    y me abre en vaio@DESKTOP -EKU4623

    Me gusta

Deja un comentario (puedes utilizar Markdown)