Sono una di quelle persone che apre immediatamente una finestra di terminale dopo l’avvio del mio computer. Non è per necessità a questo punto, ma l’abitudine è lì. Ho trascorso la maggior parte della mia carriera imparando i suoi incantesimi magici, e trovo che navigare attraverso le mie attività quotidiane sul terminale rende una giornata più piacevole al lavoro. Detto questo, è bello provare qualcosa di nuovo una volta ogni tanto.
Recentemente ho lasciato andare l’interprete da riga di comando predefinito, Bash, a favore di fish, che si commercializza con orgoglio come “una shell da riga di comando per gli anni ’90”. Ecco perché sono passato.
L’ho trovato .bashrc non è abbastanza
Poco più di un anno fa ho deciso di smettere di astrarre i miei sistemi operativi e iniziare a impararlo da zero. Recentemente sono passato da Mac a Linux, il che mi ha dato un motivo per esaminare il porting dei miei dotfile nel nuovo ambiente. Era rinfrescante; Ho trovato un sacco di scorciatoie e duplicazioni confuse e l’ho abbinato a qualcosa che porta bene tra i sistemi operativi. Ecco alcuni preferiti:
## Nicer shell experience
export GREP_OPTIONS="--color=auto"; # make grep colorful
export LSCOLORS=gxfxbEaEBxxEhEhBaDaCaD; # make ls more colorful as well
export HISTSIZE=32768; # Larger bash history (allow 32³ entries; default is 500)
export HISTFILESIZE=$HISTSIZE;
export HISTCONTROL=ignoredups; # Remove duplicates from history. I use `git status` a lot.
export HISTIGNORE="ls:cd:cd -:pwd:exit:date:* --help"; # Make some commands not show up in history
export LANG="en_US.UTF-8"; # Language formatting is still important
export LC_ALL="en_US.UTF-8"; # byte-wise sorting and force language for those pesky apps
export MANPAGER="less -X"; # Less is more
export GPG_TTY=$(tty); # for gpg key management
Sono stato in viaggio per demistificare la magia del mio ambiente, e sta iniziando a avere più senso.
Personalizzazione rompe il mio .bashrc
È a questo punto di chiarezza che mi sono bloccato di nuovo. Voglio alcune convenzioni moderne nel mio terminale, in particolare suggerimenti automatici, evidenziazione della sintassi e colorizzazione degli output dei comandi senza troppe dipendenze, e mi piacerebbe che la configurazione fosse indipendente da qualsiasi interprete della riga di comando che sto eseguendo. (iTerm2 è ottimo su un Mac, ma non voglio tracciare il suo file di configurazione criptico nei miei dotfiles. Quindi cosa devo fare?
La prima volta che ho seguito una risposta, l’ho risolta un passo alla volta:
- In primo luogo, ho personalizzato il mio ~/.file inputrc per consentire la ricerca in avanti e indietro.
- Poi, ho sostituito cat con l’output prettified di ccat e alias cat a ccat nel mio .bashrc. Questo in seguito alla fine ha rotto la scrittura su stdout in alcuni casi, quindi ho smesso di usarlo.
- In definitiva, ho usato Bash-it, che è un potente sistema di plugin per personalizzare Bash.
Dopo aver rimosso i pezzi uno per uno, ho sentito di aver capito un po ‘ di più su come funzionava il mio sistema. I cerchi mi sentivo come ho dovuto saltare attraverso per ottenere l ” esperienza moderna ho cercato mi ha portato di nuovo agli standard che mi hanno portato a questo punto. Mi sentivo come se fossi prigioniero della storia fino a quando ho deciso di buttare via tutto e provare qualcosa di totalmente diverso.
Impostazioni predefinite facili e personalizzazione con fish shell
Fish shell è una moderna interfaccia a riga di comando con suggerimenti automatici, completamento delle schede e evidenziazione della sintassi (tra le altre caratteristiche). Mi piace particolarmente come dalla prima volta che provi digitando fish, ottieni una bella esperienza:
Nella prima riga, il comando è blu perché pwd è un comando valido. Sulla seconda riga, è rosso perché pdw non è un comando valido. Ho premuto Invio per mostrare che è vero, ma avrei potuto correggere rapidamente l’errore e andare avanti con la mia giornata. Nel terzo comando, voglio cambiare directory (cd) nella mia cartella di sviluppo, e fish chiede automaticamente se voglio salire nei miei dotfile, come ho fatto l’ultima volta. Quando premo Tab due volte, mostra altre opzioni nella stessa directory, proprio come mi aspetterei.
Se voglio personalizzare la mia esperienza fish shell, non ho bisogno di installare alcuna libreria o framework aggiuntivo per farlo. Fish viene fornito con il comando fish_config, che avvia un’interfaccia utente grafica (GUI) in cui è possibile scegliere diversi colori e configurazioni di prompt.
La cosa più impressionante è che puoi rivedere tutte le funzioni, le variabili, i binding e altro ancora disponibili dalla GUI:
Se sintonizzi la tua configurazione, tutte le personalizzazioni sono memorizzate nello stesso posto: ~/.config / pesce. Lo screenshot qui sopra mostra che ho creato una funzione personalizzata che mi consente di attivare facilmente un ambiente Python usando pyenv. Scopri il tutorial sulle funzioni di pesce per più.
Essere avvertito: fish non è come Bash
Quando provavo altre conchiglie, ho scoperto che c’erano sempre alcune differenze di cui avevo bisogno per sintonizzare, ma si sentivano familiari nel complesso. Questo non è il caso del pesce. La definizione della funzione, l’aliasing e le variabili funzionano in modo leggermente diverso. Ci sono strategie utili per la conversione .bashrc e .bash_profile file in configurazione pesce, ma è più di quanto mi occuperò in questo articolo. Così, mentre ho imparato ad amare il pesce, vi consiglio di prendere il tutorial interattivo per un giro per vedere se ti piace.
Dare pesce una prova per una bella shell di default
Mi piace iniziare la mia giornata aprendo il terminale, e mi piace ancora di più dal passaggio al guscio di pesce. Mi ha permesso di allontanarmi dal preoccuparmi di ciò che è in Bash per concentrarmi su quale codice ho intenzione di scrivere. Se stai cercando di allontanarti dall’armeggiare con il tuo terminale e concentrarti di più sul codice, provalo. Usa chsh per impostarlo come shell predefinita e fammi sapere come va nei commenti.