Toolbox terminale ipermoderno
Strumenti di terminale, shell e riga di comando che stabiliscono lo standard nel 2023.
Tutti gli sviluppatori usano i terminali; per alcuni, il loro intero flusso di lavoro è il terminale
Questo post introduce l' Hypermodern Terminal Toolbox : strumenti di terminale, shell e riga di comando che stabiliscono lo standard nel 2023
Kitty come emulatore di terminale
Kitty è un emulatore di terminale : è un'alternativa al terminale GNOME, Alacritty o al terminale Windows.
Un emulatore di terminale è il programma che esegue il tuo terminale. Diversi sistemi operativi (SO) offrono diversi emulatori di terminale, come parte del sistema operativo o come programmi di terze parti installabili.
Kitty è un emulatore di terminale di terze parti con accelerazione GPU. Kitty è veloce, altamente personalizzabile e open source.
La configurazione viene eseguita utilizzando un kitty.conf
file di testo:
# $XDG_CONFIG_HOME/kitty/kitty.conf
font_family Operator Mono Book
font_size 14.0
scrollback_lines 2000
Suggerimento: quando si modificano le impostazioni di Kitty in kitty.conf
, sarà necessario riavviare completamente il programma Kitty.
Zsh & Prezto come conchiglia
Zsh è una shell scritta in C — è un'alternativa a Bash o Fish.
Una shell è un'interfaccia di testo del sistema operativo che viene eseguita all'interno di un terminale. I comandi della shell eseguono attività come la creazione di file e l'esecuzione di programmi.
Zsh è una shell open source, che offre più funzionalità e personalizzazione rispetto a Bash.
Zsh è configurato utilizzando un .zshrc
file:
# ~/.zshrc
HISTSIZE=9999
alias brew='arch -x86_64 brew'
export PATH="$HOME/dotfiles/scripts:$PATH"
Le funzionalità di Prezto includono l'evidenziazione della sintassi e il completamento della scheda dei comandi. Il completamento tramite tabulazione è utile per esplorare in modo interattivo nuovi strumenti della riga di comando.
Prezto è configurato utilizzando un .zpreztorc
file:
# ~/.zpreztorc
zstyle ':prezto:load' pmodule \
'environment' \
'terminal' \
'editor' \
'history' \
'directory' \
'spectrum' \
'utility' \
'completion' \
'git' \
'syntax-highlighting' \
'history-substring-search' \
'autosuggestions' \
'prompt'
Neovim come editor di testo
Neovim è un editor di testo scritto in Lua — è un'alternativa a Vim, Nano o Emacs.
Neovim è un popolare successore di Vim. L'intero ecosistema di plugin Vim scritti in Vimscript funziona in Neovim, oltre a un vivace ecosistema di plugin Neovim scritti in Lua.
Un Neovim ben configurato dispone di server linguistici per il completamento automatico (gli stessi server linguistici disponibili in VS Code), evidenziazione della sintassi con Treesitter e Telescope per la ricerca in diversi tipi di elenchi.
La configurazione di Neovim viene eseguita in Lua, a partire da un init.lua
file:
-- $XDG_CONFIG_HOME/nvim/init.lua
-- set size of a tab to be 4
-- vim command line `:set tabstop=2`
-- vimscript `set tabstop=2`
vim.opt.set.tabstop = 2
-- run vimscript in lua
vim.cmd([[set tabstop=2]])
-- set variable
-- vimscript `let g:zoom#statustext = 'Z'`
vim.g['zoom#statustext'] = 'Z'
Suggerimento: iscriviti a This Week in Neovim per una newsletter settimanale che copre il vivace ecosistema Neovim.
Tmux per terminali multipli
Tmux è un multiplexer di terminale scritto in C : è un'alternativa a Screen o esegue terminali in più finestre.
I multiplexer di terminale consentono di gestire più sessioni di terminale all'interno di un'unica finestra.
Tmux ti offre sessioni persistenti, gestione di finestre e riquadri con associazioni di tasti personalizzabili.
Tmux utilizza una gerarchia di concetti per gestire più terminali:
- Un riquadro è un'area rettangolare all'interno di una finestra. Ogni riquadro visualizza una sessione terminale separata.
- Una finestra è un contenitore a schermo intero che contiene uno o più riquadri.
- Una sessione è una raccolta di una o più finestre.
Puoi avviare una nuova sessione Tmux con tmux new
:
# create a session named `work`
$ tmux new -s work
Puoi ricollegarti a una sessione Tmux in esecuzione con tmux attach
:
# reattach to last session
$ tmux attach
# reattach the session named `work`
$ tmux attach -t work
Ctrl-b c
: Crea una nuova finestra.Ctrl-b n
: passa alla finestra successiva.Ctrl-b p
: Passa alla finestra precedente.
# ~/.tmux.conf
set -g default-terminal "screen-256color"
setw -g mode-keys vi
set -g status-left "#[fg=green,bold]Session: #S #[fg=white,bold]| #[fg=yellow,bold]Window: #W"
set-option -g prefix C-a
Astronave per un bel messaggio
Starship è un prompt della shell scritto in Rust — è un'alternativa a Powerlevel10k o Pure.
Un prompt è una parte personalizzabile della riga di comando che fornisce un contesto come la directory corrente o il ramo Git.
Starship ti offre un prompt veloce e personalizzabile. La configurazione viene eseguita utilizzando un starship.toml
file:
# $XDG_CONFIG_HOME/starship.toml
[username]
disabled = true
[hostname]
disabled = true
[git_status]
ahead = "↑"
behind = "↓"
[directory]
truncation_length = 2
Ripgrep per la ricerca di testo
Ripgrep è un cercatore di file di testo scritto in Rust — è un'alternativa a grep o find.
La caratteristica principale di Ripgrep è la velocità: è più veloce di strumenti alternativi.
L'uso di base di Ripgrep è cercare un modello in una directory:
$ rg 'pattern' ~/project
alias g='rg -l --hidden --smart-case --line-buffered'
$ g 'some-pattern' some/directory
fzf per la ricerca fuzzy
fzf è un cercatore fuzzy scritto in Go — è un'alternativa alla ricerca deterministica.
fzf ti consente di cercare utilizzando un algoritmo di ricerca fuzzy che abbina i pattern regex su informazioni incomplete. Ciò consente la visualizzazione dei risultati della ricerca durante la digitazione, anche con errori di ortografia.
fzf può essere eseguito come un programma da riga di comando:
$ fzf
# fuzzy search all files in the `work` directory
$ cat ~/work/** <TAB>
fzf può essere utilizzato con diversi backend di ricerca, come find, grep o Ripgrep.
Suggerimento: usa Ripgrep come backend fzf impostando la FZF_DEFAULT_COMMAND
variabile d'ambiente export FZF_DEFAULT_COMMAND='rg --files --hidden'
.
Exa per elencare i file
Exa è un programma per la creazione di elenchi di file scritto in Rust — è un'alternativa a ls e tree.
Un programma di elenchi di file mostra elenchi di file e directory. Exa offre funzionalità come icone, integrazione Git e versatili opzioni di ordinamento.
Exa ha alcune viste di base diverse:
# list as a grid
$ exa -G
bp-historical-data cities data-science-south-data predict-newspapers README.md titanic
# list each item on one line
$ exa -1
bp-historical-data
cities
data-science-south-data
predict-newspapers
README.md
titanic
# list as a table - same as `ls -l`
$ exa -l
drwxr-xr-x - adam 26 Apr 20:20 bp-historical-data
drwxr-xr-x - adam 14 Feb 16:42 cities
drwxr-xr-x - adam 26 Apr 20:25 data-science-south-data
drwxr-xr-x - adam 28 Apr 14:52 predict-newspapers
.rw-r--r-- 124 adam 29 Apr 15:20 README.md
drwxr-xr-x - adam 26 Apr 17:31 titanic
$ exa --tree --level=2
├── bp-historical-data
│ ├── __pycache__
│ ├── dashboard.py
│ ├── data
│ ├── notebooks
│ ├── README.md
│ └── requirements.txt
├── README.md
└── titanic
├── data
├── requirements.txt
├── titanic.ipynb
├── titanic.md
└── titanic.py
I miei alias per Exa sono:
alias ls = 'exa --long --icons --no-permissions --no-user --git --time-style long-iso --time=modified --group-directories-first -a'
alias tree = 'exa --tree'
Bat per la visualizzazione dei file
Bat è un visualizzatore di file scritto in Rust — è un'alternativa a cat.
Un visualizzatore di file è un programma che visualizza il contenuto di un file.
Bat offre funzionalità come l'evidenziazione della sintassi, l'integrazione con Git e il paging automatico dei file.
Bat viene utilizzato puntando il programma su un file di testo:
$ bat path/to/file
Triste per aver sostituito il testo
Sad è un editor di stream scritto in Rust — è un'alternativa a sed o awk.
Gli editor di flussi eseguono operazioni di ricerca e sostituzione su flussi di testo o file di testo.
Sad (Space Age seD) mostra le sostituzioni proposte prima di applicarle, permettendoti di controllare e selezionare quali sostituzioni effettuare prima di confermarle.
Sad è usato come programma a riga di comando:
$ sad '<pattern>' '<replacement>'
$ cat README.md
# Data Science South Projects
Example projects for the courses at [Data Science South](https://www.datasciencesouth.com/).
$ exa -1 | sad "courses" "modules"
$ cat README.md
# Data Science South Projects
Example projects for the modules at [Data Science South](https://www.datasciencesouth.com/).
jq per Lavorare con JSON
jq è un processore JSON scritto in C : è un'alternativa a fx, jp o all'elaborazione di JSON in un linguaggio come Python.
jq ti consente di filtrare, trasformare e manipolare i dati JSON, utile per lavorare con le risposte API, i file di configurazione e gli archivi dati.
Un'idea centrale in jq è il filtro, applicato all'input JSON:
$ jq 'filter_expression' input.json
.key
- estrarre il valore di una chiave,.[]
- estrarre tutti i valori da un array,.[2]
- estrarre il terzo valore da un array.
# extract the `name` key
$ echo '{"name": "Alice", "data": [6, 12]}' | jq '.name'
"Alice"
# extract the second element from the `data` list
$ echo '{"name": "Alice", "data": [6, 12]}' | jq '.data[1]'
12
zossido per la navigazione
zoxide è un'utilità di navigazione del terminale scritta in Rust — è un'alternativa a cd, pushd e popd.
zoxide passa alle directory dalla cronologia delle visite. Assegna un punteggio a ciascuna directory in base alla frequenza e all'ultima visita.
zoxide è usato come programma a riga di comando:
# move to a folder that best matches `code`
$ z code
Tig per visualizzare la cronologia di Git
Tig è un visualizzatore della cronologia di Git scritto in C : è un'alternativa all'utilizzo della CLI di Git o di Lazygit.
Tig fornisce un'interfaccia navigabile con codice colore per sfogliare la cronologia dei commit Git. Consente la ricerca di commit, la visualizzazione del grafico dei commit e la visualizzazione dei file in un momento diverso.
Tig viene eseguito come un programma a riga di comando:
$ tig
direnv per la gestione delle variabili d'ambiente
direnv carica e scarica le variabili d'ambiente della shell — scritto in Go, è un'alternativa all'uso di$ source .env
.
direnv carica e scarica automaticamente le variabili di ambiente mentre navighi tra diverse directory di progetto.
L'utilizzo di direnv evita il caricamento manuale delle variabili di ambiente e protegge dalle variabili di ambiente di un progetto che vengono impostate in un altro progetto.
direnv usa un .envrc
file per contenere le variabili specifiche del tuo progetto, che viene eseguito come uno script di shell:
# .envrc
export PROJECT_NAME="alpha"
$ direnv allow .
Una pratica comune è caricare facoltativamente un secret o private .envrc
:
source_env_if_exists .envrc.secret
Suggerimento: utilizzare direnv exec <path> <command>
per eseguire un comando con l'ambiente caricato per una directory specifica senza accedervi.
Lazydocker per Docker
Lazydocker gestisce i contenitori e le immagini Docker : scritto in Go, è un'alternativa a Docker Desktop o all'interfaccia a riga di comando di Docker.
Lazydocker semplifica la visualizzazione, l'avvio, l'arresto e la rimozione di contenitori e immagini tramite un'interfaccia utente terminale. Può anche fornire una panoramica in tempo reale dello stato del contenitore, dei registri e dell'utilizzo delle risorse.
Lazydocker è utilizzato come programma a riga di comando:
$ lazydocker
Markserv per l'anteprima di Markdown
Markserv esegue il rendering dei file Markdown in un browser : scritto in Node.js, è un'alternativa a Grip o Markdown Preview.
Markserv esegue il rendering di Markdown in HTML in tempo reale, riflettendo automaticamente le modifiche man mano che le apporti.
Markserv supporta Markdown aromatizzato GitHub, il che significa che formatta blocchi di codice e tabelle allo stesso modo di Github. Markserv è ottimo per visualizzare in anteprima README.md
i file senza passare a Github.
Per avviare un server Markserv sulla porta 8010:
$ markserv -p 8010
Ngrok per la condivisione di server locali
ngrok crea tunnel ai tuoi server locali: scritto in Go, è un'alternativa a Serveo, LocalTunnel o PageKite.
ngrok espone a Internet un server locale dietro un NAT o un firewall. Questo è utile per condividere un server di sviluppo con il tuo team.
Puoi avviare un tunnel verso la porta 8000 eseguendo:
$ ngrok http 8000
Riepilogo
L' Hypermodern Terminal Toolbox è:
- Kitty per un terminale altamente personalizzabile con accelerazione GPU,
- Zsh per una shell e Prezto per la configurazione Zsh,
- Neovim come editor di testo,
- Tmux per la gestione di più terminali,
- Astronave per un bel sollecito,
- Ripgrep per la ricerca di file di testo,
- fzf per la ricerca fuzzy,
- Exa per elencare i file,
- Bat per visualizzare i file,
- Triste per trovare e sostituire nei file di testo,
- jq per lavorare con JSON,
- zossido per la navigazione,
- Tig per visualizzare la cronologia di Git,
- direnv per la gestione delle variabili d'ambiente,
- Lazydocker per Docker,
- Markserv per l'anteprima di Markdown,
- ngrok per esporre i server locali a Internet.
Impara costantemente uno strumento alla volta per diventare un maestro terminale
Originariamente pubblicato su https://www.datasciencesouth.com .
Codifica di livello superiore
Grazie per far parte della nostra comunità! Prima che tu vada:
- Batti le mani per la storia e segui l'autore
- Visualizza altri contenuti nella pubblicazione Level Up Coding
- Corso di colloquio di codifica gratuito ⇒ Visualizza il corso
- Seguici: Twitter | Linkedin | Notiziario