Mencionei FZF algumas vezes nos artigos aqui, mas eu nunca escrevi sobre isso. FZF fez parte do meu fluxo de trabalho há muito tempo, e é uma ferramenta incrível que você deve conhecer.
Eu percebo que muitos de vocês já estão usando FZF, mas para aqueles que não, este artigo é para você. Esta é apenas uma simples introdução ao FZF, sem entrar muito em detalhes. A página do projeto FZF e a wiki fornecem informações amplas sobre o FZF, seu uso, além de muitos exemplos, portanto, verifique se há mais informações.
*FZF é um rápido e interativo localizador de linha de comando escrito em Go. A ferramenta está disponível para Linux, MacOS, BSD e Windows.**
Ele pode ser usado manualmente ou em scripts analisando a saída de um comando, usando extensões de shell (que incluem auto-conclusão difusa para bash e zsh, bem como ligações chave como CTRL-T
, CTRL-R
e ALT-C
para Bash, ZSH e Fish), e como um plugin vim/neovim. Há também um script TMUX para lançar o FZF em um painel TMUX.
Aqui está o que esses keybindings de linha de comando FZF fazem:
CTRL-R
: Pesquisa seu histórico de comandos. Pressione Enter
para colar o comando selecionado do histórico na linha de comando. Alternar a relevância de classificação para a ordem cronológica pressionando CTRL-R
novamente (por padrão, a classificação é feita por relevância)CTRL-T
: mostra uma lista de arquivos e pastas no diretório atual (e subdiretórios). Pressione Enter
para colar o caminho de arquivo/pasta selecionado para a linha de comandoALT-C
: mostra uma lista de subdiretórios no diretório atual. Pressione Enter
para cd
no diretório selecionadoPor padrão, a sintaxe de pesquisa permite digitar vários termos de pesquisa delimitados por espaços (FZF é iniciado no modo de pesquisa estendido). Se você quiser encontrar correspondências exatas, prefixe o termo de pesquisa com uma única cotação (por exemplo, 'search-term
). Mais sobre a sintaxe de pesquisa FZF aqui.
O FZF Finder interativo usa as seguintes teclas por padrão: ↑
/↓
(ou CTRL-J
/CTRL-K
ou CTRL-N
/CTRL-P
) Para mover o cursor para cima e para baixo, a tecla Enter
para selecionar um item e CTRL-C
(ou CTRL-G
/ ESC
) para sair . Ele também suporta selecionar vários itens ao usar o argumento de linha de comando -m
, e nesse caso, você pode selecionar vários itens usando TAB
e Shift-TAB
.
O FZF também vem com suporte ao mouse, para que você possa clicar, rolar, clicar duas vezes em itens, etc. Para o modo multi-seleção, você pode usar Shift-click
e Shift-scroll
.
Outros recursos do FZF incluem a capacidade de mostrar um painel de visualização (--preview=COMMAND
), definir sua altura (por exemplo, --height 50%
), adicionar uma borda (--border
), usar keybindings personalizados, usar layouts diferentes (como um layout reverso), ativar o processamento de códigos de cores ANSI , e muito mais.
Busca difusa do seu histórico do shell (CTRL-R
):
Conclusão difusa para arquivos e diretórios (isso é acionado, terminando o comando com a sequência do acionador, que por padrão é **
, seguido pressionando TAB
):
cd ** (TAB)
Da mesma forma, a FZF também pode preencher nomes de host do AutoCompletar (por exemplo, ssh ** (TAB)
), bem como variáveis de ambiente e aliases (por exemplo, export ** (TAB)
). Também pode preencher os IDs de processos e, nesse caso, não há sequência de gatilho, por exemplo, kill -9 (TAB)
.
Encontre arquivos no diretório atual (e subdiretórios) e ao selecionar um arquivo (pressionando a tecla Enter
), o arquivo é aberto por meio do seu editor de linha de comando padrão:
editor $(find * -type f | fzf)
Combine-o com outros comandos para ter uma interface interativa legal com pesquisa difusa e um painel de visualização. Por exemplo, **o seguinte comando (via) usa FZF e consegue listar todos os pacotes disponíveis, permitindo que você instale um pacote pressionando a tecla Enter
. Aqui, o FZF é usado com a opção --preview
para mostrar um painel de visualização (neste caso, ele mostra os detalhes do pacote Deb selecionados):
apt-cache search '' | sort | cut --delimiter ' ' --fields 1 | fzf --multi --cycle --reverse --preview 'apt-cache show {1}' | xargs -r sudo apt install -y
Para a captura de tela no topo deste artigo, estou usando o seguinte comando (requer bat, um clone cat
escrito em Rust que inclui destaque de sintaxe e mais):
fzf --preview 'bat --style=numbers --color=always --line-range :500 {}'
Para exemplos mais avançados, confira a wiki do FZF.
Eu também escrevi sobre algumas ferramentas/scripts de linha de comando que fazem uso de FZF Fuzzy Finder:
O FZF está disponível para Linux (incluindo várias versões ARM, por isso funciona no Raspberry Pi, por exemplo), macOS, *BSD e Windows.
No Linux, o FZF pode ser instalado a partir dos repositórios em Debian9 +, Ubuntu 19.10+, Fedora, Arch Linux, OpenSUSE, etc.
No entanto, eu pessoalmente prefiro instalá-lo usando seu script de instalação (ele baixou automaticamente o binário para o seu sistema, sem compilá-lo da fonte). Isso porque instala tudo para você, com a única coisa que é necessária é fornecer o arquivo de configuração do shell. Também é fácil atualizar para versões de FZF mais recentes (elas são liberadas com bastante frequência).
Para instalar o FZF usando seu script de instalação, certifique-se de ter git
instalado e, em seguida, use:
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf~/.fzf/install
O script de instalação lhe fará algumas perguntas sobre quais recursos permitirem. Você provavelmente vai querer responder sim (y
) para todos eles.
É isso. Agora tudo que você precisa fazer é reiniciar sua concha ou recarregar arquivo de configuração:
source ~/.bashrc
source ~/.zshrc
fzf_key_bindings
Usando este método de instalação, se você quiser atualizá-lo (tanto a conclusão quanto o binário), use:
cd ~/.fzfgit pull./install
Também é mais fácil de desinstalá-lo (isso desfaz as alterações feitas para ~/.bashrc
ou ~/.zshrc
, e remove os atalhos do Fish de ~/.config
; ele não remove o diretório ~/.fzf
):
cd ~/.fzf./uninstall
Esse post foi traduzido do site LinuxUprising.com pela rtland.team.
Confira a versão original desse post em inglês:
A Quick Introduction To fzf (Interactive Command-Line Fuzzy Finder)