Boîte à outils de terminal hypermoderne
Outils de terminal, de shell et de ligne de commande établissant la norme en 2023.
Tous les développeurs utilisent des terminaux ; pour certains, tout leur flux de travail est le terminal
Cet article présente la boîte à outils de terminal hypermoderne - des outils de terminal, de shell et de ligne de commande définissant la norme en 2023
Kitty comme émulateur de terminal
Kitty est un émulateur de terminal — c'est une alternative au terminal GNOME, Alacritty ou au terminal Windows.
Un émulateur de terminal est le programme qui exécute votre terminal. Différents systèmes d'exploitation (OS) proposent différents émulateurs de terminaux, soit dans le cadre du système d'exploitation, soit en tant que programmes tiers installables.
Kitty est un émulateur de terminal tiers accéléré par GPU. Kitty est rapide, hautement personnalisable et open source.
La configuration se fait à l'aide d'un kitty.conf
fichier texte :
# $XDG_CONFIG_HOME/kitty/kitty.conf
font_family Operator Mono Book
font_size 14.0
scrollback_lines 2000
Astuce — lors de la modification des paramètres de Kitty dans kitty.conf
, vous devrez redémarrer complètement le programme Kitty.
Zsh & Prezto comme coque
Zsh est un shell écrit en C — c'est une alternative à Bash ou Fish.
Un shell est une interface texte du système d'exploitation qui s'exécute dans un terminal. Les commandes Shell effectuent des tâches telles que la création de fichiers et l'exécution de programmes.
Zsh est un shell open source, offrant plus de fonctionnalités et de personnalisation que Bash.
Zsh est configuré à l'aide d'un .zshrc
fichier :
# ~/.zshrc
HISTSIZE=9999
alias brew='arch -x86_64 brew'
export PATH="$HOME/dotfiles/scripts:$PATH"
Les fonctionnalités de Prezto incluent la coloration syntaxique et la complétion des onglets de commande. La complétion par tabulation est utile pour explorer de manière interactive de nouveaux outils de ligne de commande.
Prezto est configuré à l'aide d'un .zpreztorc
fichier :
# ~/.zpreztorc
zstyle ':prezto:load' pmodule \
'environment' \
'terminal' \
'editor' \
'history' \
'directory' \
'spectrum' \
'utility' \
'completion' \
'git' \
'syntax-highlighting' \
'history-substring-search' \
'autosuggestions' \
'prompt'
Neovim comme éditeur de texte
Neovim est un éditeur de texte écrit en Lua — c'est une alternative à Vim, Nano ou Emacs.
Neovim est un successeur populaire de Vim. L'ensemble de l'écosystème de plugins Vim écrits en Vimscript fonctionne dans Neovim, au-dessus d'un écosystème animé de plugins Neovim écrits en Lua.
Un Neovim bien configuré dispose de serveurs de langage pour l'auto-complétion (les mêmes serveurs de langage disponibles dans VS Code), de la coloration syntaxique avec Treesitter et de Telescope pour rechercher dans différents types de listes.
La configuration de Neovim se fait en Lua — à partir d'un init.lua
fichier :
-- $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'
Astuce - abonnez-vous à This Week in Neovim pour une newsletter hebdomadaire couvrant l'écosystème animé de Neovim.
Tmux pour plusieurs terminaux
Tmux est un multiplexeur de terminaux écrit en C - c'est une alternative à Screen, ou exécutant des terminaux dans plusieurs fenêtres.
Les multiplexeurs de terminaux vous permettent de gérer plusieurs sessions de terminal dans une seule fenêtre.
Tmux vous offre des sessions persistantes, une gestion des fenêtres et des volets avec des raccourcis clavier personnalisables.
Tmux utilise une hiérarchie de concepts pour gérer plusieurs terminaux :
- Un volet est une zone rectangulaire à l'intérieur d'une fenêtre. Chaque volet affiche une session de terminal distincte.
- Une fenêtre est un conteneur plein écran qui contient un ou plusieurs volets.
- Une session est un ensemble d'une ou plusieurs fenêtres.
Vous pouvez démarrer une nouvelle session Tmux avec tmux new
:
# create a session named `work`
$ tmux new -s work
Vous pouvez vous rattacher à une session Tmux en cours d'exécution avectmux attach
:
# reattach to last session
$ tmux attach
# reattach the session named `work`
$ tmux attach -t work
Ctrl-b c
: Créer une nouvelle fenêtre.Ctrl-b n
: Passer à la fenêtre suivante.Ctrl-b p
: Passer à la fenêtre précédente.
# ~/.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
Vaisseau spatial pour une jolie invite
Starship est une invite de shell écrite en Rust - c'est une alternative à Powerlevel10k ou Pure.
Une invite est une partie personnalisable de la ligne de commande qui fournit un contexte tel que le répertoire actuel ou la branche Git.
Starship vous donne une invite rapide et personnalisable. La configuration se fait à l'aide d'un starship.toml
fichier :
# $XDG_CONFIG_HOME/starship.toml
[username]
disabled = true
[hostname]
disabled = true
[git_status]
ahead = "↑"
behind = "↓"
[directory]
truncation_length = 2
Ripgrep pour la recherche de texte
Ripgrep est un outil de recherche de fichiers texte écrit en Rust — c'est une alternative à grep ou find.
La principale caractéristique de Ripgrep est la vitesse - c'est plus rapide que les outils alternatifs.
L'utilisation de base de Ripgrep est de rechercher un motif dans un répertoire :
$ rg 'pattern' ~/project
alias g='rg -l --hidden --smart-case --line-buffered'
$ g 'some-pattern' some/directory
fzf pour la recherche floue
fzf est un chercheur flou écrit en Go — c'est une alternative à la recherche déterministe.
fzf vous permet d'effectuer une recherche à l'aide d'un algorithme de recherche floue qui correspond à des modèles de regex sur des informations incomplètes. Cela permet aux résultats de la recherche d'apparaître au fur et à mesure que vous tapez, même avec des fautes d'orthographe.
fzf peut être exécuté en tant que programme en ligne de commande :
$ fzf
# fuzzy search all files in the `work` directory
$ cat ~/work/** <TAB>
fzf peut être utilisé avec différents moteurs de recherche, tels que find, grep ou Ripgrep.
Astuce — utilisez Ripgrep comme backend fzf en définissant la FZF_DEFAULT_COMMAND
variable d'environnement export FZF_DEFAULT_COMMAND='rg --files --hidden'
.
Exa pour lister les fichiers
Exa est un programme de liste de fichiers écrit en Rust — c'est une alternative à ls et tree.
Un programme de liste de fichiers vous montre des listes de fichiers et de répertoires. Exa offre des fonctionnalités telles que des icônes, l'intégration de Git et des options de tri polyvalentes.
Exa a quelques vues de base différentes :
# 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
Mes alias pour Exa sont :
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 pour afficher les fichiers
Bat est un visualiseur de fichiers écrit en Rust — c'est une alternative à cat.
Un visualiseur de fichiers est un programme qui affiche le contenu d'un fichier.
Bat offre des fonctionnalités telles que la coloration syntaxique, l'intégration Git et la pagination automatique des fichiers.
Bat est utilisé en pointant le programme sur un fichier texte :
$ bat path/to/file
Triste pour le remplacement du texte
Sad est un éditeur de flux écrit en Rust — c'est une alternative à sed ou awk.
Les éditeurs de flux effectuent des opérations de recherche et de remplacement sur des flux de texte ou des fichiers texte.
Sad (Space Age seD) affiche les remplacements proposés avant de les appliquer, vous permettant de vérifier et de sélectionner les remplacements à effectuer avant de les valider.
Sad est utilisé comme programme en ligne de commande :
$ 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 pour travailler avec JSON
jq est un processeur JSON écrit en C - c'est une alternative à fx, jp ou au traitement JSON dans un langage comme Python.
jq vous permet de filtrer, transformer et manipuler des données JSON, ce qui est utile pour travailler avec des réponses d'API, des fichiers de configuration et des magasins de données.
Une idée centrale dans jq est le filtre, qui s'applique à l'entrée JSON :
$ jq 'filter_expression' input.json
.key
- extraire la valeur d'une clé,.[]
- extraire toutes les valeurs d'un tableau,.[2]
- extraire la troisième valeur d'un tableau.
# 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
zoxide pour la navigation
zoxide est un utilitaire de navigation de terminal écrit en Rust — c'est une alternative à cd, pushd et popd.
zoxide saute aux répertoires de votre historique de visite. Il attribue un score à chaque répertoire en fonction de la fréquence et de la date de leur visite récente.
zoxide est utilisé comme programme en ligne de commande :
# move to a folder that best matches `code`
$ z code
Tig pour afficher l'historique de Git
Tig est une visionneuse d'historique Git écrite en C - c'est une alternative à l'utilisation de la CLI Git ou de Lazygit.
Tig fournit une interface navigable à code couleur pour parcourir votre historique de validation Git. Il permet de rechercher des commits, de visualiser le graphique des commits et d'afficher les fichiers à un moment différent.
Tig est exécuté en tant que programme en ligne de commande :
$ tig
direnv pour la gestion des variables d'environnement
direnv charge et décharge les variables d'environnement shell — écrites en Go, c'est une alternative à l'utilisation de$ source .env
.
direnv charge et décharge automatiquement les variables d'environnement lorsque vous naviguez entre différents répertoires de projet.
L'utilisation de direnv évite le chargement manuel des variables d'environnement et protège contre les variables d'environnement d'un projet définies dans un autre projet.
direnv utilise un .envrc
fichier pour contenir les variables spécifiques à votre projet, qui est exécuté comme un script shell :
# .envrc
export PROJECT_NAME="alpha"
$ direnv allow .
Une pratique courante consiste à charger éventuellement un secret ou private .envrc
:
source_env_if_exists .envrc.secret
Astuce — Utilisez direnv exec <path> <command>
pour exécuter une commande avec l'environnement chargé pour un répertoire spécifique sans y accéder.
Lazydocker pour Docker
Lazydocker gère les conteneurs et les images Docker - écrits en Go, c'est une alternative à Docker Desktop ou à la CLI Docker.
Lazydocker facilite l'affichage, le démarrage, l'arrêt et la suppression de conteneurs et d'images via une interface utilisateur de terminal. Il peut également fournir un aperçu en temps réel de l'état du conteneur, des journaux et de l'utilisation des ressources.
Lazydocker est utilisé comme programme en ligne de commande :
$ lazydocker
Markserv pour prévisualiser Markdown
Markserv rend les fichiers Markdown dans un navigateur - écrit en Node.js, c'est une alternative à Grip ou Markdown Preview.
Markserv rend Markdown en HTML en temps réel, reflétant automatiquement les modifications au fur et à mesure que vous les apportez.
Markserv prend en charge le Markdown à saveur GitHub, ce qui signifie qu'il formate les blocs de code et les tables de la même manière que Github. Markserv est idéal pour prévisualiser README.md
les fichiers sans pousser vers Github.
Pour démarrer un serveur Markserv sur le port 8010 :
$ markserv -p 8010
Ngrok pour le partage de serveurs locaux
ngrok crée des tunnels vers vos serveurs locaux - écrit en Go, c'est une alternative à Serveo, LocalTunnel ou PageKite.
ngrok expose un serveur local derrière un NAT ou un pare-feu à Internet. Ceci est utile pour partager un serveur de développement avec votre équipe.
Vous pouvez démarrer un tunnel vers le port 8000 en exécutant :
$ ngrok http 8000
Résumé
La boîte à outils du terminal hypermoderne est :
- Kitty pour un terminal accéléré par GPU et hautement personnalisable,
- Zsh pour une configuration shell & Prezto pour Zsh,
- Neovim en tant qu'éditeur de texte,
- Tmux pour la gestion de plusieurs terminaux,
- Starship pour une jolie invite,
- Ripgrep pour la recherche de fichiers texte,
- fzf pour la recherche floue,
- Exa pour lister les fichiers,
- Bat pour visualiser les fichiers,
- Triste pour rechercher et remplacer dans les fichiers texte,
- jq pour travailler avec JSON,
- zoxide pour la navigation,
- Tig pour visualiser l'historique de Git,
- direnv pour la gestion des variables d'environnement,
- Lazydocker pour Docker,
- Markserv pour prévisualiser Markdown,
- ngrok pour exposer les serveurs locaux à Internet.
Apprenez progressivement un outil à la fois pour devenir un maître du terminal
Publié à l'origine sur https://www.datasciencesouth.com .
Codage de niveau supérieur
Merci de faire partie de notre communauté ! Avant que tu partes:
- Applaudissez pour l'histoire et suivez l'auteur
- Voir plus de contenu dans la publication Level Up Coding
- Cours d'entretien de codage gratuit ⇒ Voir le cours
- Suivez-nous : Twitter | LinkedIn | Bulletin