FZF es una herramienta que uno no sabia que necesitaba sino hasta haberla utilizada. Para entrar en tema, FZF es un buscador difuso (fuzzy finder) que corre en la terminal. Basicamente es un filtro interactivo que puede buscar en cualquier tipo de lista que se le dé cómo entrada: archvos, historial de comandos, procesos, etc. Lo genial de este programa es la velocidad de las búsquedas y la capacidad de trabajar con otros programas.
Si bien hay varias maneras de instalarlo en Linux, la mejor es utilizar git
para clonar el repositorio ya que hace la instalación y además se integra el shell
.
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
Para instalarlo en Mac vamos a usar al siempre bueno de Homebrew 🍺.
brew install fzf
Para instalar los atajos de teclado del shell
hay que ejecutar:
$(brew --prefix)/opt/fzf/install
El primer uso que le vamos a dar es la búsqueda de archivos. Es sumamente fácil y veloz, podemos ingresar por ejemplo el nombre del programa y luego presionar CTRL+T
para comenzar con la magia. Es a partír de acá que ingresando una parte del nombre de archivo, FZF
busca en todos los subdirectorios por los archivos que se llaman con las palabra buscada.
Otra de las funciones básicas es la búsqueda en el historial. Con el atajo CTRL+R
, FZF
inicia ahora en el modo historial. Nuevamente, ingresamos parte de lo que queremos encontrar y/o seleccionamos con las flechas o CTRL+P
/CTRL+N
para volver a ejecutar el comando recordado del historial.
Finalmente podemos activar el completado de archivos y directorios en bash
y zsh
. Para esto basta ingresar parte del comando con **
y presionar TAB
para iniciar FZF
. Solamente hay que ingresar parte del archivo o directorio que queremos interactuar y este gran programa se encarga del resto.
Exactamente cómo lo leiste. FZF se puede integrar con ripgrep para buscar y encontrar cadenas dentro de los archivos. ¿Qué más se puede pedir?. Sólo tenemos que instalar ripgrep
y agregar la siguente función en .bashrc
o .zshrc
fif() {
if [ ! "$#" -gt 1 ]; then echo "Need a string to search for!"; return 1; fi
rg --files-with-matches --no-messages $1 | fzf --preview "highlight -O ansi -l {} 2> /dev/null | rg --colors 'match:bg:yellow' --ignore-case --pretty --context 10 $1 || rg --ignore-case --pretty --context 10 $1 {}"
}
El uso es simple:
fif buscarCadena
Otra excelente función es la de buscar procesos y poder matarlos. Generalmente esta operación la hacemos con el comando
ps aux | grep -i nombreProceso
Pero con la siguiente función podemos simplificarlo
fkill() {
local pid
if [ "$UID" != "0" ]; then
pid=$(ps -f -u $UID | sed 1d | fzf -m | awk '{print $2}')
else
pid=$(ps -ef | sed 1d | fzf -m | awk '{print $2}')
fi
if [ "x$pid" != "x" ]
then
echo $pid | xargs kill -${1:-9}
fi
}
Luego, ingresando fkill
en la terminal buscamos el proceso a matar.
Cómo si FZF
no fuera suficiente, el desarrollador también creo un plugin para VIM y nos habilita a usar el fuzzy finder en distintas funciones de VIM.
Plug '/usr/local/opt/fzf'
Plug 'junegunn/fzf.vim'
cd ~/.vim/bundle
git clone https://github.com/junegunn/fzf.vim.git
Nuestra configuración base hace que FZF
se habra en una ventana a la izquierda cada vez que sea invocado. Para esto, agregamos estas líneas al archivo .vimrc
set rtp+=~/.fzf
let g:fzf_layout = { 'left': '~30%'}
A continuación te dejamos una lista con las funciones más útiles de éste plugin que a su vez podemos mapearlas para tener un rápido acceso a ellas. Por ejemplo, nosotros usamos la tecla F2
para buscar y abrir archivos y F3
para buscar buffers abiertos.
#Agregar a .vimrc
nmap <F2> :call fzf#run(fzf#wrap({'source': 'git ls-files --exclude-standard --others --cached'}))<Enter>
nmap <F3> :Buffers<Enter>
Comando | Descripción |
---|---|
Files [PATH] |
Archivos (similar a :FZF ) |
Buffers |
Buscar buffers |
Colors |
Buscar colorschemes |
Lines [BUSQUEDA] |
Buscar líneas en buffers abiertos |
BLines [BUSQUEDA] |
Buscar líneas en el buffer actual |
Tags [BUSQUEDA] |
Buscar Tags en el proyecto (ctags -R ) |
BTags [BUSQUEDA] |
Buscar Tags en el buffer actual |
Marks |
Buscar marcas |
Windows |
Buscar ventanas |
History: |
Buscar en el historial de comandos |
History/ |
Buscar en el historial de búsqueda |
BCommits |
Buscar Git commits del buffer actual |
Commands |
Buscar comandos |