Hypermoderne Terminal-Toolbox
Terminal-, Shell- und Befehlszeilentools setzen im Jahr 2023 Maßstäbe.
Alle Entwickler verwenden Terminals; Für manche ist ihr gesamter Arbeitsablauf das Terminal
In diesem Beitrag wird die Hypermodern Terminal Toolbox vorgestellt – Terminal-, Shell- und Befehlszeilentools, die im Jahr 2023 den Standard setzen
Kitty als Terminal-Emulator
Kitty ist ein Terminalemulator – eine Alternative zum GNOME-Terminal, Alacritty oder dem Windows-Terminal.
Ein Terminalemulator ist das Programm, das Ihr Terminal ausführt. Verschiedene Betriebssysteme (OS) bieten unterschiedliche Terminalemulatoren, entweder als Teil des Betriebssystems oder als installierbare Programme von Drittanbietern.
Kitty ist ein GPU-beschleunigter Terminalemulator eines Drittanbieters. Kitty ist schnell, hochgradig anpassbar und Open Source.
Die Konfiguration erfolgt über eine kitty.conf
Textdatei:
# $XDG_CONFIG_HOME/kitty/kitty.conf
font_family Operator Mono Book
font_size 14.0
scrollback_lines 2000
Tipp: Wenn Sie die Kitty-Einstellungen in ändern kitty.conf
, müssen Sie das Kitty-Programm vollständig neu starten.
Zsh & Prezto als Shell
Zsh ist eine in C geschriebene Shell – eine Alternative zu Bash oder Fish.
Eine Shell ist eine Textschnittstelle des Betriebssystems, die in einem Terminal ausgeführt wird. Shell-Befehle führen Aufgaben wie das Erstellen von Dateien und das Ausführen von Programmen aus.
Zsh ist eine Open-Source-Shell, die mehr Funktionalität und Anpassbarkeit bietet als Bash.
Zsh wird mithilfe einer .zshrc
Datei konfiguriert:
# ~/.zshrc
HISTSIZE=9999
alias brew='arch -x86_64 brew'
export PATH="$HOME/dotfiles/scripts:$PATH"
Zu den Funktionen von Prezto gehören die Syntaxhervorhebung und die Vervollständigung von Befehlsregisterkarten. Die Tab-Vervollständigung ist nützlich, um neue Befehlszeilentools interaktiv zu erkunden.
Prezto wird mithilfe einer .zpreztorc
Datei konfiguriert:
# ~/.zpreztorc
zstyle ':prezto:load' pmodule \
'environment' \
'terminal' \
'editor' \
'history' \
'directory' \
'spectrum' \
'utility' \
'completion' \
'git' \
'syntax-highlighting' \
'history-substring-search' \
'autosuggestions' \
'prompt'
Neovim als Texteditor
Neovim ist ein in Lua geschriebener Texteditor – eine Alternative zu Vim, Nano oder Emacs.
Neovim ist ein beliebter Nachfolger von Vim. Das gesamte Ökosystem der in Vimscript geschriebenen Vim-Plugins funktioniert in Neovim, zusätzlich zu einem geschäftigen Ökosystem von in Lua geschriebenen Neovim-Plugins.
Ein gut konfiguriertes Neovim verfügt über Sprachserver für die automatische Vervollständigung (die gleichen Sprachserver, die auch in VS Code verfügbar sind), Syntaxhervorhebung mit Treesitter und Telescope zum Durchsuchen verschiedener Arten von Listen.
Die Konfiguration von Neovim erfolgt in Lua – beginnend mit einer init.lua
Datei:
-- $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'
Tipp: Abonnieren Sie „This Week in Neovim“, um einen wöchentlichen Newsletter über das geschäftige Neovim-Ökosystem zu erhalten.
Tmux für mehrere Terminals
Tmux ist ein in C geschriebener Terminal-Multiplexer – eine Alternative zu Screen oder der Ausführung von Terminals in mehreren Fenstern.
Mit Terminal-Multiplexern können Sie mehrere Terminalsitzungen in einem einzigen Fenster verwalten.
Tmux bietet Ihnen dauerhafte Sitzungen, Fenster- und Fensterverwaltung mit anpassbaren Tastenkombinationen.
Tmux verwendet eine Hierarchie von Konzepten, um mehrere Terminals zu verwalten:
- Ein Bereich ist ein rechteckiger Bereich innerhalb eines Fensters. In jedem Bereich wird eine separate Terminalsitzung angezeigt.
- Ein Fenster ist ein Vollbildcontainer, der einen oder mehrere Bereiche enthält.
- Eine Sitzung ist eine Sammlung von einem oder mehreren Fenstern.
Sie können eine neue Tmux-Sitzung starten mit tmux new
:
# create a session named `work`
$ tmux new -s work
Sie können eine erneute Verbindung zu einer laufenden Tmux-Sitzung herstellen mit tmux attach
:
# reattach to last session
$ tmux attach
# reattach the session named `work`
$ tmux attach -t work
Ctrl-b c
: Ein neues Fenster erstellen.Ctrl-b n
: Zum nächsten Fenster wechseln.Ctrl-b p
: Zum vorherigen Fenster wechseln.
# ~/.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
Raumschiff für eine hübsche Aufforderung
Starship ist ein in Rust geschriebener Shell-Prompt – eine Alternative zu Powerlevel10k oder Pure.
Eine Eingabeaufforderung ist ein anpassbarer Teil der Befehlszeile, der Kontext bereitstellt, z. B. das aktuelle Verzeichnis oder den Git-Zweig.
Starship bietet Ihnen eine schnelle, anpassbare Eingabeaufforderung. Die Konfiguration erfolgt über eine starship.toml
Datei:
# $XDG_CONFIG_HOME/starship.toml
[username]
disabled = true
[hostname]
disabled = true
[git_status]
ahead = "↑"
behind = "↓"
[directory]
truncation_length = 2
Ripgrep zum Durchsuchen von Text
Ripgrep ist ein in Rust geschriebener Textdateisucher – eine Alternative zu grep oder find.
Das Hauptmerkmal von Ripgrep ist die Geschwindigkeit – es ist schneller als alternative Tools.
Die grundlegende Verwendung von Ripgrep besteht darin, in einem Verzeichnis nach einem Muster zu suchen:
$ rg 'pattern' ~/project
alias g='rg -l --hidden --smart-case --line-buffered'
$ g 'some-pattern' some/directory
fzf für Fuzzy Searching
fzf ist ein in Go geschriebener Fuzzy-Finder – eine Alternative zur deterministischen Suche.
Mit fzf können Sie mithilfe eines Fuzzy-Suchalgorithmus suchen, der Regex-Muster anhand unvollständiger Informationen abgleicht. Dadurch können Suchergebnisse auch bei Rechtschreibfehlern bereits während der Eingabe angezeigt werden.
fzf kann als Befehlszeilenprogramm ausgeführt werden:
$ fzf
# fuzzy search all files in the `work` directory
$ cat ~/work/** <TAB>
fzf kann mit verschiedenen Such-Backends wie find, grep oder Ripgrep verwendet werden.
Tipp: Verwenden Sie Ripgrep als fzf-Backend, indem Sie die FZF_DEFAULT_COMMAND
Umgebungsvariable festlegen export FZF_DEFAULT_COMMAND='rg --files --hidden'
.
Exa zum Auflisten von Dateien
Exa ist ein in Rust geschriebenes Dateilistenprogramm – eine Alternative zu ls und tree.
Ein Dateiauflistungsprogramm zeigt Ihnen Listen von Dateien und Verzeichnissen an. Exa bietet Funktionen wie Symbole, Git-Integration und vielseitige Sortiermöglichkeiten.
Exa hat einige verschiedene Grundansichten:
# 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
Meine Aliase für Exa sind:
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 zum Anzeigen von Dateien
Bat ist ein in Rust geschriebener Dateibetrachter – eine Alternative zu cat.
Ein Dateibetrachter ist ein Programm, das den Inhalt einer Datei anzeigt.
Bat bietet Funktionen wie Syntaxhervorhebung, Git-Integration und automatisches Datei-Paging.
Bat wird verwendet, indem das Programm auf eine Textdatei zeigt:
$ bat path/to/file
Schade, dass ich den Text ersetzt habe
Sad ist ein in Rust geschriebener Stream-Editor – eine Alternative zu sed oder awk.
Stream-Editoren führen Such- und Ersetzungsvorgänge für Textstreams oder Textdateien durch.
Sad (Space Age seD) zeigt vorgeschlagene Ersetzungen vor der Anwendung an, sodass Sie prüfen und auswählen können, welche Ersetzungen vorgenommen werden sollen, bevor Sie sie übernehmen.
Sad wird als Befehlszeilenprogramm verwendet:
$ 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 für die Arbeit mit JSON
jq ist ein in C geschriebener JSON-Prozessor – eine Alternative zu fx, jp oder der Verarbeitung von JSON in einer Sprache wie Python.
Mit jq können Sie JSON-Daten filtern, transformieren und bearbeiten, was für die Arbeit mit API-Antworten, Konfigurationsdateien und Datenspeichern nützlich ist.
Eine zentrale Idee in jq ist der Filter, der auf den Eingabe-JSON angewendet wird:
$ jq 'filter_expression' input.json
.key
- den Wert eines Schlüssels extrahieren,.[]
- alle Werte aus einem Array extrahieren,.[2]
- Extrahieren Sie den dritten Wert aus einem 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
zoxide für Navigation
zoxide ist ein in Rust geschriebenes Terminal-Navigationsdienstprogramm – es ist eine Alternative zu cd, pushd und popd.
zoxide springt von Ihrem Besuchsverlauf zu Verzeichnissen. Es weist jedem Verzeichnis eine Bewertung zu, die darauf basiert, wie oft und kürzlich es besucht wurde.
Als Kommandozeilenprogramm wird zoxide verwendet:
# move to a folder that best matches `code`
$ z code
Tig zum Anzeigen des Git-Verlaufs
Tig ist ein in C geschriebener Git-History-Viewer – eine Alternative zur Verwendung der Git-CLI oder Lazygit.
Tig bietet eine navigierbare, farbcodierte Oberfläche zum Durchsuchen Ihres Git-Commit-Verlaufs. Es ermöglicht die Suche nach Commits, die Anzeige des Commit-Diagramms und die Anzeige von Dateien zu einem anderen Zeitpunkt.
Tig wird als Befehlszeilenprogramm ausgeführt:
$ tig
direnv für die Verwaltung von Umgebungsvariablen
direnv lädt und entlädt Shell-Umgebungsvariablen – in Go geschrieben, ist es eine Alternative zur Verwendung von$ source .env
.
direnv lädt und entlädt automatisch Umgebungsvariablen, während Sie zwischen verschiedenen Projektverzeichnissen navigieren.
Die Verwendung von direnv vermeidet das manuelle Laden von Umgebungsvariablen und schützt davor, dass Umgebungsvariablen aus einem Projekt in einem anderen Projekt festgelegt werden.
direnv verwendet eine .envrc
Datei zum Speichern projektspezifischer Variablen, die als Shell-Skript ausgeführt wird:
# .envrc
export PROJECT_NAME="alpha"
$ direnv allow .
Eine gängige Vorgehensweise besteht darin, wahlweise ein Geheimnis oder ein Privatzeichen zu laden .envrc
:
source_env_if_exists .envrc.secret
Tipp – Verwenden Sie diese Option direnv exec <path> <command>
, um einen Befehl mit geladener Umgebung für ein bestimmtes Verzeichnis auszuführen, ohne dorthin zu navigieren.
Lazydocker für Docker
Lazydocker verwaltet Docker-Container und -Images – geschrieben in Go, ist es eine Alternative zu Docker Desktop oder der Docker-CLI.
Lazydocker erleichtert das Anzeigen, Starten, Stoppen und Entfernen von Containern und Bildern über eine Terminal-Benutzeroberfläche. Es kann auch einen Echtzeitüberblick über Containerstatus, Protokolle und Ressourcennutzung bieten.
Als Kommandozeilenprogramm kommt Lazydocker zum Einsatz:
$ lazydocker
Markserv für die Vorschau von Markdown
Markserv rendert Markdown-Dateien in einem Browser – geschrieben in Node.js, ist es eine Alternative zu Grip oder Markdown Preview.
Markserv rendert Markdown in Echtzeit in HTML und spiegelt dabei automatisch die von Ihnen vorgenommenen Änderungen wider.
Markserv unterstützt GitHub-basiertes Markdown, was bedeutet, dass es Codeblöcke und Tabellen genauso formatiert wie Github. Markserv eignet sich hervorragend für die Vorschau von README.md
Dateien, ohne sie an Github zu senden.
So starten Sie einen Markserv-Server auf Port 8010:
$ markserv -p 8010
Ngrok für die gemeinsame Nutzung lokaler Server
ngrok erstellt Tunnel zu Ihren lokalen Servern – geschrieben in Go, ist es eine Alternative zu Serveo, LocalTunnel oder PageKite.
ngrok macht einen lokalen Server hinter einem NAT oder einer Firewall dem Internet zugänglich. Dies ist nützlich, um einen Entwicklungsserver mit Ihrem Team zu teilen.
Sie können einen Tunnel zu Port 8000 starten, indem Sie Folgendes ausführen:
$ ngrok http 8000
Zusammenfassung
Die Hypermodern Terminal Toolbox ist:
- Kitty für ein GPU-beschleunigtes, hochgradig anpassbares Terminal,
- Zsh für eine Shell und Prezto für die Zsh-Konfiguration,
- Neovim als Texteditor,
- Tmux zur Verwaltung mehrerer Terminals,
- Raumschiff für eine hübsche Aufforderung,
- Ripgrep zum Durchsuchen von Textdateien,
- fzf für Fuzzy-Suche,
- Exa zum Auflisten von Dateien,
- Bat zum Anzeigen von Dateien,
- Schade um das Suchen und Ersetzen in Textdateien.
- jq für die Arbeit mit JSON,
- Zoxid für die Navigation,
- Tig zum Anzeigen des Git-Verlaufs,
- direnv für die Verwaltung von Umgebungsvariablen,
- Lazydocker für Docker,
- Markserv für die Vorschau von Markdown,
- ngrok , um lokale Server dem Internet zugänglich zu machen.
Lernen Sie nach und nach ein Tool nach dem anderen, um ein Terminal-Meister zu werden
Ursprünglich veröffentlicht unter https://www.datasciencesouth.com .
Level-Up-Codierung
Vielen Dank, dass Sie Teil unserer Community sind! Bevor du gehst:
- Klatschen Sie für die Geschichte und folgen Sie dem Autor
- Weitere Inhalte finden Sie in der Level Up Coding-Publikation
- Kostenloser Programmier-Interviewkurs ⇒ Kurs ansehen
- Folgen Sie uns: Twitter | LinkedIn | Newsletter