ハイパーモダンなターミナル ツールボックス
2023 年の標準となるターミナル、シェル、コマンドライン ツール。
すべての開発者は端末を使用します。ワークフロー全体がターミナルである人もいます
この投稿では、2023 年の標準を設定するターミナル、シェル、コマンドライン ツールであるHypermodern Terminal Toolboxを紹介します
ターミナルエミュレータとしての Kitty
Kittyはターミナル エミュレータです。GNOME ターミナル、Alacritty、または Windows ターミナルの代替品です。
ターミナル エミュレータは、ターミナルを実行するプログラムです。オペレーティング システム (OS) が異なれば、OS の一部として、またはインストール可能なサードパーティ プログラムとして、異なるターミナル エミュレータが提供されます。
Kitty は、GPU で高速化されたサードパーティ製の端末エミュレータです。Kitty は高速で、高度にカスタマイズ可能で、オープンソースです。
設定はテキスト ファイルを使用して行われますkitty.conf
。
# $XDG_CONFIG_HOME/kitty/kitty.conf
font_family Operator Mono Book
font_size 14.0
scrollback_lines 2000
ヒント — で Kitty の設定を変更する場合はkitty.conf
、Kitty プログラムを完全に再起動する必要があります。
シェルとしての Zsh と Prezto
Zshは C で書かれたシェルで、Bash や Fish の代替品です。
シェルは、端末内で実行されるオペレーティング システムのテキスト インターフェイスです。シェル コマンドは、ファイルの作成やプログラムの実行などのタスクを実行します。
Zsh はオープン ソース シェルであり、Bash よりも多くの機能とカスタマイズ性を提供します。
Zsh は次の.zshrc
ファイルを使用して構成されます。
# ~/.zshrc
HISTSIZE=9999
alias brew='arch -x86_64 brew'
export PATH="$HOME/dotfiles/scripts:$PATH"
Prezto の機能には、構文の強調表示とコマンド タブの補完が含まれます。タブ補完は、新しいコマンド ライン ツールを対話的に探索する場合に便利です。
Prezto は次の.zpreztorc
ファイルを使用して構成されます。
# ~/.zpreztorc
zstyle ':prezto:load' pmodule \
'environment' \
'terminal' \
'editor' \
'history' \
'directory' \
'spectrum' \
'utility' \
'completion' \
'git' \
'syntax-highlighting' \
'history-substring-search' \
'autosuggestions' \
'prompt'
テキストエディタとしての Neovim
Neovimは Lua で書かれたテキスト エディターであり、Vim、Nano、Emacs の代替品です。
Neovim は Vim の人気の後継製品です。Vimscript で記述された Vim プラグインのエコシステム全体が、Lua で記述された Neovim プラグインの活発なエコシステム上で Neovim で動作します。
適切に構成された Neovim には、オートコンプリート用の言語サーバー (VS Code で使用できるのと同じ言語サーバー)、Treesitter による構文強調表示、およびさまざまな種類のリストを検索するための Telescope があります。
Neovim の構成は Lua で行われ、次のinit.lua
ファイルから開始します。
-- $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'
ヒント —賑やかな Neovim エコシステムをカバーする週刊ニュースレターを購読するには、「This Week in Neovim」を購読してください。
複数の端末用の Tmux
Tmuxは C で書かれたターミナル マルチプレクサです。Screen や複数のウィンドウでターミナルを実行する代わりに使用できます。
ターミナル マルチプレクサを使用すると、単一のウィンドウ内で複数のターミナル セッションを管理できます。
Tmux を使用すると、永続的なセッション、カスタマイズ可能なキー バインディングによるウィンドウおよびペインの管理が可能になります。
Tmux は、概念の階層を使用して複数の端末を管理します。
- ペインはウィンドウ内の長方形の領域です。各ペインには個別の端末セッションが表示されます。
- ウィンドウは、1 つ以上のペインを保持する全画面のコンテナです。
- セッションは 1 つ以上のウィンドウの集合です。
次のコマンドを使用して、新しい Tmux セッションを開始できますtmux new
。
# create a session named `work`
$ tmux new -s work
次のコマンドを使用して、実行中の Tmux セッションに再接続できますtmux attach
。
# reattach to last session
$ tmux attach
# reattach the session named `work`
$ tmux attach -t work
Ctrl-b c
: 新しいウィンドウを作成します。Ctrl-b n
:次のウィンドウに切り替えます。Ctrl-b p
: 前のウィンドウに切り替えます。
# ~/.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
かなりのプロンプトのためのスターシップ
Starshipは Rust で書かれたシェル プロンプトであり、Powerlevel10k や Pure の代替品です。
プロンプトは、現在のディレクトリや Git ブランチなどのコンテキストを提供するコマンド ラインのカスタマイズ可能な部分です。
Starship は、カスタマイズ可能なプロンプトを迅速に提供します。設定はファイルを使用して行われますstarship.toml
。
# $XDG_CONFIG_HOME/starship.toml
[username]
disabled = true
[hostname]
disabled = true
[git_status]
ahead = "↑"
behind = "↓"
[directory]
truncation_length = 2
テキストを検索するための Ripgrep
Ripgrepは Rust で書かれたテキスト ファイル検索ツールです。grep や find の代替品です。
Ripgrep の主な機能は速度であり、他のツールよりも高速です。
Ripgrep の基本的な使用法は、ディレクトリ内のパターンを検索することです。
$ rg 'pattern' ~/project
alias g='rg -l --hidden --smart-case --line-buffered'
$ g 'some-pattern' some/directory
あいまい検索用の fzf
fzfは Go で書かれたファジー ファインダーであり、確定的検索の代替手段です。
fzf を使用すると、不完全な情報の正規表現パターンに一致するあいまい検索アルゴリズムを使用して検索できます。これにより、スペルミスがあっても入力中に検索結果が表示されます。
fzf はコマンドライン プログラムとして実行できます。
$ fzf
# fuzzy search all files in the `work` directory
$ cat ~/work/** <TAB>
fzf は、find、grep、Ripgrep などのさまざまな検索バックエンドで使用できます。
FZF_DEFAULT_COMMAND
ヒント —環境変数を設定して、Ripgrep を fzf バックエンドとして使用しますexport FZF_DEFAULT_COMMAND='rg --files --hidden'
。
ファイルをリストするための Exa
Exaは Rust で書かれたファイルリスト プログラムです。ls や Tree の代替品です。
ファイルリストプログラムは、ファイルとディレクトリのリストを表示します。Exa は、アイコン、Git 統合、多彩な並べ替えオプションなどの機能を提供します。
Exa には、いくつかの異なる基本ビューがあります。
# 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
Exa のエイリアスは次のとおりです。
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
Batは Rust で書かれたファイル ビューアであり、cat の代替品です。
ファイル ビューアは、ファイルの内容を表示するプログラムです。
Bat は、構文の強調表示、Git 統合、自動ファイル ページングなどの機能を提供します。
Bat は、プログラムにテキスト ファイルを指定することで使用されます。
$ bat path/to/file
テキストを置き換えるのは悲しい
Sadは Rust で書かれたストリーム エディタです。sed や awk の代替品です。
ストリーム エディタは、テキスト ストリームまたはテキスト ファイルに対して検索および置換操作を実行します。
Sad (Space Age seD) では、適用する前に提案された置換が表示されるため、コミットする前にどの置換を行うかを確認して選択できます。
Sad はコマンドライン プログラムとして使用されます。
$ 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/).
JSON を操作するための jq
jqは C で書かれた JSON プロセッサです。これは、fx、jp、または Python などの言語で JSON を処理するための代替手段です。
jq を使用すると、JSON データのフィルター、変換、操作が可能になります。これは、API 応答、構成ファイル、データ ストアを操作する場合に役立ちます。
jq の中心的な考え方は、入力 JSON に適用されるフィルターです。
$ jq 'filter_expression' input.json
.key
- キーの値を抽出します。.[]
- 配列からすべての値を抽出します。.[2]
- 配列から 3 番目の値を抽出します。
# 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は Rust で書かれたターミナル ナビゲーション ユーティリティです。cd、pushd、popd の代替品です。
zoxide は、訪問履歴からディレクトリにジャンプします。各ディレクトリに最近アクセスされた頻度に基づいてスコアが割り当てられます。
zoxide はコマンドライン プログラムとして使用されます。
# move to a folder that best matches `code`
$ z code
Git 履歴を表示するための Tig
Tigは C で書かれた Git 履歴ビューアであり、Git CLI や Lazygit の使用に代わるものです。
Tig は、Git コミット履歴を参照するための、ナビゲート可能な色分けされたインターフェイスを提供します。これにより、コミットの検索、コミット グラフの表示、および異なる時点のファイルの表示が可能になります。
Tig はコマンドライン プログラムとして実行されます。
$ tig
環境変数管理用の direnv
direnv はシェル環境変数をロードおよびアンロードします。Go で書かれており、 を使用する代わりに使用できます$ source .env
。
direnv は、異なるプロジェクト ディレクトリ間を移動するときに、環境変数を自動的にロードおよびアンロードします。
direnv を使用すると、環境変数の手動ロードが回避され、あるプロジェクトの環境変数が別のプロジェクトに設定されるのを防ぎます。
direnv は.envrc
ファイルを使用してプロジェクトに固有の変数を保持し、シェル スクリプトとして実行します。
# .envrc
export PROJECT_NAME="alpha"
$ direnv allow .
一般的な方法は、オプションで Secret または private をロードすることです.envrc
。
source_env_if_exists .envrc.secret
ヒント —direnv exec <path> <command>
特定のディレクトリに移動せずに、そのディレクトリにロードされた環境でコマンドを実行する場合に使用します。
Docker のための Lazydocker
Lazydocker はDocker コンテナとイメージを管理します。Go で書かれており、Docker Desktop や Docker CLI の代替品です。
Lazydocker を使用すると、ターミナル UI を通じてコンテナーとイメージを簡単に表示、開始、停止、削除できます。また、コンテナーのステータス、ログ、リソースの使用状況のリアルタイムの概要を提供することもできます。
Lazydocker はコマンドライン プログラムとして使用されます。
$ lazydocker
マークダウンをプレビューするための Markserv
Markserv はブラウザーで Markdown ファイルをレンダリングします。Node.js で記述されており、Grip または Markdown Preview の代替となります。
Markserv は Markdown をリアルタイムで HTML にレンダリングし、変更を加えると自動的に反映します。
Markserv は GitHub 風味の Markdown をサポートしています。つまり、コード ブロックとテーブルを Github と同じ形式でフォーマットします。Markserv は、Github にプッシュせずにファイルをプレビューするのに最適ですREADME.md
。
Markserv サーバーをポート 8010 で起動するには:
$ markserv -p 8010
ローカルサーバーを共有するための Ngrok
ngrok はローカル サーバーへのトンネルを作成します。Go で書かれており、Serveo、LocalTunnel、PageKite の代替となります。
ngrok は、NAT またはファイアウォールの背後にあるローカル サーバーをインターネットに公開します。これは、開発サーバーをチームと共有する場合に便利です。
次のコマンドを実行して、ポート 8000 へのトンネルを開始できます。
$ ngrok http 8000
まとめ
ハイパーモダン ターミナル ツールボックスは次のとおりです。
- Kittyは GPU で高速化され、高度にカスタマイズ可能なターミナル、
- シェル用のZshおよび Zsh 構成用のPrezto、
- Neovimをテキストエディタとして使用し、
- 複数の端末を管理するためのTmux、
- かなりのプロンプトを提供するスターシップ、
- テキストファイルを検索するためのRipgrep 、
- あいまい検索用のfzf 、
- ファイルをリストするためのExa、
- ファイルを閲覧するためのBat、
- テキスト ファイルの検索と置換は残念ですが、
- JSON を操作するためのjq、
- ナビゲーション用のゾキシド、
- Git 履歴を表示するためのTig、
- 環境変数管理用のdirenv 、
- Docker のためのLazydocker、
- Markdown をプレビューするためのMarkserv、
- ローカルサーバーをインターネットに公開するためのngrok 。
一つずつ着実にツールを学んでターミナルマスターを目指しましょう
オリジナルはhttps://www.datasciencesouth.comで公開されました。
レベルアップコーディング
コミュニティにご参加いただきありがとうございます。出発する前に:
- ストーリーに拍手を送り、著者をフォローしてください
- 『レベルアップコーディング』出版物でさらにコンテンツを表示
- 無料コーディング面接コース ⇒コースを見る
- フォローしてください: Twitter | リンクトイン| ニュースレター