WezTermのCopy Mode・Quick Selectが便利すぎる
ターミナルのコピー操作、地味に面倒だと思っていた
ターミナルで作業していると、出力されたテキストをコピーしたい場面が頻繁にあります。エラーメッセージ、ログに出てきたファイルパス、curlで返ってきたURL。最近ではClaude Codeのようなターミナル上で動くAIツールが提案してきたコードやコマンドをコピーしたい、という場面も増えました。
ただ、このコピー操作が地味にストレスでした。
- マウスでドラッグして選択しようとすると、行の途中で折り返されて範囲がずれる
- 100行前に出力されたログを見たくて、トラックパッドで延々スクロールする
- 長いURLをコピーしたいだけなのに、前後の余計な文字まで巻き込む
WezTermにはこの不便さを解消する機能が組み込まれています。この記事では、WezTermの”読む・探す・コピーする”まわりの機能を紹介します。
WezTermには「モード」がある
WezTermはRust製のターミナルエミュレータです。GPU アクセラレーション、Luaベースの設定ファイル、クロスプラットフォーム対応など特徴はいろいろありますが、個人的に一番気に入っているのはテキスト操作のためのモードが充実している点です。
WezTermには3つのモードがあります。
| モード | 起動キー | できること |
|---|---|---|
| Copy Mode | Ctrl-Shift-X | Vimライクなカーソル移動でスクロールバックを読む・選択・コピー |
| Search Mode | Ctrl-Shift-F | スクロールバック全体をインクリメンタル検索 |
| Quick Select | Ctrl-Shift-Space | URL・パス・ハッシュなどを自動認識し、1キーでコピー |
通常のターミナル操作(コマンド入力)は「Normal Mode」にあたります。各モードに入ると、キー入力がそのモード専用の操作に切り替わる。Vimのモード概念に近い感覚です。
Copy Mode:キーボードだけでスクロールバックを読む
Ctrl-Shift-X でCopy Modeに入ります。
Copy Modeに入ると、ターミナルの出力をキーボードだけで自由に動き回れるようになります。カーソル移動はVimとほぼ同じです。
| キー | 動作 |
|---|---|
h j k l | 左・下・上・右に移動 |
w / b | 単語単位で前方・後方に移動 |
0 / $ | 行頭・行末に移動 |
g / G | スクロールバックの先頭・末尾に移動 |
Ctrl-d / Ctrl-u | 半ページ下・上にスクロール |
f{char} / F{char} | 行内で文字を前方・後方検索してジャンプ |
テキストの選択も、Vimのビジュアルモードに倣っています。
| キー | 動作 |
|---|---|
Space | 文字単位の選択を開始 |
V | 行単位の選択を開始 |
Ctrl-v | 矩形選択に切り替え |
o | 選択範囲の反対端にカーソルを移動 |
y | 選択範囲をコピーしてCopy Modeを抜ける |
たとえば「50行くらい前に出力されたスタックトレースをコピーしたい」という場面。Copy Modeに入って 50k で50行上に移動、V で行選択を始めて 10j で10行分選択、y でコピー。マウスに一度も触れずに完結するのが気持ちいいんです。
Escキーまたは Ctrl-C でCopy Modeを抜けられます。
Search Mode:長いログから目的の文字列を探す
Ctrl-Shift-F でSearch Modeに入ります。
Search Modeはスクロールバック全体を対象にしたインクリメンタル検索です。文字を打つたびに一致箇所がハイライトされ、リアルタイムで結果が絞り込まれていきます。
| キー | 動作 |
|---|---|
| 文字入力 | 検索パターンを入力(インクリメンタルに反映) |
Enter / Ctrl-p | 前の一致箇所にジャンプ |
Ctrl-n | 次の一致箇所にジャンプ |
Ctrl-r | 検索タイプを切り替え(大文字小文字を区別する文字列 → 区別しない文字列 → 正規表現) |
Ctrl-u | 検索パターンをクリア |
Escape | Search Modeを閉じる |
Ctrl-r による検索タイプの切り替えが地味に強力です。たとえば Ctrl-r で正規表現モードに切り替えれば、error|warn のようなパターンでログを横断的に拾えます。
Search Modeで一致箇所にジャンプした後、そのままCopy Modeに移行することもできます。Enterで一致箇所に飛んだ時点で、Copy Modeのカーソルはその位置にある。そこから V で行選択して y でコピー、という流れが自然につながります。
Quick Select:URLやパスを一瞬でコピーする
Ctrl-Shift-Space でQuick Select Modeに入ります。
Quick Selectは、画面上のURL、ファイルパス、gitハッシュなどを自動で認識し、それぞれにラベル(a, s, d など)を振ってくれるモードです。あとはコピーしたいものに対応するキーを1つ押すだけ。その文字列がクリップボードに入ります。
たとえばターミナルに以下のような出力があるとします。
error: file not found: /usr/local/etc/config.yaml
see: https://example.com/docs/troubleshooting
commit: a1b2c3d4e5f6
Quick Selectを起動すると、/usr/local/etc/config.yaml、https://example.com/docs/troubleshooting、a1b2c3d4e5f6 のそれぞれにラベルが表示されます。a を押せばURLがコピーされ、s を押せばパスがコピーされる、という具合です。
デフォルトで認識されるパターンには、URL、ファイルパス、gitハッシュ、IPアドレスなどが含まれています。自分で正規表現パターンを追加することもできます。
config.quick_select_patterns = {
'[0-9a-f]{7,40}', -- gitハッシュ
}
さらに QuickSelectArgs を使えば、選択後のアクションをカスタマイズできます。たとえばURLを選んだら直接ブラウザで開く、といった設定も可能です。
config.keys = {
{
key = 'P',
mods = 'CTRL',
action = wezterm.action.QuickSelectArgs {
label = 'open url',
patterns = {
'https?://\\S+',
},
action = wezterm.action_callback(function(window, pane)
local url = window:get_selection_text_for_pane(pane)
wezterm.open_with(url)
end),
},
},
}
キーバインドは key_tables でカスタマイズできる
ここまで紹介したCopy Mode・Search Modeのキーバインドは、すべて wezterm.lua の key_tables で上書きできます。
local wezterm = require 'wezterm'
local act = wezterm.action
return {
key_tables = {
copy_mode = {
{ key = 'y', mods = 'NONE', action = act.Multiple {
{ CopyTo = 'ClipboardAndPrimarySelection' },
{ CopyMode = 'ScrollToBottom' },
{ CopyMode = 'Close' },
}},
-- Vimと同じ操作感にしたければ、デフォルトをベースに調整する
},
search_mode = {
{ key = 'Enter', mods = 'NONE', action = act.CopyMode 'PriorMatch' },
{ key = 'Escape', mods = 'NONE', action = act.CopyMode 'Close' },
{ key = 'n', mods = 'CTRL', action = act.CopyMode 'NextMatch' },
{ key = 'p', mods = 'CTRL', action = act.CopyMode 'PriorMatch' },
{ key = 'r', mods = 'CTRL', action = act.CopyMode 'CycleMatchType' },
},
},
}
key_tables はモードごとのキーマップを丸ごと定義する仕組みです。ちなみにデフォルトのキーテーブルは wezterm show-keys コマンドで確認できるので、そこから必要な部分だけ変えるのが楽でした。
どんな人に向いているか
WezTermのモード機能は、こんな人に特に刺さる気がします。
- Vimユーザー: Copy Modeの操作体系がVimそのものなので、新しく覚えることがほとんどない
- ログを頻繁に読む人: デプロイログ、CIの出力、アプリケーションログなど、長い出力を遡って読む機会が多い人
- URLやパスをよくコピーする人: Quick Selectでマウスドラッグから解放される
- tmuxを使っている人: tmuxのcopy modeからの乗り換え先として、WezTermのCopy Modeは操作感が近い
逆に、ターミナルをたまにしか使わない人や、マウス操作に不便を感じていない人には、モード切り替えの概念自体がオーバーヘッドになるかもしれません。
まとめ:WezTermは”読む・探す・コピーする”体験が強い
WezTermのCopy Mode、Search Mode、Quick Selectの3つを紹介しました。
- Copy Mode: Vimライクなカーソル操作でスクロールバックを読む・選択・コピー
- Search Mode: インクリメンタル検索+正規表現でログを探す。そのままCopy Modeに移行できる
- Quick Select: URL・パス・ハッシュを自動認識し、1キーでコピー
ターミナルエミュレータ選びでは見た目やパフォーマンスが注目されがちですが、「出力されたテキストをどれだけ快適に扱えるか」も日常の作業効率に直結します。WezTermはこの部分がとても強い。私はもうマウスでのドラッグ選択には戻れない気がします。
まだCopy Modeのキーバインドも育てている途中なので、自分の手に馴染む形にカスタマイズしていきたいです。