Lógica difusa en el terminal
Me gusta personalizar el terminal personal, porque esto me permite ser mas productivo. Sin embargo, para mi tiene un grave inconveniente, y es cuando busco esa misma personalización en el terminal del trabajo. Y no solo me refiero al terminal de mi máquina, sino también, al terminal que se encuentra en algunas de los cientos de máquinas en los que entro habitualmente. Podría copiar toda mi configuración personal a cada una de esas máquinas, pero no tengo claro que eso sea práctico. También es cuestión de acostumbrarte a realizar las modificaciones en tu equipo y posteriormente desplegarlas, allí donde lo necesites… no solo, es cuestión de acostumbrarse, sino que mas bien es cuestión de ser práctico y organizado. Sea como fuere, en este artículo te quiero comentar sobre una herramienta que me gustaría estuviera en todas las máquinas a las que accedo y a las que pudiera acceder… Me refiero a fzf, una herramienta que introduce la lógica difusa en el terminal. Lo cual, como ya te puedes imaginar, redundará en una mejora significativa de tu productividad.
Lógica difusa en el terminal
¿Que es la lógica difusa?
Esto de la lógica difusa no es nada novedoso, ni mucho menos. Te diría que esto lo escuché por primera vez, hace casi veinte años y relacionado con la detección de incendios. Quien me iba a decir, que veinte años después, estaría escribiendo sobre lógica difusa para el terminal. Que auténtica maravilla.
Pero para entonces ya tenía mas años que la tos. Se bautizó como lógica difusa en 1965, pero la idea de la misma se remonta a tiempos de Aristóteles. Sin embargo, el máximo apogeo de se produjo al principio de los noventa, como resultado de la colaboración entre el gobierno, las universidades y las industrias japonesas.
Todo esto se materializa en cosas que hoy a ti te pueden parecer normales, pero que hace unos pocos años, no lo eran. Cuestiones como la estabilización de la imagen en las cámaras fotográficas, la regulación del aire acondicionado, o incluso la cantidad de detergente que hay que utilizar en una lavadora, son posibles gracias a la lógica difusa
El conjunto de los hombres altos
Para explicar la lógica difusa, recurro al ejemplo utilizado por Zadeh, que como he comentado anteriormente, es el que le puso el nombre a la lógica difusa.
Así, para definir quien pertenece a un conjunto de hombres altos, y recurriendo a la teoría de la lógica clásica, se podría decir que son aquellos que tienen una altura igual o superior a 1,80 metros. Así, todos los que cumplen con esta condición pertenecen a este grupo. Es decir, que si mides 1,79 metros no pertenecerás. Algo un poco injusto, ¿no te parece?.
Sin embargo, la lógica difusa establece la pertenencia a ese grupo de hombres altos de forma relativa. De esta manera, un hombre que mida 1,79 pertenecerá a este prestigioso grupo un grado del 80%, mientras que uno que mida 1,50 lo hará con un grado del 10%.
En la lógica difusa es todo relativo. Así en la lógica clásica o eres alto o no lo eres, mientras que en la lógica difusa, eres mas o menos alto. Interesante ¿no te parece?
¿Como aplicar la lógica difusa en el terminal?
Pongamos que quieres ir a un directorio concreto. Tienes dos opciones, o le dices al terminal la ruta concreta, o conforme vas escribiendo en el terminal, este te va sugiriendo opciones en base a esta lógica difusa. Así, vas llegando al resultado correcto, en sucesivas iteraciones, utilizando ese grado de pertenencia al grupo.
Y en concreto ¿que herramienta puedes utilizar para aplicar la lógica difusa en el terminal? Utilizando fzf.
¿Que es fzf? fzf es un buscador de propósito general que utiliza la lógica difusa. Básicamente se tata de un filtro interactivo para la línea de comandos que puedes utilizar con cualquier lista.
¿Que tipo de listas puede tratar? Cualquier lista a las que te enfrentas habitualmente, como puede ser un listado de archivos, el historial de los comandos que has ejecutado en la consola, los procesos que se están ejecutando en tu equipo, un listado de commits de tu repositorio de git, y mucho mas.
Esta herramienta, la puedes utilizar en solitario, o en scripts, pero esta segunda opción te lo comentaré mas adelante.
Instalación
La instalación de esta herramienta es bien sencilla. Pero además de instalarte la propia herramienta te añade los atajos de teclado para Bash, Zsh y Fish. Puedes instalarlo desde los repositorios de tu distribución, como por ejemplo, en el caso de Ubuntu, solo tienes que ejecutar,
sudo apt install fzf
Otra opción que tienes para instalar esta herramienta es directamente clonar el repositorio e instalar. Para esto tienes que ejecutar la siguiente instrucción,
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
Utilizando fzf
Antes de comenzar a utilizar esta herramienta, asegúrate de tener completada la configuración. En el caso de que lo instales vía los repositorios oficiales de tu distribución, entiendo que los atajos y autocompletados deberían estar configurados, pero en el caso de que no lo estuvieran puedes recurrir al último comando mencionado.
Por otro lado, indicarte que por defecto fzf
comienza a pantalla completa y la línea de comandos la sitúa al final. Sin embargo, esto es configurable, para ello, en tu archivo de configuración .bashrc
incluye esta línea,
export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border'
Con esta configuración, no ocupará la totalidad de la pantalla, tan solo el 40%, la línea de comandos aparecerá en la parte superior, y además añade un bonito marco.
Atajos de teclado
Como ya te puedes imaginar, fzf viene con los correspondientes atajos de teclado que seguro te harán la vida más cómoda y fácil.
Ctrl+j
,Ctrl+k
,Ctrl+n
,Ctrl+p
, son los atajos de teclado para desplazarte entre los resultados. Si, como puedes ver, se corresponden con los atajos de teclado de Vim, añadiendo elCtrl
. Es cierto que también puedes utilizar las flechas de cursor, pero, sinceramente, no te lo recomiendo. Con estos atajos de teclado , te moverás mucho mejor, y será mucho más prácticoEnter
para seleccionar un resultadoCtrl+c
,Ctr+g
yEsc
para salir
Para la línea de comandos
Si bien, los atajos de teclado para moverte entre los resultados ofrecidos por fzf, son imprescindibles, lo que seguro encuentras mas que interesante, son los atajos de teclado para la línea de comandos.
Ctrl+t
te permite seleccionar archivos y directoriosCtrl+r
para seleccionar entre los resultados del historialAlt+c
igual que en el primer caso, pero solo para directorios
Pero, como no solo de atajos de teclado vive el ser humano, también tienes opciones de auto completado, tanto para Bash como para zsh.
Autocompletado
En el caso de archivos y directorios, tienes que utilizar **
para realizar el autocompletado utilizando fzf
. Por ejemplo,
vim **<Tab>
te permite abrir un determinado archivo utilizandofzf
para seleccionarlo.vim ../**<Tab>
lo mismo que en el caso anterior, pero en esta ocasión para los archivos que se encuentran en el directorio inmediatamente superior.cd **<Tab>
para cambiar de directorio, igualmente utilizandofzf
Pero el autocompletado no solo te permite trabajar con archivos y directorios, también puedes trabajar con procesos. Así para matar un determinado proceso, puedes utilizar la siguiente instrucción,
kill -9 <Tab>
Y por supuesto, también para tus conexiones vía ssh
o telnet
, para las que al igual que has hecho anteriormente con el autocompletado de directorios y archivos, utilizas el comodín **
, por ejemplo,
ssh **<Tab>
telnet **<Tab>
De la misma manera también puedes trabajar con variables,
unset **<Tab>
export **<Tab>
No se vayan todavía que aún hay mas
Si lo que has visto hasta el momento ya te parece increíble, indicarte que fzf
lo puedes combinar con otras herramientas, y dotarlas así de mayores funcionalidades.
Vim con fzf
Así la primera combinación que puedes conseguir, es Vim con fzf. Así, desde Vim puedes abrir un archivo utilizando la lógica difusa en el terminal, pero esta vez aplicado a Vim.
Además de instalar fzf
como te he comentado anteriormente, necesitas instalar un complemento para Vim, que te permite utilizarlo desde el interior del editor. Para ello, tienes que incluir las siguientes líneas en tu archivo de configuración de Vim,
Otra herramienta que seguro te será de gran utilidad, y a la que dedicaré un futuro artículo es ripgrep
. Para instalar esta segunda herramienta, simplemente desde el terminal tienes que ejecutar sudo apt install ripgrep
.
Si no conoces Plug
te recomiendo que le des una lectura al artículo sobre snippets en Vim, donde hablo sobre este gestor de complementos para Vim.
Plug 'junegunn/fzf.vim'
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Una vez instalado todos los requerimientos y el complemento para Vim, el siguiente paso es empezar a utilizar esta potente herramienta. Así, para abrir un archivo en Vim utilizando fzf
, tienes que utilizar :Files
Pero además puedes utilizar fzf
no solo para buscar por nombre, sino también para buscar por el contenido del archivo. Así, en este caso tienes que utilizar el comando :Rg
. Este comando utiliza ripgrep
para hacer una búsqueda recursiva por el contenido de los archivos.
Pero, no solo esto, este complemento te permite muchas mas funcionalidades como por ejemplo, gestionar los archivos del control de versiones git, trabajar con buffers
, con el historial, o incluso con los esquemas de colores. En este sentido te recomiendo que le des un vistazo a todos los comandos de fzf en Vim. Pero, ves con paciencia, porque si no te darás un verdadero atracón.
Git con fzf
En atareao.es, puedes encontrar distintas aplicaciones y herramientas para gestionar Git. Algunas para el terminal, y otras con interfaz gráfico. Pero, junto con fzf
han surgido diferentes herramientas que te hacen la vida mas sencilla en tu trabajo con esta utilidad. Así, te quiero comentar dos herramientas que puedes utilizar para estos menesteres.
forgit
Según los propios desarrolladores de la aplicación esta herramienta está diseñada para ayudarte a trabajar con git
de forma mas eficiente. Si lo quieres probar, sin necesidad de instalar nada, tan solo tienes que ejecutar la siguiente instrucción en un terminal,
source <(curl -sSL git.io/forgit)
Una vez lo has probado y te has convencido de que es la herramienta que andabas buscando, puedes instalarlo, añadiendo el código en el archivo .bashrc
o incluyendo la siguiente línea en el archivo,
source /directorio-donde-este/forgit.sh
A partir de aquí ya lo puedes utilizar, ¿como?. Tienes varias opciones,
ga
para hacer ungit add
de forma interactivaglo
un visor degit log
gi
un generador interactivo de.gitignore
gd
un visor interactivo degit diff
gss
para gestionar tusgit stash
gclean
paragit clean
.
omgit
La siguiente de las herramientas para gestionar tus repositorios git
es omgit
. Esta herramienta es completamente interactiva, en tanto en cuanto, todas las operaciones que tienes que realizar las haces desde esta única herramienta. La instalación es tremendamente sencilla, tan solo tienes que ejecutar las siguientes instrucciones en un terminal,
git clone https://gitlab.com/Energy1011/omgit.git
cd omgit
sudo ./install.sh
Una vez instalado, dirígete a uno de tus repositorios git
y deja que obre la magia. Para esto, simplemente escribe omgit
y verás todas las opciones que tienes para gestionar ese repositorio.
Espero que te haya gustado este nuevo episodio del podcast. Si puedes, te agradecería una valoración en iVoox y/o en Apple Podcast.
Más información,
Imagen de portada de Wenniel Lun en Unsplash
La entrada Lógica difusa en el terminal aparece primero en El atareao.