Uso un terminale tutti i giorni ormai da molti anni. Uso una shell non predefinita fortemente personalizzata. Faccio ampio uso del completamento delle schede e ho memorizzato i flag per molti comandi. Fino a circa un anno fa pensavo di aver raggiunto il picco di produttività del terminale. Quindi, ho scoperto un'ondata di utilità della shell che, sebbene oscure, hanno sostanzialmente modificato in meglio il modo in cui interagisco con il mio ambiente terminale.
Questo articolo è il primo di una serie su queste nuove utilità (oltre ad alcuni strumenti che conosco da più tempo e adoro). Oggi esamineremo strumenti specifici per spostarsi nel tuo filesystem.
Salta:z
Sai come puoi digitare le prime lettere di un sito Web di uso comune nel tuo browser e premere Invio con la sicurezza di essere portato nel posto giusto? E se portassimo la stessa esperienza nel tuo guscio? Immagina di poterti teletrasportare in una directory di uso comune semplicemente digitando una piccola parte del suo nome. Ecco cosa z
fa.
Il z
lo script di shell tiene traccia delle directory che visiti e quando le hai visitate. Combina la frequenza del tuo accesso a una directory con l'attualità del tuo accesso per determinare la "frequenza" del tuo accesso. Quando fornisci un paio di lettere per il nome di una directory, z
sceglie il candidato contenente la sottostringa fornita con la frequenza più alta. Il risultato è corretto per un periodo inquietante.
Eccolo in azione:
Fatti in breve:
bash
/zsh
implementazione:GitHubfish
implementazione:GitHub- Licenza (
bash
/zsh
):WTFPLv2 - Licenza (
fish
):MIT - Lingua:script della shell
Esistono numerosi strumenti simili, come autojump
e fasd
. Provali tutti!
Ricerca sfocata:fzf
A volte, cercare cose con espressioni regolari è eccessivo. Ci sono momenti in cui dovrebbe essere sufficiente che le lettere giuste si trovino nel giusto ordine. Il fzf
l'utilità ti consente di cercare corrispondenze sfocate indolore. In che modo questo strumento è correlato allo spostamento nel file system? Aspetta e vedrai.
Per impostazione predefinita, fzf
funziona su stdin, quindi puoi usarlo come grep
:
$ fzf < long-log-file.txt
Esempio dal vivo:
Perché fzf
funziona per filtrare stdin e invia l'output su stdout, puoi fare molto di più che cercare file con questo strumento. Vuoi cercare una directory sotto quella attuale?
$ fzf
Giusto. Se stdin non è una pipe, fzf
cerca tutti i file sottostanti ed emette la tua scelta su stdout, il che rende facile combinare i risultati con altri comandi come un editor.
Se desideri ottenere lo stesso risultato con un maggiore controllo, puoi eseguire:
$ find . -type d | fzf
Puoi usare fzf
per muoversi correndo:
$ cd $(find . -type d | fzf) #bash/zsh
$ cd (find . -type d | fzf) #fish
Ora ci sono anche altre applicazioni divertenti Puoi:
- Richiama i comandi dalla cronologia con:
$ eval $(history | fzf) #bash/zsh $ eval (history | fzf) #fish
- Modifica un file nella directory corrente con:
$ $EDITOR $(find . | fzf) #bash/zsh $ $EDITOR (find . | fzf) #fish
- Scegli i pacchetti da installare con:
$ sudo apt install $(apt search <word> 2>/dev/null | tail -n+3 | grep '^\w' | sed 's|([^/]+)/.*|\1|' | fzf) #bash/zsh $ sudo apt install (apt search <word> 2>/dev/null | tail -n+3 | grep '^\w' | string split / | fzf) #fish
- Fai delle scelte, in generale, in base a qualsiasi testo delimitato da righe. Il cielo è il limite!
Il fzf
l'utilità ha integrazioni esistenti con bash
, zsh
e fish
. Se installi quelle shell, fzf
aumenta ed estende naturalmente i flussi di lavoro come la "ricerca inversa nell'indice" e il completamento delle schede. Sono un utente assiduo del fish
integrazione, me stesso.
Fatti in breve:
- Ottieni
fzf
:GitHub - Licenza:MIT
- Lingua:vai
Vuoi di più?
Se questi strumenti ti sembrano utili, resta sintonizzato per altri articoli. Se non puoi aspettare, questa serie si basa su questo discorso che ho tenuto a All Things Open 2019. Puoi trovare più strumenti e trucchi lì.