terça-feira, 31 de março de 2026

Zoxide e fzf no bash para incrementar o uso do Terminal

zoxide e o fzf são programas externos que são usados junto do shell (terminal) para acelerar a entrada de pastas e listar possibilidades de entradas disponíveis no histórico. Combinando os dois é possível achar comandos e "entradas cd" (de pastas) para deixar o uso do terminal mais agradável. O problema é que implementar isso acaba deixando o usuário preguiçoso mas vamos lá assim mesmo. Isso pode ser feito também no zsh mas vou mostrar primeiro como fazer no bash.

No Debian e agregados:

sudo apt install fzf zoxide

Abra o arquivo ~/.bashrc:

nano ~/.bashrc

Cole dentro, lá no final do arquivo:

eval "$(zoxide init bash)"

Salve e feche o arquivo. Recarregue o bash:

source ~/.bashrc


Agora todas as pastas em que você entrar no terminal usando bash serão guardadas num banco de dados e dota o seu terminal de um "acelerador". Digamos que você já tenha entrado na pasta .config; basta você digitar sem as aspas "z .config" (nem precisa ser o .config completo, .conf já serve já que é pasta e não arquivo) e o prompt vai aparecer o .config mais novo que você entrou. Se digitar zi config  você vai habilitar o modo de procura caso haja mais de uma entrada disponível:

Linux: Usando o zoxide e fzf no bash do Terminal

 Basta então escolher na listagem qual o que você quer usando as setas de direção. E o interessante é que você não precisa digitar o nome da pasta completo, basta digitar "z pasta ou parte do nome" e o zoxide vai direto na última entrada. A única necessidade é que você já tenha entrado na pasta individualmente via cd anteriormente. E, na listagem, ainda mostra as eventuais subpastas presentes nas entradas como ilustra a imagem acima.

Veja os exemplos:

  • z share = Vai entrar na pasta mas recente com a entrada share, por exemplo, /usr/local/share;
  • zi share = vai listar as entradas do histórico do bash que possuem "share" e pode ser escolhida a entrada com as setas de direção;
  • z local = Mesmo que a pasta exista (por exemplo, /usr/local) se você não tiver entrado nela anteriormente via cd (cd /usr/local) não vai achar nada. O zoxide não completa caminhos sozinho e sim se baseia no histórico do shell;

  • zi con = Vai listar as pastas já visitadas que tenham "con", como no exemplo abaixo.

  • Linux: Usando o zoxide e fzf no bash do Terminal

     Lembrando, a pasta TEM que estar no histórico. Se você tiver entrado na /usr/local ou /usr/local/share (atenção ao negrito de ambas) o comando z local ou z share vai achar as entradas MAS NÃO VAI entrar em z usr pois você não entrou nenhuma vez na pasta /usr individualmente.

    Depois de instalado o programa precisa "aprender" as pastas que você entra pois ele "linka" ao ~/.bash_history. Para saber o que o zoxide já "aprendeu", abra o terminal e digite:

    zoxide query -l

    Devem aparecer algumas entradas de comandos de pastas que você já tenha feito. Se estiver em branco é necessário "ensinar" para já "pegar" o que você já tem. Para acelerar o aprendizado, no terminal:

    cat ~/.bash_history \
    | sed 's/^: [0-9]*:[0-9]*;//' \
    | grep -E '^cd ' \
    | sed 's/^cd //' \
    | while read -r dir; do
        dir="${dir/#\~/$HOME}"
        [ -d "$dir" ] && zoxide add "$dir"
    done

    Pronto, o zoxide já está "esperto" para listar o que está no seu histórico. Se precisar apagar o banco de dados:

    rm -rf ~/.local/share/zoxide/db.zo

    e refaça o penúltimo comando mostrado aqui para "ensinar" o seu histórico de pastas ao zoxide.

    Só pra deixar claro, o "z" é o substituto do "cd", é como um alias para o comando "cd"; o "z" mais o resto faz o zoxide saber que você está querendo entrar em pastas e esse "z" é o zoxide que determina; poderia ser configurado o j, p ou qualquer outra letra mas vamos ficar no z mesmo.

    E lembrando:
    • z pasta ou nome parcial: entra na mais recente;
    • zi pasta ou nome parcial: mostra as pastas acessadas numa lista e que pode ser escolhida a entrada desejada via setas do teclado.

    Nenhum comentário:

    Postar um comentário