Instalei o fzf. E agora, o que devo fazer? (2023)
(andrew-quinn.me)- O
fzfmelhora imediatamente a busca no histórico de comandos com Ctrl+R, trocando-a por uma busca difusa - Com Alt+C, dá para ir rapidamente a um diretório de trabalho antigo sem saber o caminho exato
- O comando
fzfpode ser combinado com substituição de comando para abrir imediatamente o arquivo selecionado novi,emacsoucode - Ao passar a saída do
findpara ofzf, fica fácil localizar arquivos de configuração cujo local você não sabe, como nginx.conf rg. | fzfpermite abrir o arquivo desejado usando como pista uma linha do conteúdo, em vez do nome do arquivo
O valor imediato que você ganha logo após instalar o fzf
- Engenheiros de software conseguem criar facilmente ferramentas para melhorar o próprio trabalho, mas, se ficarem alternando entre várias ferramentas sem aprendê-las a fundo, o custo aumenta com o tempo
- Uma boa heurística 80/20 é primeiro dominar ferramentas Unix antigas como
cat,ls,cd,grepecut; em funções modernas de administração de sistemas, isso também incluisedeawk - O
fzfpode ser visto como uma exceção a essa heurística, porque seu retorno sobre o investimento é imediato e seu valor é único - O ponto principal são os recursos que já ficam disponíveis logo após instalar pelo
script de instalação do fzfem um ambiente Ubuntu padrão
Efeito imediato dos atalhos padrão
-
Ctrl+R: transforma o histórico de comandos em busca difusa- Na maioria dos terminais Linux e Windows,
Ctrl+Roferece busca reversa de comandos - O
Ctrl+Rpadrão exige correspondência exata para achar o comando desejado e mostra apenas uma prévia por vez, então basta errar uma letra para ficar difícil encontrá-lo - Ao instalar o
fzf, vários atalhos de teclado passam a ser sobrescritos com comportamentos melhores, e oCtrl+Rtambém melhora bastante em relação ao modo antigo - Se você instalar por um gerenciador de pacotes como
apt, essa integração de atalhos pode não vir incluída; por isso faz sentido usar oscript de instalação do fzf
- Na maioria dos terminais Linux e Windows,
-
Alt+C: vá rapidamente para diretórios que você só lembra vagamente- O
fzftransformaAlt+Cem um atalho decddifuso aprimorado - Você pode navegar rápido quando não lembra o caminho exato de um diretório, mas ainda recorda mais ou menos o nome
- É útil para encontrar repositórios antigos ou diretórios de trabalho que você não visita há algum tempo a partir de um terminal vazio
- O
O próprio comando fzf e combinações com o shell
-
fzfbásico- Executar o comando
fzfsozinho faz uma busca difusa por caminhos relativos de arquivos com base no diretório atual - Sozinho, ele serve basicamente para escolher a localização de um arquivo, então sua utilidade é limitada
- Executar o comando
-
vi $(fzf)- Quando combinado com substituição de comando, como em
vi $(fzf), você pode abrir diretamente no editor o arquivo escolhido pela busca difusa - Essa ideia não tem nada de especial para o
vi; também funciona comemacs,nano,codeou qualquer editor que você prefira
- Quando combinado com substituição de comando, como em
-
vi $(find . '/' | fzf)- Ao combinar
find . '/' | fzfcom um editor, você pode abrir um arquivo de configuração cujo local desconhece pesquisando difusamente entre candidatos com caminho completo - Ao procurar um arquivo como
nginx.conf, em vez de tentar adivinhar com base no FHS ou decorar o local, basta enviar a saída dofindpara ofzf - Se você buscar por algo como
conf$, dá para filtrar só as linhas que terminam emconf - Se o
findencontrar muitos errosPermission denied, ofzfpode oscilar por um instante, mas se recupera depois de alguns segundos - Esses poucos segundos de atraso são o trade-off pela conveniência de localizar arquivos de configuração de um jeito muito simples
- Ao combinar
-
vi **<TAB>- Um recurso citado em um comentário do
sigmonsaysno Hacker News: entre sobrescrever atalhos e executarfzfdiretamente, existe a completação difusa com tab usando dois asteriscos vi **<TAB>também pode ser usado para escolher arquivos de forma parecida comvi $(fzf)- Depois que o comando é completado, ainda é preciso apertar
Entermais uma vez - Funciona bem no bash e no zsh, mas pode não funcionar no
fish - Se for mais fácil lembrar do uso explícito de
$(fzf), talvez você não use esse recurso com tanta frequência
- Um recurso citado em um comentário do
Usando fzf também para mover arquivos
-
mv $(fzf) $(fzf)mv $(fzf) $(fzf)serve quando você não lembra exatamente o que quer mover nem para onde, mas tem pistas bem específicas sobre cada lado- A ideia é escolher com dois
fzf: um para o item a mover e outro para o destino - Isso pode acabar sendo usado com frequência ao reorganizar arquivos, como ao colocar GIFs em um README do GitHub
- Como exemplo relacionado, há o README do modo interativo do
finstem
Busca difusa até no conteúdo dos arquivos com rg
-
rg: umgreprápido com busca recursiva por padrão- A combinação abaixo também pode ser feita com
grep, masrg, ouripgrep, se destaca nesse caso porque a busca recursiva já é o padrão - Para acompanhar os exemplos, é recomendável instalar e usar
rg
- A combinação abaixo também pode ser feita com
-
rg . | fzfrg .envia como resultado de busca cada linha dos arquivos, e, ao passar isso para ofzf, você pode fazer busca difusa em todas as linhas de todos os arquivos- Assim, em vez do nome do arquivo, a pista passa a ser o conteúdo de uma linha dentro dele
-
rg . | fzf | cut -d ":" -f 1- Ao adicionar
cut -d ":" -f 1ao resultado escolhido comrg . | fzf, você retorna o primeiro campo separado por dois-pontos, ou seja, a localização do arquivo - É uma combinação para buscar difusamente pelo conteúdo de uma linha e obter apenas o caminho do arquivo que contém essa linha
- Ao adicionar
-
vim $(rg . | fzf | cut -d ":" -f 1)vim $(rg . | fzf | cut -d ":" -f 1)faz busca difusa em todas as linhas de todos os arquivos e depois abre novimo arquivo que contém a linha selecionada- Quando você não lembra o nome do arquivo e só se recorda de parte do conteúdo, isso permite seguir direto para o editor
1 comentários
Opiniões no Lobste.rs
Parece que o público-alvo deste texto sou exatamente eu. Instalei o fzf, achei “genial”, mas acabava sempre esquecendo de usar; agora talvez eu passe a usar
Pode até ser um bom texto, mas se o objetivo é responder “o que fazer agora?”, começar pela integração com o shell do fzf dá a sensação de falar com um público mais restrito
Estou acostumado a usar ctrl-r no bash, então pedir para trocar isso parece exigir demais. Eu preferiria que mostrasse primeiro como praticar o mesmo comportamento sem substituir o padrão
ctrl-r provavelmente é o comando que mais uso, e o fzf foi uma melhoria que se encaixou de imediato, sem curva de aprendizado. Como ele é acionado com ctrl-r, eu também não esqueço de usar o fzf. Depois acabei migrando para o Fish shell, onde esse mesmo comportamento já vem por padrão
Fui convencido. Vou adicionar integração com o shell ao fzf em breve, e hoje aprendi uma coisa nova
Ao procurar arquivos para colocar em um comando, também dá para usar o atalho
ctrl-t. Eu uso bastante comgitpara escolher arquivos incluídos em uma alteração específica, e também já usei para filtrar a saída dogrepe reduzir o escopo da buscaAlém de melhorar a busca no histórico do shell, também venho usando
fzfcom estes dois aliasesalias gbd='git -c color.ui=never branch | fzf | xargs -I {} git branch -D {}'Uso principalmente para escolher quais branches locais apagar depois de mesclar pull requests. Talvez exista uma forma melhor, mas até hoje nunca falhou
alias awp='export AWS_PROFILE="$(grep -e "\[\(.*\)\]" ~/.aws/config | sed -e "s/\[//g" | sed -e "s/\]//g" | cut -d " " -f 2 | sort -u | fzf)"'Isso me permite trocar rapidamente o AWS_PROFILE com base nos valores em
~/.aws/config. Agora estou pensando em criar um alias parecido para trocar de namespace no KubernetesSe você usar o plugin fzf.vim, poderá usar o fzf dentro do vim. Não só para abrir arquivos, mas também para fazer busca difusa em buffers, histórico de comandos, conteúdo de arquivos etc.
O principal uso do fzf para mim é percorrer e pesquisar um histórico linear de commits do Git para entender o que mudou recentemente
Na minha configuração padrão do Git, defini
git fzfassimAcho que estou deixando passar alguma coisa. Fico me perguntando por que alguém instalaria o fzf sem saber o que fazer com ele
Também houve um texto relacionado recentemente. Um usuário está usando o fzf como seletor de arquivos para o jj
https://lobste.rs/s/exlogg/jjj