GUIをぐいぐい使ってた人間がVimmerになるためのショートカット&操作メモ
Windows の WezTerm からクラウド開発サーバー(Azure devbox)の tmux + Zsh に接続する構成で使っている、自分がよく忘れるショートカット・コマンド・操作手順をまとめたメモです。
このショートカット集やプラグイン構成は、以下の方々の記事・動画を大変参考にさせていただいております。
多大なる影響を受けました。ありがとうございます。
- ryoppippi (@ryoppippi) — 【外資ITエンジニアの開発環境】VimmerによるVimmer(になりたい人)のためのVim動画
- mozumasu (@mozumasu) — WezTerm をカスタマイズして開発体験を向上させる / 【WezTerm】モテたい人のためのターミナル設定入門
- TECH WORLD (YouTube チャンネル)
環境
-
ターミナル: WezTerm Nightly(Windows。表示器 + SSH クライアント。タブの × を消す
show_close_tab_button_in_tabsが安定版 20240203 に無いため Nightly を使う。更新は https://github.com/wezterm/wezterm/releases/tag/nightly のWezTerm-nightly-setup.exeを上書きインストール。GUI とwezterm-mux-serverは同じ版でないと繋がらないので、更新後は両方を止めてランチャーから起動し直す) -
開発サーバー: Azure VM (devbox, Ubuntu 24.04)。セッション層は tmux(
ssh devbox→tmでどの端末からも同じセッションに入れる) - シェル: Zsh on devbox
- プラグイン: zoxide, fzf, ghq
各ツールの設定ファイルは https://github.com/AutoFor/dotfiles を参照してください。
(旧構成の WSL2 は #212 で引退。WSL 前提の記述は削除済み)
WezTerm + tmux
Leader キーは Ctrl+q(2秒タイムアウト)。tmux の prefix も Ctrl+q に揃えてある(Ctrl+b も従来どおり効く)。
ただし WezTerm 上では Ctrl+q は WezTerm 自身が Leader として食うため、tmux までは届かない。
WezTerm から tmux のキーを叩く経路は <leader> →キー のブリッジで、これが内部で Ctrl+b を送っている。
tmux の Ctrl+q が prefix として直接効くのは、iPad / Termius / 素の ssh など WezTerm 以外のクライアントから入ったとき。
Ctrl+q を押すと右下ステータスに LEADER と出て「待ち受け中」が分かる。続けてキーを押すと、<leader> ブリッジ経由のショートカット(m / M など)は右下に 押したキーが約 1 秒表示される(緑=tmux に送信できた/赤=tmux ペインでないためフォールバック)。何も出なければそのキーはブリッジに割り当てられていない。
Ctrl+b を prefix2 として残しているのはこのブリッジを壊さないため。
#214 以降、Window / Tab / Pane の管理は devbox 上の tmux に一本化した。
WezTerm はただの表示器 + SSH クライアントで、以下のタブ/ペイン系キーはすべて tmux の
prefix シーケンスに自動変換される(ローカルの PowerShell ペインでは何もしない)。
階層の対応: WezTerm の Window/Tab/Pane ≒ tmux の Session / Window / Pane。
Session(旧 Workspace 相当)
セッション = タブ構成ごと切り替えられる作業文脈の単位。リモート側に永続し、切断・再起動・別端末からの接続でもそのまま復帰する。
現在のセッション名はタブバー左端(左上)に青いセグメントで常時表示される(tmux 側の wezterm-tabs-sync がセッション名を通知し、ウィンドウのタブ列と同じ形のリボンとして描画。色だけ青でタブと区別)。
また、画面下部の tmux ステータスバーの左下に、接続表示(通常は紫の devbox、アクティブペインで ssh 実行中は赤の ssh)、アクティブペインの cwd のフルパス(青、ホームは ~ 省略)、git ブランチ名(緑)が常時表示される(リポジトリ外はパスのみ。長いパスは末尾優先で先頭を … 省略)。WezTerm 右上は普段は空で、LEADER・音声入力中などの一時的なインジケータだけが出る(音声入力の録音状態は Windows 側にしか無いため右上に残している)。ウィンドウ一覧・右下(セッション名+日時)は WezTerm のタブバーと重複するため、モバイル(グループセッション)のときだけ下部バーに表示される。
| ショートカット / コマンド | 動作 | 由来 |
|---|---|---|
tm |
main セッションに attach(無ければ作成)。シェルで実行 | tmux main |
tm <名前> |
別セッションに attach(無ければ作成) | 同上 |
<leader> →s |
セッション一覧から選択して切り替え(名前順=並び順番号の順で出る) | session |
<leader> →n |
新しいセッションを作る(名前を聞かれ、そのまま移動する。Ctrl+q → Shift+N) |
new |
<leader> →m |
現在のペインを別のウィンドウ/セッションへ移動(一覧から移動先を選ぶ。選んだウィンドウに合流する。Ctrl+q → m) |
move(ペイン単位=小文字) |
<leader> →M |
現在のウィンドウ(=このタブ)を丸ごと別のセッションへ移動して追従(一覧から移動先セッションを選ぶ。タブ名・ペイン名はそのまま維持)。<leader> →m のウィンドウ単位版。Ctrl+q → Shift+M
|
Move(ウィンドウ単位=大文字) |
Alt+k / Alt+j
|
ペインの上端/下端まで来てからもう 1 回押すと前 / 次のセッションへ抜ける(移動先では反対側の端のペインに着地)。ペイン移動と地続きなので、縦に押し続けると全セッションを一周できる。途中のペインを飛ばして 1 発で移りたいときは Ctrl+q → ( / )
|
k=上=前, j=下=次 の vim 方向 |
Ctrl+q → ( / )
|
前 / 次のセッションへ | tmux 標準 |
<leader> →T |
現在のセッション名を変更(番号は維持されるので入力するのは名前だけ。3-main のように先頭に番号を書くとその位置へ移動する。Ctrl+q → $) |
Title(<leader> →t のタブ名変更のセッション版=大文字) |
Alt+Shift+, / Alt+Shift+.
|
セッションを並びの前 / 後ろへ入れ替える(Alt+, / Alt+. のタブ入れ替えのセッション版。端まで来たらそれ以上は動かない) |
< > の向き |
Ctrl+q → d |
セッションから detach(セッションは生存継続) | detach |
セッションの並び順は名前の先頭に付く 2 桁の番号(01-main 02-dotfiles …)で決まる。
tmux はセッションを名前の昇順でしか並べない(Alt+k/j でセッションを跨ぐときの順もこれ)ため、
番号を振って並びを操作できるようにしている。番号は自動で採番・詰め直しされるので手で付ける必要はなく、Alt+Shift+, / Alt+Shift+. で隣と入れ替えるか、
<leader> →T の入力で 3-main のように先頭に位置番号を書いて一発で移すかの 2 通りで並び替える
(3-main は「3 番目に置く」の意味。実際に付く番号は移動後に 01, 02, … と振り直される。
9-main のように数が多すぎるときは末尾に丸められ、2024-plans のような 3 桁以上は番号ではなく名前として扱う)。
tm main や WezTerm 起動時の attach は番号無しの名前でも実際のセッション(03-main)を引くので、
これまでどおりの打ち方で入れる。
<leader> →s の一覧も同じ名前順にしてある(tmux 3.4 の choose-tree は既定だとセッションの
作成順で並び、番号と食い違って見えるため、開いた直後に並び替えキー O を送って名前順にしている)。
<leader> →mでペインを動かすと、ペインの位置(セッション名 / ウィンドウ番号 / ペイン番号)が変わる。
ペイン名と Claude Code の会話 ID はこの位置をキーに保存しているので、移動したまま放置すると
次回の復元で名前や会話が元の位置に付いてしまう。移動直後に自動で保存し直すようにしてあるので手動保存は不要。
同じ理由で、ウィンドウごとの移動(<leader> →M)・ペインの切り出し(Ctrl+q → !)・タブの入れ替え(Alt+,/Alt+.)でも自動保存が走る。
セッション名が変わる操作(<leader> →Tの改名、Alt+Shift+,/Alt+Shift+.の並び替え)も位置キーが変わるので、同じく自動で保存し直す。
tmux 標準の「直前のセッションへ戻る」
prefix + Lは使えない。Lはペインサイズ調整に割り当ててあるため。
Tab(実体は tmux ウィンドウ)
タブ一覧は WezTerm のタブバー(ヘッダー)に従来どおりの見た目(矢羽根 + 小さめ UI フォント)で表示される。仕組みは tmux がウィンドウ構成の変化を wezterm-tabs-sync で WezTerm に通知し、WezTerm がタブ風に描画する表示専用の連携。クリックでは切り替えられないので Ctrl+Tab / Ctrl+数字 を使う。tmux 自身のステータスラインは非表示。
ウィンドウが多くてタブバー幅に収まらないときは、アクティブなタブを中心に、各タブの実際の名前幅で詰められるだけ並べ、溢れた分を左右の +N(隠れているタブ数)で示す。短い名前のタブは場所を取らないので、同じ幅でもなるべく多く表示される。全部見えないときはウィンドウを広げるか、Ctrl+数字 で目的のタブへ直接飛ぶ。
| ショートカット | 動作 | 由来 |
|---|---|---|
Ctrl+t |
新規タブ(ローカルペイン=PowerShell 等では同じドメインの WezTerm タブを新規作成) | ブラウザ由来(tab) |
Ctrl+w |
現在のタブを閉じる(確認なしで即クローズ。ローカルペインでは WezTerm タブを閉じる) | ブラウザ由来(window close) |
Ctrl+Shift+w |
閉じたタブを開き直す。タブ名・ペインのレイアウト・各ペインの cwd とペイン名が戻り、claude が動いていたペインは同じ会話で再開する。連打すると閉じた順に遡れる(直近 20 件まで) |
Ctrl+w の取り消し(Shift=逆操作) |
Ctrl+Tab |
次のタブへ移動(統一巡回: tmux ウィンドウを順に巡り、最後のウィンドウまで来たら隣の WezTerm タブ=PowerShell 等へ抜けて一周する。ローカルペイン上では WezTerm タブ切替なので devbox タブへも戻れる。WezTerm タブが 1 枚だけのときは従来どおり tmux 内でループ) | ブラウザ由来 |
Ctrl+Shift+Tab |
前のタブへ移動(同上の逆回り。先頭ウィンドウから前の WezTerm タブへ抜ける) | 上記の逆 |
Ctrl+1〜Ctrl+9
|
タブ番号で切り替え(ローカルペインでは WezTerm タブの番号ジャンプ) | 番号=タブ位置 |
<leader> →Tab / <leader> →Shift+Tab
|
WezTerm タブ(devbox ⇔ PowerShell 等)の次/前へ移動。tmux 内からでも必ず WezTerm タブが切り替わるので、tmux ⇔ ローカル PowerShell の行き来はこれ。Ctrl を押しっぱなしにした Ctrl+q → Ctrl+Tab でも効く |
タブ切り替えの WezTerm 版 |
Alt+1〜Alt+9
|
タブ番号で切り替え(プレフィックス不要。Termius 等 WezTerm 以外の端末でも効く) | 番号=タブ位置 |
Shift+← / Shift+→
|
前/次のタブへ移動(プレフィックス不要。どの端末でも効く。代償としてペイン内アプリに Shift+矢印は届かない) | 矢印=方向 |
Alt+, |
タブを左に移動(PowerShell タブ上では WezTerm タブ自体が動く。pwsh を devbox の窓列の前に置くなら pwsh 上で押す) |
, = <(左向き)と同キー |
Alt+. |
タブを右に移動 |
. = >(右向き)と同キー |
<leader> →t |
現在のタブ名を変更 | tab の名前 |
<leader> →w |
タブ一覧から選択 | window |
Pane(tmux ペイン)
複数ペインのウィンドウでは、各ペインの上辺ボーダーに 番号: 名前 の名前バーが常時表示される
(アクティブペインは青太字)。名前を付けていないペインは実行中のコマンド名(claude / nvim / zsh 等)が
自動で出るので、1 画面のどのペインで何が動いているか一望できる。1 ペインだけのウィンドウでは非表示。
| ショートカット | 動作 | 由来 |
|---|---|---|
<leader> →r |
ペインを左右に分割 | right(左右に分かれる) |
<leader> →d |
ペインを上下に分割 | down(上下に分かれる) |
<leader> →x |
現在のペインを閉じる(確認なしで即クローズ) | × 印(消す) |
Alt+h/j/k/l |
ペイン移動(vim の hjkl)。端で止まらず、横はタブ・縦はセッションを跨ぐ: 一番左で Alt+h → 前のタブの一番右のペイン / 一番右で Alt+l → 次のタブの一番左のペイン / 一番上で Alt+k → 前のセッションの一番下のペイン / 一番下で Alt+j → 次のセッションの一番上のペイン。タブもセッションも端で巻き戻るので、押し続ければ全部を一周できる。横軸=タブ、縦軸=セッションと覚える。右列が上下分割されたタブに左から入ると下側のペインに着く(tmux が指定できる角が {bottom-right} のため) |
vim の hjkl |
Alt+u / Alt+i
|
履歴を半ページ下 / 上にスクロール(prefix も [ も不要)。copy-mode に入った後もそのまま連打できる。下へ戻して最下行に着くと自動で抜ける(見るだけ用。選択・コピーするなら <leader> →[ から入る) |
j/k と同じ空間配置(左のキー=下、右のキー=上) |
Ctrl+←/→/↑/↓ |
同じ挙動(Termius 等 Alt が届かないクライアント用)。WezTerm では Alt+矢印 は tmux まで届かないので、WezTerm からは Alt+h/j/k/l を使う |
矢印キー = 方向 |
Alt+p |
現在のペインに名前を付ける(分割した窓では各ペインの上辺ボーダーに出る。ペインが 1 つの窓ではその名前がそのままタブ名=ヘッダーに出る。空 Enter で解除して自動表示に戻る。<leader> →p / Ctrl+b → Shift+T でも可。名前は 15 分ごとに保存され、VM 再起動後も tmux-resurrect の復元と一緒に戻る) |
pane name |
Alt+y |
このペインの識別子をクリップボードへコピー(AI に「このペインだよ」と渡す用)。中身は %22 (01-InProgress:5.1 scraper / claude) のように、先頭が tmux サーバー全体で一意なペイン ID(%22)、括弧内が人が読む位置情報。ペイン番号(1.1)はウィンドウ内でしか一意でなく、セッション:ウィンドウ.ペイン 形式は <leader> →m で動かすとずれるが、ペイン ID はペインが生きている間変わらず、AI 側はそのまま tmux send-keys -t %22 等の -t に渡せる。VM 再起動(resurrect 復元)で振り直されるので再起動をまたぐ指示には使わない |
yank |
Alt+r / Alt+Shift+r
|
ペインを次/前に回転して入れ替え | rotate |
<leader> →z |
現在のペインをズーム(トグル) | zoom |
Ctrl+b → q |
ペイン番号をオーバーレイ表示して選択(<leader> →q は音声入力トグルに変更) |
tmux の prefix+q と同じ |
Ctrl+b → H/J/K/L |
ペインサイズを調整(連打可。マウスの境界ドラッグでも可) | vim hjkl の大文字 |
Ctrl+b → Shift+E |
ペインサイズを均等に整える(分割構成はそのまま、幅/高さだけ揃える。3分割の幅を揃えたいときはこれ) | Even(均等) |
Ctrl+b → Alt+1〜Alt+5
|
プリセットレイアウトに一発切替(1=左右に均等 / 2=上下に均等 / 3=メイン上+残り横並び / 4=メイン左+残り縦並び / 5=タイル状) | tmux 標準レイアウト |
<leader> →j |
最後に通知が来た Claude Code のペインへジャンプ | jump |
<leader> →f |
ファイラー(yazi)をどのペインにも属さない浮遊ポップアップで開く(アクティブペインの cwd 起点。Enter でファイルをポップアップ内 nvim で開き、q で閉じる) |
filer |
接続・起動
| ショートカット | 動作 | 由来 |
|---|---|---|
<leader> →a |
devbox の tmux main セッションを新規タブで開く(VM 停止中でも自動起動してから attach。休止/切断後の復帰はこれ) | azure |
<leader> →l |
ランチャーを表示。入り先は Azure devbox (tmux) / Windows Server rpa (SSH) / PowerShell の 3 つ。devbox と rpa はそれぞれ専用 workspace の tmux セッションに入る。PowerShell は <leader> →Shift+P と同じくローカル mux 配下で開く。以前あった tmux セッションの個別列挙は workspace 切り替えで足りるためやめ、切り分け専用の「mux フォールバック」「素の SSH」も外した(mux は <leader> →Shift+A) |
launch |
<leader> →Shift+P |
PowerShell を開く。devbox の tmux 上では Windows PC (aura) の pwsh を tmux の窓 pwsh として開く(devbox から Tailscale 経由で Windows の OpenSSH Server に ssh。他の窓と同じく Ctrl+Tab / Alt+, が効き、WezTerm を閉じても tmux が持ち、resurrect で窓ごと戻る。pwsh は新規起動なので中の Claude Code は claude --resume で拾う。ssh が切れても窓は残り Enter で再接続)。tmux 外(devbox 停止中の切り分け)ではローカル mux (wezterm-mux-server) 配下の pwsh タブを開く(WezTerm を閉じても残り、次に Shift+P したとき一緒に戻る。mux サーバーはこのとき初めて起動する) |
PowerShell |
<leader> →Shift+A |
旧 wezterm mux ドメインに attach(切り分け用フォールバック。通常は使わない) | Attach |
<leader> →Shift+D |
旧 wezterm mux ドメインから detach(切り分け用フォールバック) | Detach |
iPad / iPhone からの接続(Tailscale + Termius)
前提: Tailscale アプリ(VPN トグル ON、devbox と同じアカウント)と Termius(無料版で十分)。
SSH 鍵は端末ごとに Termius の Keychain で生成(ED25519)し、公開鍵を devbox の ~/.ssh/authorized_keys に登録する(端末ごとに別鍵にすると紛失時にその端末だけ無効化できる)。
| 項目 | 値 |
|---|---|
| Address |
100.126.96.27(devbox の Tailscale IP。不変) |
| Username |
azureuser(タイプミス注意) |
| Key | その端末で生成した鍵 |
接続したら tm で main セッションに入る。tm はグループセッション(ウィンドウ共有・ビュー独立)で attach するため:
- 画面下部に tmux のステータスライン(タブ一覧)が表示される(PC は WezTerm タブバーがあるので非表示のまま)
- PC と別のタブを独立して表示できる(タブの中身・増減は全端末で共有)
- 切断するとビュー用セッションは自動削除される(タブは devbox に残る)
モバイルでの操作は「プレフィックスなしキー」「タッチ」「prefix 直打ち」の3通り。
プレフィックスなしキー(ハードウェアキーボード向け)
PC の Ctrl+Tab / Ctrl+数字 は WezTerm がキーを prefix シーケンスに変換して送る仕組みのため、
Termius からはそもそも送信できない。代わりに標準シーケンスで届くキーを tmux 側に用意している:
| 操作 | キー | 備考 |
|---|---|---|
| 前/次のタブ |
Shift+← / Shift+→
|
どのアプリでも届く。代償としてペイン内アプリに Shift+矢印は届かない |
| ペイン間移動 | Ctrl+矢印 |
どのアプリでも届く。代償としてペイン内アプリの Ctrl+矢印(単語ジャンプ等)は使えない |
| タブ番号で移動 |
Alt+1〜Alt+9
|
Termius は設定で Option を Esc(Meta)扱いにすると使える |
| ペイン間移動(vim 風) |
Alt+h/j/k/l(端まで来たら横はタブ、縦はセッションへ抜ける) |
同上 |
タッチ操作(mouse on で tmux が反応する)
現在は無効 (2026-08-22): Claude Code のプロンプト枠クリックで罫線
─が
クリップボードに入る誤爆が多いため.tmux.confをmouse offにした。
タッチ操作を使いたくなったらmouse onに戻す(トレードオフはこの誤爆の再発)。
| 操作 | 動作 |
|---|---|
| ペインをタップ | そのペインへフォーカス移動 |
| ステータスラインのタブ名をタップ | そのタブへ切り替え |
| ペイン境界をドラッグ | ペインサイズ調整 |
| 2本指スクロール | copy-mode に入って履歴をさかのぼる |
prefix 直打ち(Ctrl+q または Ctrl+b のあとに。Termius のキーボードバーの ctrl を使う)
ソフトウェアキーボードだけの iPhone でも打てる、どの端末でも確実に効く経路:
| 操作 | キー(Ctrl+q のあとに) |
|---|---|
| 新しいタブ | c |
| 次/前のタブ |
n / p
|
| タブ番号で移動 |
1〜9
|
| タブ名変更 | , |
| タブを閉じる |
&(確認なしで即クローズ) |
| 閉じたタブを開き直す |
W(Shift+w。連打で閉じた順に遡る) |
| ペイン分割(左右 / 上下) |
| / -
|
| ペイン間移動 | 矢印キー |
| ペイン番号を表示して選択 |
q → 番号 |
| ペインサイズ調整 |
H/J/K/L(連打可) |
| ペインサイズを均等に整える |
E(Shift+e) |
| ズーム(1ペイン全画面をトグル) | z |
| ペインに名前を付ける |
T(Shift+t。空 Enter で解除) |
| ペインを閉じる |
x(確認なし) |
| セッション/ウィンドウ一覧から選択 | s |
| 新しいセッションを作る(名前を聞かれる) |
N(Shift+n) |
| このペインを別のウィンドウ/セッションへ移動 |
m(小文字)→ 一覧から選択 |
| このウィンドウを丸ごと別のセッションへ移動して追従 |
M(Shift+m)→ 一覧からセッションを選択(タブ名・ペイン名は維持) |
| このペインを独立したウィンドウに切り出す | ! |
| コピーモード | [ |
履歴を半ページ上/下にスクロール([ 不要) |
Ctrl+u / Ctrl+d(Ctrl を押しっぱなしで OK。prefix なしなら Alt+i / Alt+u) |
| 切断(セッションは残る) | d |
iPhone のショートカットで起動から接続まで(1 タップ)
devbox は毎日 22:00 に自動停止する。停止中に iPhone/iPad から入るには VM を起こす必要があるが、
Termius は接続先ホスト上のコマンドしか実行できないので、VM の起動は iOS の「ショートカット」アプリに
任せる。WezTerm 起動時の devbox.ps1 ensure(VM 起動担保 → Tailscale 経由で SSH)と同じ流れを
ショートカット 1 本で再現する:
Tailscale 接続 → GitHub Actions で VM 起動 → 起動完了を待つ → Termius で接続
VM の起動は private リポジトリ AutoFor/devbox-ops の start-devbox.yml(workflow_dispatch)が行う。
既に起動中なら即終了し、停止中なら az vm start して OS が立ち上がる(VM Agent が Ready になる)まで
待ってから終了するので、ショートカット側は「この run が completed になるまで待つ」だけでよい。
事前準備(1 回だけ)
-
GitHub PAT の発行: GitHub → Settings → Developer settings → Personal access tokens →
Fine-grained tokens → Generate new token- Resource owner:
AutoFor/ Repository access: Only select repositories →devbox-ops - Permissions: Repository permissions → Actions: Read and write(Metadata: Read は自動で付く)
- 有効期限は最長(1 年)にし、切れたら作り直してショートカットの 2 か所を差し替える
- Resource owner:
-
Termius のホストに alias を付ける: devbox のホスト設定で Alias を
devboxにする。
alias が空だと Termius の「ホストに接続」アクションがショートカットに出てこない - Tailscale アプリと Termius アプリは導入・ログイン済みであること(上の表のとおり)
ショートカットの中身(アクションを上から順に追加)
| # | アクション | 設定 |
|---|---|---|
| 1 | Tailscale「接続」(Connect) | VPN トグルを ON にする。VM の起動待ちの間に張り終わる |
| 2 | 「URLの内容を取得」 | URL: https://api.github.com/repos/AutoFor/devbox-ops/actions/workflows/start-devbox.yml/dispatches方法: POST / 本文: JSON → ref = mainヘッダ: Authorization = Bearer <PAT>、Accept = application/vnd.github+json
|
| 3 | 「待機」 | 10 秒(dispatch 直後は run がまだ一覧に出ないため) |
| 4 | 「変数を設定」 |
done = 0
|
| 5 | 「繰り返し」 20 回 | 以下 6〜10 をこの中に入れる |
| 6 | 「もし」 |
done が 0 と等しい |
| 7 | 「URLの内容を取得」 | URL: https://api.github.com/repos/AutoFor/devbox-ops/actions/workflows/start-devbox.yml/runs?per_page=1方法: GET / ヘッダは 2 と同じ |
| 8 | 「辞書の値を取得」→「リストから項目を取得」→「辞書の値を取得」 |
workflow_runs のキー → 最初の項目 → status のキー |
| 9 | 「もし」 | 8 の結果が completed と等しい → 「変数を設定」done = 1そうでなければ → 「待機」10 秒 |
| 10 | 「もし」の終了 ×2 / 繰り返しの終了 | |
| 11 | Termius「ホストに接続」(Connect to Host) | ホスト: devbox
|
- 起動済みなら約 20 秒、停止中なら 1〜2 分で Termius が開く。接続したら
tmで main セッションに入る - 8 の
statusがcompletedでもconclusionがfailureのことがある(Azure 側の失敗)。
その場合は Termius の接続が失敗するので、https://github.com/AutoFor/devbox-ops/actions のログを見る - PAT は端末内(iCloud 同期あり)に平文で入る。権限を
devbox-opsの Actions だけに絞っているのはそのため - 手動で起こしたいだけなら Azure 公式モバイルアプリで VM を Start しても同じ(ショートカット不要)
設計メモ: devbox-ops のサービスプリンシパル
sp-devbox-disk-resizeは rg-devbox 限定 Contributor
(OS ディスク拡張 2026-08-22 の流用)。VM の start だけに絞るならカスタムロールに差し替える。
コピーモード(tmux copy-mode / vi ライク)
<leader> →[ は tmux の copy-mode にブリッジされる(ローカルペインでは WezTerm copy mode)。
(mouse off のため、以前のようにホイールスクロールで自動的に copy-mode には入らない。
履歴をさかのぼるときはこの copy-mode を使う)。キーは vi 準拠:
| ショートカット | 動作 | 由来 |
|---|---|---|
<leader> →[ |
コピーモードを起動 | vim の [ ブラケット慣習 |
<leader> →Ctrl+u / <leader> →Ctrl+d
|
[ を挟まずにコピーモードに入って半ページ上/下へスクロール。以降は Ctrl+u / Ctrl+d を連打。下へ戻して最下行に着くと自動で抜ける(見るだけ用。選択・コピーするなら [ から入る) |
vim の up / down |
Alt+i / Alt+u
|
上と同じだが prefix も不要の 1 打鍵版。copy-mode の中でもそのまま効く | j/k と同じ空間配置 |
h/j/k/l w/b/e 0/^/$ gg/G
|
vi と同じカーソル移動 | vim 由来 |
Ctrl+f / Ctrl+b、Ctrl+d / Ctrl+u
|
1ページ/半ページ スクロール | forward / back / down / up |
/キーワード ?キーワード → n/N
|
前方/後方検索 → 次/前のマッチ | vim 由来 |
v |
文字単位の選択開始 | visual |
V |
行単位の選択開始 | Visual line |
y |
選択範囲をコピーして終了(OSC 52 で Windows のクリップボードに載る) | yank |
q / Escape |
コピーモードを終了 | quit / 脱出 |
マウスでのコピー(tmux 構成での正解)
mouse off (2026-08-22〜) のため、マウス操作は tmux を素通りして WezTerm ネイティブ選択になる:
| 操作 | 動作 |
|---|---|
| ドラッグ / ダブルクリック / トリプルクリック | WezTerm ネイティブの範囲/単語/行選択。コピーは Ctrl+Shift+C(tmux 時代の「離した瞬間に自動コピー」は無効)。選択はペイン border やステータスラインをまたぐので、複数ペイン表示中は罫線が混入することに注意(prefix z でズームしてから選ぶと安全) |
<leader> →u |
QuickSelect: 画面上の URL / パス / ハッシュ等にラベルが振られ、ラベルを打つとそれをコピー。行の途中にある URL をマウス無しで拾える(url) |
<leader> →y |
画面に見えているペイン全体をまるごとコピー(選択操作なし。表示中のコード/ログを全部持っていく最終手段。yank) |
Ctrl+クリック |
カーソル下の URL を Windows 側の既定ブラウザで開く。折り返した URL は先頭行しか検出できないので、その場合は <leader> →o を使う |
正確な範囲(1ペイン内・折り返し URL 対応・自動でクリップボード行き)が欲しいときは
マウスではなく copy-mode(prefix [ → v → y)か <leader> →u を使うのが確実。
| <leader> →o | 画面上の URL を fzf ポップアップで選んでブラウザで開く(open)。行末で切れた URL は次行を推測で継ぎ足すので、tmux の折り返しも Claude Code 等の TUI がハード改行した URL も完全な形で開ける(断片と結合後の両方が候補に出るので、誤結合していたら選び分ける)。表示テキストと URL が別になっている埋め込みリンク(OSC 8。Claude Code の青いリンク等)も候補に出る。1 件だけなら選択なしで即開く(tmux-open-url → SetUserVar open_url → WezTerm が既定ブラウザ起動) |
nvim などマウスを自前で使うアプリのペインでは、クリック/ドラッグはアプリ側に渡る(nvim 内のコピーは nvim の y)。
その他(WezTerm 本体に残る機能)
| ショートカット | 動作 | 由来 |
|---|---|---|
Ctrl+Shift+c |
クリップボードにコピー | OS 標準の copy |
Ctrl+Shift+v |
クリップボードから貼り付け | OS 標準の v = paste |
Ctrl+; / Ctrl+- / Ctrl+0
|
フォントサイズを拡大 / 縮小 / リセット(拡大は Ctrl++ でも可。JIS では + に Shift が要るので Shift 不要の Ctrl+; を主とする)。変更したサイズは ~/.wezterm-font-size に保存され、WezTerm を閉じても次回起動に引き継がれる |
; は + と同じキー |
Ctrl+p / Ctrl+Shift+p
|
コマンドパレットを開く | palette(VS Code 由来) |
Ctrl+Shift+r |
設定を再読み込み | reload |
Ctrl+Shift+l |
デバッグオーバーレイ(問題調査用) | log |
Alt+Enter |
通常 ⇔ 最大化(タスクバーを残す)を切り替え | Enter = 確定・最大化 |
音声入力(Groq Whisper・疑似ストリーム)
Ctrl+Space または <leader> →q(Ctrl を押しっぱなしにした Ctrl+q → q の連打が確実。IME オン時は素の q が IME に吸われて効かないことがある)で録音を開始すると、話の切れ目(約 0.7 秒の無音)ごとにフレーズ単位で文字起こしされ、フォーカス中のペイン(tmux 内の Claude Code プロンプト等)へ逐次入力される。終了はもう一度同じキーを押すか、Enter(送信と同時に自動停止)。
| ショートカット | 動作 | 由来 |
|---|---|---|
Ctrl+Space / <leader> →q (1 回目) |
録音開始。右ステータスにマイクアイコンが出て、色が実際の音声に連動する(灰色=マイク起動待ち、青=録音中だが無音、赤=声を拾っている。青になってから話すと頭が切れない。話して赤くならないならマイク・しきい値を疑う)。以降、話すたびにフレーズ単位で文字が流れ込む | Space = 話す間 |
Ctrl+Space / <leader> →q (2 回目) |
終了(言いかけのフレーズも変換してから止まる) | 同上 |
Enter(録音中) |
通常どおり Enter がペインへ送られ、同時に録音も終了する(「話し終わってそのまま送信」で停止し忘れを防ぐ)。停止時点で変換中のフレーズは、変換が済み次第入力される(送信後になることもある) | 話し終わり = 送信 |
MS-IME のキー設定で Ctrl+Space を「IME オン/オフ」に割り当てていると WezTerm に届かず IME 切替になってしまうので、その場合は IME 側の割り当てを外すか <leader> →q を使う。
仕組み: windows/bin/voice-input.ps1 が winmm (waveIn) でマイクを録りっぱなしにし、音量 (RMS) ベースの無音検出でフレーズを切り出して Groq (whisper-large-v3-turbo) に POST → wezterm cli send-text でペインに流し込む(追加ソフト不要)。Groq の Whisper API はストリーミング非対応のため、フレーズ単位の逐次変換で体感を近づけている(真のリアルタイムが欲しいときは Windows 標準の Win+H を使う。精度より速度の Win+H、速度より精度の Ctrl+Space という使い分け)。直前までの文字起こしを文脈ヒント (prompt) として渡すので、フレーズをまたぐ用語も繋がりやすい。
-
辞書は
windows/voice-dictionary.txt(書式はファイル内コメント参照)。「単語のみ」の行は Whisper への用語ヒント(認識がその表記に寄る)、「誤=正」の行は文字起こし結果の確実な置換。Groq クラウド側に辞書機能は無いのでこの二段構えで代替している。リポジトリ管理なので devbox から編集して push → pull でも反映できる(スクリプトが毎回読み直す) -
辞書への自動提案: 音声入力を終了するたび、そのセッションの文字起こしを Groq の LLM(
llama-3.3-70b-versatile)が見て、誤変換らしき用語を「# 誤=正」のコメント状態で辞書末尾に追記・自動コミットする(トーストで件数を通知)。採用するなら行頭の#を外す、不要なら行ごと削除。コメントのままなら置換には使われないので誤提案が入力を壊すことはない。無効化はvoice-input.ps1の-SuggestModel '' - 文字起こし全文は devbox の
~/.cache/voice-transcripts.logにもミラーされるので、devbox の Claude Code に「誤変換の傾向を見て辞書を整理して」と頼む運用もできる - 話し続けている間は区切りが入らないが、15 秒で強制的に区切って変換する
- 停止し忘れは 300 秒で自動終了。発話 0.25 秒未満のチャンク(ノイズ・誤爆)は破棄
-
幻聴フィルタ: 雑音・ほぼ無音のチャンクで Whisper が出す幻聴(「ご視聴ありがとうございました」等の定型句、直前フレーズの繰り返し、同語反復ループ)は
no_speech_prob/compression_ratio/ 定型パターンで自動破棄される(破棄理由はログに残る)。録音プロセスは PID ファイルで単一インスタンス化され、生き残りのゾンビ録音は次回起動時に kill される - ペインへの入力に失敗したときは、そこまでの全文をクリップボードに退避してトーストで知らせる(
Ctrl+Shift+Vで貼り付け) - 言語は既定で日本語ヒント付き(
voice-input.ps1の-Languageを空にすると自動判定) -
無音しきい値は自動決定(
-SilenceThresholdの既定0= 自動)。マイクの入力ボリュームは環境ごとにまちまちで、固定値だと音量の小さいマイクで発話が「声あり」と判定されず丸ごと取りこぼす。録音開始直後 600ms の環境音からノイズフロアを実測し、その 2 倍を採用する(120〜300 にクランプ。計測中は下限の 120 で判定するので押した直後に話しても頭が切れない)。採用値は%TEMP%\wezterm-voice.logにノイズフロア=… → 無音しきい値=…として残る。固定したいときは-SilenceThreshold 300のように正の値を渡す - 送信前に音量を正規化する。小さいまま投げると Whisper 側の認識精度も落ちるので、Groq へ送る直前にピークがフルスケールの約 67% になるよう増幅する(上限 8 倍、既に十分な音量のチャンクは歪ませないよう無加工)。掛かった倍率はログに残る
-
キーを押した直後の発話が切れるのは録音プロセスの起動時間(pwsh 起動 + C# コンパイル)のせい。コンパイル結果は
%TEMP%に DLL キャッシュされるので、初回だけ 2〜3 秒、以降は 1 秒弱で録音が始まる。確実に拾いたいときはアイコンが青(録音中)になってから話し始める - おまけ:
voice-input.ps1に-Overlayを付けると、画面中央に実測マイクレベルで動く波形付きフローティング表示(voice-overlay.ps1、フォーカスは奪わない)が出る。既定はオフ(アイコンのみ運用) - 一時的な文字起こし失敗(レート制限・ネットワーク断)はそのフレーズだけ捨てて録音を継続する(トーストで知らせる。連続 3 回失敗で終了)。録音プロセスが落ちた場合も約 10 秒でアイコンが消えて状態が自動リセットされ、次の
Ctrl+Spaceが普通に効く - エラー時のログは
%TEMP%\wezterm-voice.log(チャンクごとの文字起こし結果も残る)
初回セットアップ(Windows 側):
- Groq の API キー(正本は Azure Key Vault
autofor-kv/groq-api-key)を環境変数に設定して WezTerm を再起動(環境変数は GUI 起動時に固定されるため):setx GROQ_API_KEY (az keyvault secret show --vault-name autofor-kv --name groq-api-key --query value -o tsv) - Windows 設定 > プライバシーとセキュリティ > マイク で「デスクトップ アプリがマイクにアクセスできるようにする」を ON
Claude Code 通知連携
Claude Code の Stop / Notification hook は ~/.claude/notify.sh を呼び、OSC 1337 SetUserVar(claude_notify)を発行して手元の WezTerm に届ける。タイトルに [ディレクトリ名/ウィンドウ番号 ウィンドウ名](例: [dotfiles/3 editor]、tmux 外なら [dotfiles])が付くので、複数タブ・複数ウィンドウで Claude Code を並行実行していてもどのセッションの通知か区別できる。
WezTerm 側では以下が動く:
- 通知元ペインのタブタイトルに
🔔 ディレクトリ名のマークが付く(そのペインにフォーカスすると元のタイトルに復元) -
クリック可能な Windows トーストが出る。クリックすると WezTerm がフォーカスされ、通知元の tmux ウィンドウ/ペインまで自動で切り替わる(BurntToast +
wezterm-jump:カスタム URI。初回のみwindows/bin/register-wezterm-jump.ps1で URI スキームを HKCU に登録する。管理者権限不要) -
<leader> →jでも「最後に通知が来たペイン」へジャンプできる(トーストを消してしまった後の代替。tmux 側の切り替えまで行う) - 見ているペインからの通知はマークもトーストも出さない
ジャンプの tmux 側切り替えは devbox の ~/.local/bin/tmux-jump-pane が行う。tm のグループセッションで
複数クライアントが繋がっている場合は「同一セッション > 同一グループ > その他」の優先順で、最後に
アクティブだったクライアントの表示を切り替える。
WezTerm の外へのプッシュ通知(ntfy)
devbox の ~/.config/ntfy-topic(git 管理外)にトピック名を置くと、notify.sh は
手元の WezTerm でトーストが出せないときだけ ntfy.sh にプッシュを送る。
WezTerm で見ている最中は上記の OSC トーストだけになり、二重通知しない。
「WezTerm でトーストが出せない」の判定は 2 通り:
| 通知元 | 判定 |
|---|---|
| tmux 内 | 自セッション(グループセッションなら同一グループ)に クライアントが attach していない = 席を外している |
| tmux 外 | OSC の書き込み先 tty が無い = Claude Code アプリからの SSH セッション等、そもそも WezTerm を経由していない |
後者が無いと、Claude Code アプリから devbox に入ったセッションは OSC の宛先が無いまま
exit 0 して通知が消えるので、どこにも通知が来ない(tmux 判定だけだった頃の穴)。
前者は tmux の allow-passthrough が all であることが前提。on だと通知元ペインが
表示中のときしか OSC を通さないので、背景ウィンドウの Claude Code は「attach 済み=手元に出せる」
と判定されて ntfy にも落ちず、通知が消える(linux/.tmux.conf で all に設定済み)。
- 本文に
(セッション名:ウィンドウ番号 ウィンドウ名 %ペインID)が入るので、どのセッションが
返事待ちかが外出先でも分かる(iPad の Termius で入って該当ウィンドウへ移動する) -
Windows:
windows/bin/ntfy-listen.ps1が購読して BurntToast でトーストにする。
windows/bin/register-ntfy-listen.ps1でログオン時常駐に登録(管理者不要)。
トピック名は%USERPROFILE%\.config\ntfy-topicに devbox と同じ値を置く - iPhone / Apple Watch: ntfy アプリで同じトピックを購読すれば Apple Watch にも自動でミラーされる
- トピック名は実質パスワードなので推測されにくいランダム文字列にする(例:
claude-devbox-<乱数>) - ファイルが無ければ何もしない。セルフホストは環境変数
NTFY_SERVERで切り替え - ntfy 経由の通知はクリックしてもペインへジャンプしない(そもそも WezTerm に
その画面が出ていないときに飛ぶ通知なので、ジャンプ先が無い)
なお tmux を挟む場合(#214 以降の標準構成)は、.tmux.conf の set -g allow-passthrough all に加えて、
送信側が OSC を ESC Ptmux; ... ESC \ の passthrough 形式でラップする必要がある(notify.sh / zshrc の
__term_emit / nvim の agent_terminal.lua が対応済み)。素の OSC 7 や OSC 1337 は tmux に飲まれて届かない。
右上ステータスに接続状態を表示
タブバー右端のステータスに 接続状態・アクティブなキーテーブル・日時 を常時表示している。
接続状態はラベルと色で見分けられる(#214 で tmux 移行後):
| 表示 | 色 | 意味 |
|---|---|---|
devbox |
緑 | ssh + tmux の通常運用(セッションはリモート tmux が保持。切断しても生き残る) |
MUX:devbox |
オレンジ | 旧 wezterm mux ドメイン(切り分け用フォールバック) |
SSH:ホスト名 |
赤 | devbox からさらに別ホストへ素の ssh をした状態(切断するとセッションも消える) |
local |
緑 | ローカル(Windows) |
仕組み: 通常運用は SSH ドメイン名(devbox-tmux)で判定。加えてシェルが OSC 7 で報告するホスト名(pane:get_current_working_dir().host)を併用し、devbox から先へのネスト SSH を検出している(リモート側のシェルが OSC 7 を発行していることが前提。dotfiles の zsh 設定なら tmux 越しでも発行される)。
SSH(Tailscale 経由)
外出先から Tailscale 経由でリモートマシンに接続するとき、通常の ssh コマンドの代わりに wezterm ssh を使うと、WezTerm のペイン分割などのローカル機能がそのまま使える。
# 通常の SSH(WezTerm の機能は使えない)
ssh user@tailscale-hostname
# WezTerm SSH(リモート側に WEZTERM_PANE が自動でセットされる)
wezterm ssh user@tailscale-hostname
Tailscale の IP(100.x.x.x)や MagicDNS 名がそのまま使える。
なぜ動くか: wezterm ssh は SSH 接続時に WezTerm のマルチプレクサをセットアップし、リモート側に WEZTERM_PANE と WEZTERM_UNIX_SOCKET を自動でセットする。これにより wezterm cli split-pane などのコマンドがリモートからでも動作する。
trzsz(SSH 経由のファイル転送)
ターミナルの中だけでローカル ⇔ リモートのファイル転送ができるツール。scp のようにローカル側で別コマンドを打つ必要がなく、リモート側で trz と打つとローカルにファイル選択ダイアログが開く。
| コマンド | 実行する場所 | 動作 | 由来 |
|---|---|---|---|
tssh user@host |
接続元 | trzsz でラップした SSH 接続(trzsz -d ssh のエイリアス) |
trzsz + ssh |
trz |
リモート | 接続元にファイル選択ダイアログが開き、選んだファイルをアップロード | trzsz receive → z(rz 互換) |
trz -d |
リモート | ディレクトリごとアップロード | directory |
tsz <file> |
リモート | ファイルを接続元にダウンロード | trzsz send → z(sz 互換) |
注意: trzsz は「
sshコマンドを打つ側」にインストールする(GUI ダイアログには zenity 等が必要)。
現構成(Windows → devbox)では、Windows ⇔ devbox のファイル転送はscp devbox:...で行うのが簡単
(ssh devboxエイリアスが scp にも効く)。trzsz は devbox からさらに先のホストに入るときの選択肢。
Zsh
ghq
| ショートカット / コマンド | 動作 | 由来 |
|---|---|---|
Ctrl+G |
管理リポジトリを fzf で絞り込んで即 cd
|
Git repo |
ghq create <name> |
新規リポジトリを作成(~/ghq/ 以下に配置) |
create |
ghq get <URL> |
リポジトリをクローン(~/ghq/ 以下に配置) |
get = 取得 |
ghq list |
管理リポジトリを一覧表示 | list |
ghq list -p |
フルパスで一覧表示 | path |
ghq root |
ghq のルートディレクトリを表示 | root directory |
ghq create <name> の既定 owner は ai-foo。
別の組織に作るときは owner/repo-name で指定する。
| コマンド | 動作 |
|---|---|
ghq create repo-name |
ai-foo/repo-name に作成 |
ghq create owner/repo-name |
指定した owner に作成 |
zoxide(スマートな cd)
| コマンド | 動作 | 由来 |
|---|---|---|
z <キーワード> |
履歴から部分一致して cd
|
zoxide の頭文字 |
zi |
fzf で履歴からディレクトリをインタラクティブ選択 | z + interactive |
zoxide query <キーワード> |
ジャンプせずに候補リストだけ確認 | query = 照会 |
よく行くディレクトリは z に任せると cd を打つより圧倒的に速い。
| コマンド | 動作 | 由来 |
|---|---|---|
cfd |
カレントディレクトリ直下のフォルダを fzf で選んで cd
|
cd + fzf + directory |
lrm |
1 つ上に移動してから、元いたディレクトリを確認付きで削除 | local remove |
注意:
lrmは現在のディレクトリ自体を消す。内部で 1 つ上に移動してから確認プロンプトを出すため、rm -rf .を直接打つより安全寄り。
Git Worktree
| コマンド | 動作 | 由来 |
|---|---|---|
Alt+W |
~/.git-worktrees/ 以下のイシューベース worktree(issue-* パターン)を fzf で選択して cd(プレビュー表示付き) |
Worktree |
gwb |
GitHub Issue 作成 + worktree 作成 + WezTerm 下分割で Claude 起動 | git worktree branch |
gwb r |
同上・右分割 | right |
gwb d |
同上・下分割(gwb と同じ) |
down |
gwb t |
同上・新規タブで worktree ディレクトリに cd | tab |
pplx(Perplexity API 連携)
| コマンド | 動作 |
|---|---|
pplx |
対話モード(pplx> プロンプトで複数ターンの会話、exit/quit/Ctrl+D で終了、/reset で履歴クリア) |
pplx "質問文" |
単発モード。1回answerして終了 |
pplx -m sonar-pro "質問文" |
モデルを指定(既定は sonar、PPLX_MODEL 環境変数でも上書き可) |
Web 検索で根拠付けされた回答を返す Perplexity Sonar API(/v1/sonar)を呼び出す。
APIキーはローカルに保存せず、起動のたびに Azure Key Vault(既定: autofor-kv / シークレット名: perplexity-api-key)から取得する。これにより毎回の起動時に Azure へのログイン状態・Key Vault への権限が正しいかを確認できる(az login が必要な場合はエラーで案内される)。テスト用に PERPLEXITY_API_KEY 環境変数を設定すると、その値が優先され Key Vault 取得はスキップされる。
実体は linux/.local/bin/pplx(devbox 上で実行)。
Git
初期化
| コマンド | 動作 | 由来 |
|---|---|---|
mkdir <repo-name> && cd <repo-name> |
作業用ディレクトリを作って入る | 新規作成の定番 |
git init |
その場を Git リポジトリとして初期化 | init = 初期化 |
git branch -M main |
最初のブランチ名を main にそろえる |
Move / rename |
git status |
Git 管理状態を確認 | status = 状態確認 |
git add . |
現在のファイルをまとめてステージング | add = 追加 |
git commit -m \"first commit\" |
最初のコミットを作る | commit = 記録 |
git remote add origin <URL> |
GitHub などのリモートを登録 | origin = 既定リモート名 |
git push -u origin main |
初回 push と upstream 設定をまとめて実行 |
-u = 追跡設定 |
ブランチ操作
branch / checkout / switch は役割が似て見えるが、担当が違う。
今は「作る・一覧を見る」は branch、「切り替える」は switch を基本にすると整理しやすい。
checkout は昔の万能コマンドで、ブランチ切替とファイル復元の両方を担っていたため混乱しやすい。
| コマンド | 動作 | ひとことでいうと |
|---|---|---|
git branch |
ブランチを一覧・作成・削除する | ブランチ管理 |
git checkout |
ブランチ移動 / 作成 / ファイル復元までできる | 昔の万能コマンド |
git switch |
ブランチ切替専用 | 切替担当 |
一覧・作成・削除 - branch
| コマンド | 動作 | 由来 |
|---|---|---|
git branch |
ブランチ一覧を表示 | branch = 枝 |
git branch feature/test |
新しいブランチを作成する。今いるブランチはそのまま | 作るだけで移動しない |
git branch -d feature/test |
ブランチを削除する |
-d = delete |
旧コマンド - checkout
| コマンド | 動作 | 由来 |
|---|---|---|
git checkout -b feature/test |
ブランチを作ってそのまま切り替える |
-b = branch |
切替 - switch
| コマンド | 動作 | 由来 |
|---|---|---|
git switch main |
ブランチを切り替える | switch = 切り替え |
git switch -c feature/test |
ブランチを作って切り替える |
-c = create |
今のおすすめは、作成・一覧は
git branch、移動はgit switch。
git checkoutは古い記事や README にまだよく出るので、「読むための知識」として押さえておくと混乱しにくい。
リモート
origin = リモートリポジトリ(GitHub 等)につけた短い別名。git remote -v で確認できる。
初回接続
| コマンド | 動作 | ひとことでいうと |
|---|---|---|
gh repo create AutoFor/TicketRadar --private --source=. --remote=origin |
GitHub の repo を作って、ローカルの origin も設定する |
GitHub につなげる初回コマンド |
gh repo create ... --source=. --remote=origin で GitHub 側の repo 作成とローカルの接続をまとめて行う。
接続確認
| コマンド | 動作 | ひとことでいうと |
|---|---|---|
git remote -v |
origin などのリモート URL を表示する |
-v = verbose(詳しく表示) |
git fetch origin |
GitHub のリモートへ実際にアクセスできるか確認する | 通信確認 |
git remote -v で GitHub の URL が出ていれば、リモート設定はできている。git fetch origin が通れば、実際に GitHub と接続できていると見てよい。
毎回の push
| コマンド | 動作 | ひとことでいうと |
|---|---|---|
git push |
ローカルの変更をリモートへ送る | 普段の送信 |
git push -u origin main |
初回 push と upstream 設定をまとめて実行する | 最初の送信と追跡設定 |
git push は毎回の送信に使う。初回だけ git push -u origin main にすると、upstream も同時に設定できる。
同期 / 強制上書き
pull = 足す(ローカルを残しながら統合)、reset --hard = 捨てて合わせる(ローカル作業が消える)。
| コマンド | 動作 | ローカル変更 |
|---|---|---|
git pull |
fetch + merge(または rebase)でリモートを統合 | 残る(コンフリクトあり得る) |
git reset --hard origin/main |
現在ブランチを origin/main と同じ状態に強制上書き |
消える(未コミット・add 済み・ローカルコミットすべて) |
よくある使い分け:
| 状況 | コマンド |
|---|---|
| 普段の更新 | git pull --rebase |
| ローカルがぐちゃぐちゃで GitHub 状態に戻したい | git fetch origin && git reset --hard origin/main |
Linux コマンド集
パス記号
| 記号 | 意味 | 例 |
|---|---|---|
. |
カレントディレクトリ(自分がいる場所) | ./script.sh |
.. |
1つ上の階層 | cd .. |
../.. |
2つ上の階層 | cd ../.. |
~ |
ホームディレクトリ(/home/ユーザー名) |
cd ~ |
/ |
ルートディレクトリ(最上位) | cd / |
- |
直前にいたディレクトリ | cd - |
ホームディレクトリ vs ルートディレクトリ
ルート /
|
ホーム ~
|
|
|---|---|---|
| 場所 | ファイルシステムの最上位 |
/home/ユーザー名/ の中 |
| 誰のもの | システム全体 | 自分専用 |
| Windows で言うと | C:\ |
C:\Users\ユーザー名\ |
| 普段使う? | ほぼ触らない | ここで作業する |
ディレクトリ移動
| 操作 | コマンド |
|---|---|
| ホームへ移動 |
cd ~ または cd
|
| ルートへ移動 | cd / |
ファイル操作
| コマンド | 動作 |
|---|---|
cp src dst |
ファイルをコピー |
cp -r src dst |
ディレクトリを再帰的にコピー |
mv src dst |
ファイル/ディレクトリを移動またはリネーム |
rm file |
ファイルを削除 |
rm -r dir |
ディレクトリを再帰的に削除 |
mkdir dir |
ディレクトリを作成 |
mkdir -p a/b/c |
中間ディレクトリも含めて作成 |
touch file |
空ファイルを作成(または更新日時を更新) |
ls |
ファイル一覧を表示 |
ls -la |
隠しファイル含む詳細一覧を表示 |
pwd |
現在のディレクトリのパスを表示(pwd は Print Working Directory の略。Print = 表示する、Working Directory = 現在作業しているディレクトリ) |
cat file |
ファイルの内容を表示 |
less file |
ファイルをページ送りで表示(q で終了) |
圧縮ファイルの解凍
unzip archive.zip は Linux シェルで打つコマンド。Neovim のコマンドラインで実行する場合は、Ex コマンドではなくシェルコマンドとして渡す必要があるので :!unzip archive.zip のように先頭に ! を付ける。
| 場所 | コマンド | 動作 |
|---|---|---|
| Linux シェル | unzip archive.zip |
現在のディレクトリに zip を解凍 |
| Linux シェル | mkdir -p archive && unzip archive.zip -d archive |
archive/ を作ってその中に zip を解凍 |
| Neovim 内 | :!unzip archive.zip |
Neovim からシェルを呼び出して zip を解凍 |
| Neovim 内 | :!mkdir -p archive && unzip archive.zip -d archive |
Neovim からシェルを呼び出し、archive/ を作ってその中に zip を解凍 |
Neovim
Leader キーは Space。
Normal モード
起動・終了
| コマンド | 動作 | 由来 |
|---|---|---|
nvim <ファイル> |
ファイルを指定して起動 | Neovim |
nvim . |
カレントディレクトリを開いて起動 |
. = カレントディレクトリ |
:qa |
全ウィンドウを閉じて終了 | quit all |
:qa! |
未保存の変更を破棄して強制終了 |
! = 強制 |
:wqa |
全ファイルを保存して終了 | write + quit all |
ファイル操作
| キー / コマンド | 動作 | 由来 |
|---|---|---|
:e |
ファイルをディスクから再読み込み(リロード) | edit(再編集=再読み込み) |
:w |
保存 | write |
:q |
閉じる | quit |
:wq |
保存して閉じる | write + quit |
:!<コマンド> |
Neovim 内からシェルコマンドを実行(例: :!cp -r src .) |
! = シェルコマンド実行 |
コピー・貼り付け・切り取り
この dotfiles では clipboard=unnamedplus を使っているので、通常の y / p はそのままシステムクリップボードと連携する。
一方で d / x は黒穴レジスタに捨てる設定なので、削除してもクリップボードは汚れない。
| キー | 動作 | 由来 |
|---|---|---|
yy |
現在行をコピー | yank line |
yw |
単語をコピー | yank word |
y$ |
カーソル位置から行末までコピー | yank to end |
p |
カーソル後ろ / 次の行に貼り付け | paste |
P |
カーソル前 / 前の行に貼り付け | Paste before |
dd |
現在行を削除(切り取りではなく削除のみ) | delete line |
dw |
単語を削除(切り取りではなく削除のみ) | delete word |
x |
1文字削除(切り取りではなく削除のみ) | excise |
元に戻す/やり直す
| キー | 動作 | 由来 |
|---|---|---|
u |
元に戻す(Undo) | undo |
Ctrl+r |
やり直す(Redo) | redo |
文字削除
| キー | 動作 | 由来 |
|---|---|---|
x |
カーソル下の1文字を削除 | × 印(消す)、または excise |
X |
カーソルの左の1文字を削除 |
x の逆方向(大文字=逆) |
dw |
単語を削除(次の単語の先頭まで) | delete word |
db |
単語を後方に削除 | delete backward |
dd |
行全体を削除 | delete(dd = 行全体) |
D |
カーソルから行末まで削除 | Delete to end(大文字=行末まで) |
d0 |
カーソルから行頭まで削除 | delete to 0(行頭) |
diw |
単語全体を削除(空白は残す) | delete inner word |
daw |
単語全体+前後の空白を削除 | delete around word |
di" |
"..." の中身を削除 |
delete inner "
|
da" |
"..." ごと削除(引用符含む) |
delete around "
|
vi' |
'...' の中身を選択(引用符は含まない) |
visual inner '
|
va' |
'...' ごと選択(引用符含む) |
visual around '
|
di' |
'...' の中身を削除 |
delete inner '
|
da' |
'...' ごと削除(引用符含む) |
delete around '
|
ci' |
'...' の中身を削除して挿入モードへ |
change inner '
|
yi' |
'...' の中身をコピー |
yank inner '
|
c 系 |
d と同じ範囲を削除してインサートモードへ |
change |
:normal コマンドを使うと、全行に対してノーマルモードの操作を一括適用できる:
| コマンド | 動作 | 内訳 |
|---|---|---|
:%normal 0x |
全行の先頭1文字を削除 |
% = 全行、0 = 行頭へ移動、x = 1文字削除 |
行結合
| キー | 動作 | 由来 |
|---|---|---|
J |
現在の行と次の行を結合して、改行を削除(1行にする) | Join |
gJ |
スペースを挟まずに結合 |
g を付けて別バリエーションの join |
文字移動
| キー | 動作 | 由来 |
|---|---|---|
h |
左に1文字移動 | vim hjkl(h = 左) |
l |
右に1文字移動 | vim hjkl(l = 右) |
0 |
行頭に移動 | 列 0(ゼロ番目) |
^ |
行頭の最初の文字に移動 | 正規表現の行頭アンカー |
$ |
行末に移動 | 正規表現の行末アンカー |
単語移動
| キー | 動作 | 由来 |
|---|---|---|
w |
次の単語の先頭へ移動 | word |
b |
前の単語の先頭へ移動 | backward |
e |
次の単語の末尾へ移動 | end |
ge |
前の単語の末尾へ移動 |
e の逆方向 |
W |
次の WORD 先頭へ移動(空白区切り、- 等を含む) |
WORD |
B |
前の WORD 先頭へ移動(空白区切り) | Backward WORD |
E |
次の WORD 末尾へ移動(空白区切り) | End of WORD |
w/eはiskeyword定義の単位(-で区切られる)、W/E/Bはスペースまでを 1 かたまりとして扱う。apxi-yasdfa-ffff全体を一気に選ぶならvE。
行番号移動
| キー / コマンド | 動作 | 由来 |
|---|---|---|
:行番号 |
指定行へジャンプ(例: :42) |
: = コマンドモード |
行番号G |
指定行へジャンプ(例: 42G) |
Go to line |
gg |
ファイルの先頭へ | go(gg = 先頭) |
G |
ファイルの末尾へ | Go(末尾) |
数字j |
現在行から N 行下へ移動(例: 10j) |
j = 下(vim hjkl) |
数字k |
現在行から N 行上へ移動(例: 10k) |
k = 上(vim hjkl) |
スクロール
| キー | 動作 | 由来 |
|---|---|---|
Ctrl+f |
1画面分下にスクロール | forward(1ページ) |
Ctrl+b |
1画面分上にスクロール | backward(1ページ) |
Ctrl+d |
半画面分下にスクロール | down(半ページ) |
Ctrl+u |
半画面分上にスクロール | up(半ページ) |
gg |
ファイルの先頭に移動 | go(先頭) |
G |
ファイルの末尾に移動 | Go(末尾) |
ウィンドウ移動
| キー | 動作 | 由来 |
|---|---|---|
<leader>h |
左のウィンドウに移動 | vim hjkl(h = 左) |
<leader>l |
右のウィンドウに移動 | vim hjkl(l = 右) |
<leader>j |
下のウィンドウに移動 | vim hjkl(j = 下) |
<leader>k |
上のウィンドウに移動 | vim hjkl(k = 上) |
<leader>w |
次のウィンドウに移動(順番に切り替え) | window |
<leader>c |
現在のウィンドウを閉じる | close |
:q |
現在のウィンドウを閉じる | quit |
Ctrl+Home |
左のウィンドウに移動(ノーマル・インサート・ターミナルモード共通) | Home = 先頭・左端 |
Ctrl+End |
右のウィンドウに移動(ノーマル・インサート・ターミナルモード共通) | End = 末尾・右端 |
ファイル内検索
| キー / コマンド | 動作 | 由来 |
|---|---|---|
/キーワード |
カーソル以降を前方検索 |
/ = 区切り・検索(vi 由来) |
?キーワード |
カーソル以前を後方検索 |
? = 疑問(逆方向探索) |
n |
次のマッチへ移動 | next |
N |
前のマッチへ移動 | Next(大文字=逆方向) |
* |
カーソル下の単語を前方検索 |
* = ワイルドカード(単語全体にマッチ) |
# |
カーソル下の単語を後方検索 |
* の逆(# は * の隣キー) |
:noh |
検索ハイライトを消す | no highlight |
置換
| キー / コマンド | 動作 | 由来 |
|---|---|---|
:s/old/new/ |
現在行の最初のマッチを置換 | substitute |
:s/old/new/g |
現在行の全マッチを置換 | global(行内全置換) |
:%s/old/new/g |
ファイル全体の全マッチを置換 |
% = 全行 + global |
:%s/old/new/gc |
ファイル全体を1件ずつ確認しながら置換 | confirm |
:'<,'>s/old/new/g |
ビジュアル選択範囲内の全マッチを置換(ビジュアルモードで :) |
'<,'> = 選択範囲 |
:%s/\bold\b/new/g |
単語境界付きで完全一致のみ置換(部分一致を除外) |
\b = boundary |
:%s/old/new/gi |
大文字小文字を無視して全置換 | ignore case |
確認モード(c オプション)の回答キー:
| キー | 動作 |
|---|---|
y |
この箇所を置換 |
n |
この箇所をスキップ |
a |
残りを全て置換 |
q |
置換を中止 |
l |
この箇所だけ置換して終了 |
使用例:
| やりたいこと | コマンド |
|---|---|
現在行の foo を bar に全部置換 |
:%s/foo/bar/g の代わりに :s/foo/bar/g
|
ファイル全体の変数名 oldName を newName にリネーム |
:%s/oldName/newName/g |
http:// を https:// に全置換(/ を含むため区切り文字を変更) |
`:%s |
class という単語のみ置換(classname などは除外) |
:%s/\bclass\b/Class/g |
| 1〜10行目だけ置換 | :1,10s/foo/bar/g |
| 確認しながら安全に全置換 | :%s/foo/bar/gc |
選択範囲内の TODO を DONE に置換(ビジュアルで範囲選択後 :) |
:'<,'>s/TODO/DONE/g |
; を改行に置換(置換文字列側では \n が改行) |
:%s/; /\n/g |
折りたたみ(fold)
この設定では nvim-ufo を使っており、YAML は yamlls の fold 情報を優先して使う。
そのため、VS Code っぽく YAML の階層をそのまま畳める。
カーソル下の fold 操作:
| キー | 動作 | 由来 |
|---|---|---|
zo |
1段階だけ開く | open |
zO |
カーソル位置の fold を再帰的にすべて開く | Open all(大文字=再帰) |
zc |
1段階だけ閉じる | close |
zC |
カーソル位置の fold を再帰的にすべて閉じる | Close all(大文字=再帰) |
za |
fold をトグル(1段階) | alternate |
zA |
fold を再帰的にトグル | Alternate all(大文字=再帰) |
zv |
カーソル行が隠れていれば必要な分だけ開く | view cursor line |
ファイル全体の fold 操作:
| キー | 動作 | 由来 |
|---|---|---|
zR |
全ての fold を開く | Reduce all folds |
zM |
全ての fold を閉じる | More folds |
よく使うパターン:
| やりたいこと | 操作 |
|---|---|
| 今いるメソッド配下を一気に展開 | zO |
| 今いるメソッド配下を一気に畳む | zC |
| 全部畳んでカーソル行だけ表示 |
zM → 移動 → zv
|
| YAML の階層をざっと閉じてから必要箇所だけ見る |
zM → 移動 → za or zo
|
Insert モード
モード移動
| キー | 動作 | 由来 |
|---|---|---|
Esc |
Insert モードを抜けて Normal モードに戻る | Escape = モード離脱 |
ウィンドウ移動
| キー | 動作 | 由来 |
|---|---|---|
Ctrl+Home |
左のウィンドウに移動 | Home = 先頭・左端 |
Ctrl+End |
右のウィンドウに移動 | End = 末尾・右端 |
Visual モード
範囲選択
| キー | 動作 | 由来 |
|---|---|---|
v |
文字単位で選択開始 | visual |
V |
行単位で選択開始 | Visual line(大文字=行単位) |
テキストオブジェクト(意味のまとまりで一発選択)
文法は「動詞 + i/a + 対象」の 3 パーツ。カーソルが対象のどこにあっても効く。
パーツ 1: 動詞
| キー | 動作 | 由来 |
|---|---|---|
v |
選択する | visual |
y |
コピーする | yank |
d |
削除する | delete |
c |
消して Insert モードへ(書き換え) | change |
パーツ 2: 範囲
| キー | 動作 | 由来 |
|---|---|---|
i |
中身だけ | inner |
a |
区切り記号・後ろの空白ごと | around |
パーツ 3: 対象
| キー | 対象 | 補足 |
|---|---|---|
w |
単語(word) | |
' / " / `
|
クォート | カーソルと同じ行のみ有効 |
( / { / [
|
括弧 | 複数行OK。ネストはカーソル位置の内側 |
t |
HTML/XML タグ(tag) | |
p |
段落=空行区切り(paragraph) | |
s |
文=. 区切り(sentence) |
組み合わせ例(動詞 × 対象で全部使える)
| キー | 動作 | 読み下し |
|---|---|---|
viw |
単語を選択 | visual inner word |
yiw |
単語をその場でコピー(選択操作なし) | yank inner word |
diw |
単語を削除 | delete inner word |
ciw |
単語を書き換え(変数名の修正に最適) | change inner word |
vi' / vi"
|
クォートの中身を選択 |
visual inner '
|
yi' |
クォートの中身をコピー |
yank inner '
|
ci' |
クォートの中身を書き換え(文字列の差し替え) |
change inner '
|
vi( / vi{
|
括弧の中身を選択 |
visual inner (
|
di( |
括弧の中身を削除(引数の削除) |
delete inner (
|
ci( |
括弧の中身を書き換え(引数の差し替え) |
change inner (
|
vit / cit
|
タグの中身を選択/書き換え | inner tag |
vip / yip
|
段落を選択/コピー | inner paragraph |
vaw |
単語を後ろの空白ごと選択 | around word |
va' / da'
|
クォートを記号ごと選択/削除 |
around '
|
va( / da(
|
括弧を記号ごと選択/削除 |
around (
|
コピー・貼り付け・切り取り
| キー | 動作 | 由来 |
|---|---|---|
y |
選択範囲をコピー | yank |
p |
選択範囲を貼り付けで置き換え | paste |
d |
選択範囲を削除(切り取りではなく削除のみ) | delete |
x |
選択範囲を削除(切り取りではなく削除のみ) | excise |
置換・コマンド実行
| キー / コマンド | 動作 | 由来 |
|---|---|---|
: |
選択範囲付きでコマンドラインを開く |
'<,'> が自動で入る |
:'<,'>s/old/new/g |
選択範囲内の全マッチを置換 |
'<,'> = 選択範囲 |
WezTerm ペインへの送信
| キー | 動作 | 由来 |
|---|---|---|
<leader>y |
選択範囲の ファイル:行 または ファイル:開始行-終了行 を右ペインに送信 |
yank to pane |
Terminal モード
モード移動
| キー | 動作 | 由来 |
|---|---|---|
Alt+q |
ターミナルモードから Normal モードに戻る | quit terminal mode |
Esc+Esc |
ターミナルモードを抜けて左ウィンドウへ移動 | 二度押しで確定(Claude Code → エディタ) |
ウィンドウ移動
| キー | 動作 | 由来 |
|---|---|---|
Ctrl+Home |
ターミナルモードを抜けて左ウィンドウへ移動 | Home = 先頭・左端 |
Ctrl+End |
ターミナルモードを抜けて右ウィンドウへ移動 | End = 末尾・右端 |
プラグイン
Telescope
ファジーファインダー。ファイル名・テキスト・バッファ・履歴などをインクリメンタルに検索できる。
| キー | 動作 | 由来 |
|---|---|---|
<leader>ff |
ファイル名で検索して開く | find files |
<leader>fg |
プロジェクト全体をテキスト検索(live grep) | find grep |
<leader>fw |
カーソル下の単語でテキスト検索 | find word |
<leader>fb |
開いているバッファ一覧 | find buffers |
<leader>fr |
最近開いたファイル一覧 | find recent |
nvim-tree
左サイドバーにファイルツリーを表示するエクスプローラー。
ツリー操作
| キー | 動作 | 由来 |
|---|---|---|
Ctrl+n |
ファイルツリーを開閉 | nvim-tree |
<leader>tf |
nvim-tree にフォーカス(閉じていれば開く) | tree focus |
<leader>ef |
エディタにフォーカスを戻す | editor focus |
<leader>tR |
ツリーを最新状態に更新 | tree Reload(大文字=更新) |
<leader>tr |
カーソル下のディレクトリをルートに変更して再表示 | tree root |
<leader>tF |
サイドバー表示とフロート表示を切り替え(ノーマルモードのみ) | tree Float(大文字=表示モード切替) |
Alt+f |
サイドバー表示とフロート表示を切り替え(ターミナルモードでも動作、例: Claude Code 入力中) | float |
Ctrl+] |
フォルダを nvim-tree 内部のルートに変更(:pwd は変わらない) |
] = 深く潜る(vim 慣習) |
W |
ツリー全体を折りたたむ(collapse all) | 大文字で全体操作 |
E |
ツリー全体を再帰的に展開(expand all) | 大文字で全体操作 |
絞り込み
| キー | 動作 | 由来 |
|---|---|---|
f |
ファイル名でライブフィルター(絞り込み) | filter |
F |
フィルターをクリア | Filter clear(大文字=リセット) |
ファイル・フォルダ操作
| キー | 動作 | 由来 |
|---|---|---|
a |
新規ファイル/ディレクトリを作成(末尾に / でディレクトリ) |
add |
A |
フォルダのみ作成(プロンプトに名前入力) | Add directory(大文字=ディレクトリ専用) |
d |
削除 | delete |
r |
リネーム(パスごと書き換えで移動も可) | rename |
m |
ファイル/フォルダをマーク(複数選択)/再度押すと解除 | mark |
bmv |
マークしたファイルをカーソル位置のディレクトリに一括移動 | bulk move |
x |
カット(マーク済みがあれば一括、なければカーソル下を対象) | excise(切り取り) |
c |
コピー(マーク済みがあれば一括、なければカーソル下を対象) | copy |
p |
カット/コピーしたファイルをカーソル位置のディレクトリに貼り付け | paste |
注意:
c/x/pは同一 Neovim インスタンス内でのみ有効。別ウィンドウの Neovim との間ではクリップボードが共有されないため、ターミナルでmv/cpコマンドを使う。mv "ファイルパス" . # 現在のディレクトリ直下に移動 cp "ファイルパス" . # 現在のディレクトリ直下にコピー
ファイルを開く
| キー | 動作 | 由来 |
|---|---|---|
Enter |
ファイルを開く / フォルダを展開 | 確定・実行 |
Tab |
フォーカスを保ったままファイルをプレビュー | タブ=仮表示 |
e |
水平分割で開く | edit horizontal split |
補足:
zip/tar/gz/7zは nvim-tree 上には表示されるが、Enter/Tabではエディタに開かない設定。解凍コマンドは上の「Linux コマンド集 > 圧縮ファイルの解凍」を参照。補足:
pptx/ppt/Enter/Tabではエディタに展開せず Windows の既定アプリ(PowerPoint / PDF ビューア等)で開く設定(explorer.exe経由、WSL2用)。
パスコピー
| キー | 動作 | 由来 |
|---|---|---|
gy |
絶対パス(Linux)をクリップボードにコピー | get yank |
gW |
Windows パスをクリップボードにコピー(WSL2用) | get Windows path |
gE |
Windows の File Explorer で開く。ファイルは選択状態、フォルダはそのまま開く | get/go Explorer |
gV |
VSCode(WSL Remote 経由)でカーソル下のノードを開く |
g = go / V = VSCode |
gr |
相対パスをクリップボードにコピー | get relative path |
<leader>y |
ノードのパスを右 WezTerm ペイン(Claude Code 等)に送信 | yank to pane |
glow
Markdown をターミナル内でレンダリングしてプレビューするプラグイン。
| キー | 動作 | 由来 |
|---|---|---|
<leader>md |
右ペインで glow プレビューを開く(markdown ファイルのみ) | markdown |
Alt+q → <leader>c
|
glow プレビューを閉じる(ターミナルモード抜け → ウィンドウ閉じる) | quit terminal → close |
scratch.nvim
フローティングウィンドウでサッと書ける一時メモ用プラグイン(reybits/scratch.nvim)。
| キー | 動作 | 由来 |
|---|---|---|
<leader>n |
スクラッチパッドを開く / 閉じる | note |
タイムスタンプ付き一時メモ
スクラッチパッドと違い、ファイルとして残したい一時メモ用。zsh の memo コマンド一発でタイムスタンプ付きメモが開き、追加のメモは nvim 内から <leader>N で作れる。
| キー / コマンド | 動作 | 由来 |
|---|---|---|
memo(zsh) |
メモディレクトリ(~/memo。MEMO_DIR で変更可)に yyyymmddhhmmss.md を作成して nvim で開く |
memo |
<leader>N |
カレントディレクトリに yyyymmddhhmmss.md を作成して開く |
New note(<leader>n の Shift 版) |
outline.nvim
LSP シンボルや Markdown 見出しをサイドバーにアウトライン表示するプラグイン。
| キー | 動作 | 由来 |
|---|---|---|
<leader>o |
アウトラインを開閉(Markdown の見出し一覧/LSP シンボル) | outline |
octo.nvim
Neovim から GitHub の Issue・PR・Discussion を操作するプラグイン。
| キー | 動作 | 由来 |
|---|---|---|
<leader>oi |
GitHub Issue 一覧を開く | octo issue |
<leader>op |
GitHub Pull Request 一覧を開く | octo pull request |
<leader>od |
GitHub Discussion 一覧を開く | octo discussion |
<leader>on |
GitHub Notification 一覧を開く | octo notification |
<leader>oI |
GitHub Issue を作成 | octo Issue create(大文字=作成) |
<leader>os |
Issue/PR を検索 | octo search |
<leader>oC |
Issue をクローズ(Issue バッファ内) | octo Close(大文字) |
<leader>oR |
Issue を再オープン(Issue バッファ内) | octo Reopen(大文字) |
<leader>ola |
ラベルを追加(Issue/PR バッファ内) | octo label add |
<leader>olr |
ラベルを削除(Issue/PR バッファ内) | octo label remove |
<leader>opa |
親 Issue を追加(Issue バッファ内) | octo parent add |
<leader>opr |
親 Issue を解除(Issue バッファ内) | octo parent remove |
<leader>ope |
親 Issue を編集(Issue バッファ内) | octo parent edit |
<leader>oca |
子 Issue を追加(Issue バッファ内) | octo child add |
<leader>ocr |
子 Issue を削除(Issue バッファ内) | octo child remove |
AI 連携
claudecode.nvim
Neovim から Claude Code を操作するプラグイン。右パネルにターミナルを表示し、ファイル追加・選択範囲送信などが行える。
| キー | 動作 | 由来 |
|---|---|---|
<leader>ac |
Claude Code を開閉(:Claude でも可) |
ai claude |
<leader>af |
Claude Code にフォーカス | ai focus |
<leader>ab |
現在のファイルを Claude Code に追加 | ai buffer |
<leader>as |
選択範囲を Claude Code に送信(ビジュアルモード) | ai send |
<leader>av |
縦分割(vertical)で Claude Code を開く(MCP連携あり) | ai vertical |
<leader>ah |
横分割(horizontal)で Claude Code を開く | ai horizontal |
codex.nvim
Neovim から OpenAI Codex CLI を操作するプラグイン。サイドパネルに Codex ターミナルを表示する。
| キー | 動作 | 由来 |
|---|---|---|
<leader>cx |
Codex を開閉(:Codex でも可) |
codex |
<leader>cf |
Codex にフォーカス(閉じていれば開く) | codex focus |
Claude Code 再起動
Neovim 内の Claude Code は「閉じて再度開く」ことで再起動できる(claudecode.nvim の既知仕様)。
| キー / コマンド | 動作 | 由来 |
|---|---|---|
<leader>ac(Claude Code フォーカス中) |
Claude Code パネルを閉じる(=セッション終了) | ai claude(トグル) |
<leader>ac(閉じた後) |
新しい Claude Code プロセスを起動(=再起動) | 同上(トグル) |
:ClaudeCodeClose |
パネルを明示的に閉じる | コマンド名そのまま |
ターミナル内の Claude Code プロセス自体を再起動したい場合:
| コマンド | 動作 | 由来 |
|---|---|---|
exit または Ctrl+D
|
Claude Code セッションを終了 | exit / EOF(D = end of file) |
claude |
新規セッションで Claude Code を起動 | コマンド名そのまま |
claude -r <セッション名> |
指定セッションで再開 | resume |
claude -y / claude da
|
権限確認をスキップして起動(--dangerously-skip-permissions) |
yes(codex -y と統一)/ danger の略 |
glm / glm -y
|
Z.ai の GLM-5.3 で Claude Code を起動(ANTHROPIC_BASE_URL を Z.ai に向ける。API キーは ~/.config/zai/api_key) |
モデル名そのまま |
トークン使用量・コスト集計(ccusage)
ccusage で Claude Code / Codex の使用量とコストを集計。alias ccusage='npx ccusage@latest' で毎回最新版を実行(グローバルインストール不要)。
| コマンド | 動作 | 由来 |
|---|---|---|
ccusage / ccusage daily
|
日別のトークン使用量・コスト(デフォルト) | daily |
ccusage weekly |
週別集計 | weekly |
ccusage monthly |
月別集計 | monthly |
ccusage session |
会話セッション別集計 | session |
ccusage blocks --live |
5時間課金枠をライブ表示 | blocks |
ccusage daily --since 2026-06-01 --until 2026-06-18 |
期間指定 | since/until |
ccusage daily --json |
JSON 出力 | json |
Claude Code ゾンビプロセス防止
| コマンド / 操作 | 目的 |
|---|---|
Ctrl+D(セッション終了時) |
明示的に閉じてゾンビプロセスを防ぐ |
ps aux | grep claude |
残存する不要な claude プロセスを確認 |
Claude Code プロンプト入力
| キー | 動作 | 由来 |
|---|---|---|
Ctrl+J |
プロンプト内で改行(送信せずに次の行へ) | J = 下方向(vim hjkl) |
Ctrl+L |
プロンプトをクリアして入力欄を空にする | terminal の clear を連想しやすい |
Gmail
キーボードショートカットを使うには、設定 → すべての設定 → 全般 → 「キーボードショートカット:オン」にする必要あり。
受信トレイをさばく基本フロー
- 常に
g→iで受信トレイへ戻る -
j/kで次に読む候補のスレッドへ移動する - ちゃんと読むときは
oまたはEnterで開く → 読んだらeでアーカイブ →uで一覧へ戻る - 要らないときは一覧上で
x→#で削除、またはx→eでアーカイブ
基本の検索ショートカット
| ショートカット | 動作 |
|---|---|
/ |
メール検索バーにカーソルを移動 |
メール操作
| ショートカット | 動作 |
|---|---|
j / k
|
一覧で上下に移動(カーソルを合わせる) |
o / Enter
|
カーソル中のスレッドを開く |
x |
カーソルのスレッドを選択(チェックを入れる) |
# |
選択中のスレッドを削除(ゴミ箱へ移動) |
e |
現在のスレッド、または選択中のスレッドをアーカイブ |
u |
スレッド表示から一覧へ戻る |
+ または =
|
選択中のスレッドに重要マークを付ける |
- |
選択中のスレッドの重要マークを外す |
* → a
|
現在のページの全スレッドを一括選択 |
y |
選択中のスレッドをアーカイブ(受信トレイから移動、削除ではない) |
b |
選択中のスレッドをスヌーズ(指定時刻まで非表示にして再通知) |
Esc |
検索ボックス・入力欄からフォーカスを外す(ショートカットが効かないときに押す) |
注意:
+/-/y/bは先にxでスレッドを選択してから押す。選択なしで押すと「スレッドが選択されていません」と表示される。
検索ボックスや本文入力中はショートカットが無効になるので、効かないときは先にEscを押す。
新規作成
| ショートカット | 動作 |
|---|---|
c |
新しいメールを作成(画面右下に作成ウィンドウ) |
d |
新しいメールを新しいタブで作成 |
Shift + c |
新しいメールを新しいウィンドウでポップアウトして作成 |
Ctrl + Enter |
作成中のメールを送信 |
画面移動
| ショートカット | 移動先 |
|---|---|
g → i
|
受信トレイ(Inbox) |
g → s
|
スター付き(Starred) |
g → t
|
送信済み(Sent) |
g → d
|
下書き(Drafts) |
g → l
|
ラベルへ移動(入力ボックスが開く → ラベル名を入力して Enter) |
g → l でラベル「重要」に移動する手順
-
Escでフォーカスを外す -
gを押す →lを押す(ラベル移動ボックスが開く) -
重要またはImportantと入力してEnter
検索クエリで代替する場合は、検索欄に is:important と入力して Enter。
重要マークの仕組み
Gmailが機械学習でユーザーの操作履歴を学習し、自動で付けるフラグ。
判定に使われるシグナル:
- よくやり取りする相手(頻度・返信速度)
- 開封率・返信率
- To 直接送信か、CC/メーリングリストか
手動で修正すると学習される:
- マークがないのに重要 →
xで選択 →+で付ける - 重要でないのにマークあり →
xで選択 →-で外す
一括で重要マークを無効化するには:
設定 → すべての設定 → 受信トレイ → 「重要マーカー」→「マーカーなし」を選択。
Linear
| ショートカット | 動作 | 由来 |
|---|---|---|
G → P
|
親イシュー(上の階層)に戻る。 | Go to Parent issue |
Azure CLI
Azure Key Vault
| 操作 | コマンド |
|---|---|
| Key Vault 一覧 | az keyvault list --output table |
| Key Vault の URL 確認 | az keyvault show --name <vault-name> --query properties.vaultUri --output tsv |
| シークレット一覧 | az keyvault secret list --vault-name <vault-name> --output table |
| シークレット追加・更新 | az keyvault secret set --vault-name <vault-name> --name <key> --value <value> |
| シークレット値を取得 | az keyvault secret show --vault-name <vault-name> --name <key> --query value --output tsv |
| シークレット削除 | az keyvault secret delete --vault-name <vault-name> --name <key> |
このプロジェクトの Key Vault
| 項目 | 値 |
|---|---|
| Vault 名 | autofor-kv |
| URL | https://autofor-kv.vault.azure.net/ |
# シークレット追加の例
az keyvault secret set --vault-name autofor-kv --name my-api-key --value "my-secret-value"
# シークレット値を取得する例
az keyvault secret show --vault-name autofor-kv --name my-api-key --query value --output tsv
Slack(Windows)
とりあえずの入口
| ショートカット | 動作 | 由来 |
|---|---|---|
Ctrl+/ |
ショートカット一覧を表示 |
/ = ヘルプ・コマンド入力の慣習 |
Ctrl+K / Ctrl+T
|
どこでも会話にジャンプ(クイックスイッチャー) | Slack 独自(Key navigation / To channel) |
Ctrl+, |
設定(Preferences)を開く |
, = 設定・オプションの慣習 |
ナビゲーション・未読処理
| ショートカット | 動作 | 由来 |
|---|---|---|
Ctrl+Shift+A |
全未読ビューを開く | All unreads |
Alt+↓ / Alt+↑
|
次/前のチャンネル・DMへ移動 | 矢印キー = 方向 |
Alt+Shift+↓ / Alt+Shift+↑
|
次/前の未読チャンネル・DMへ移動 | Shift = 未読に絞り込み |
Ctrl+Shift+L |
チャンネル一覧を開く | List channels |
Ctrl+Shift+K |
DM一覧を開く | Slack 独自(Key = DM) |
Ctrl+Shift+M |
メンション/アクティビティを開く | Mentions |
F6 / Shift+F6
|
セクション間フォーカス移動 | F6 = フォーカス移動の慣習 |
Esc |
現在のチャンネル/DMを既読にする | Esc = 離脱・完了 |
Shift+Esc |
全チャンネル・DMを既読にする | Shift = 全体に拡張 |
スレッド・サイドバー
| ショートカット | 動作 | 由来 |
|---|---|---|
Ctrl+Shift+T |
スレッドビューを開く | Threads |
Ctrl+. |
右サイドバーを開閉 |
. = 右側(> の方向) |
メッセージ入力・編集
| ショートカット | 動作 | 由来 |
|---|---|---|
Shift+Enter |
改行のみ(送信せずに次の行へ) | Enter だけだと送信されるため Shift で抑制 |
Ctrl+B |
太字 | Bold |
Ctrl+I |
斜体 | Italic |
Ctrl+Shift+X |
打ち消し線 | × 印(消す) |
Ctrl+Shift+9 |
引用 | Slack 独自(9 に特定の意味なし) |
Ctrl+Shift+C |
インラインコード | Code |
Ctrl+Alt+Shift+C |
コードブロック | Code block(修飾キーを増やして区別) |
Ctrl+Shift+7 |
番号付きリスト | Slack 独自(7 に特定の意味なし) |
Ctrl+Shift+8 |
箇条書きリスト |
Shift+8 = *(アスタリスク=箇条書き記号) |
devbox への接続
~/.ssh/config(dotfiles 管理: windows/.ssh/config)に Host devbox を定義しているので、どのツールからも同じ名前で入れる。
| コマンド | 動作 |
|---|---|
ssh devbox |
devbox に SSH(鍵・ユーザー名は config が解決) |
ssh devbox -t tmux new -As main |
tmux の main セッションに直接 attach(WezTerm 外から) |
scp devbox:~/path/file . |
devbox からファイル取得(アップロードは逆向き) |
pwsh -File windows\bin\devbox.ps1 ensure |
VM 起動 + NSG の現在 IP 許可を担保(ネットワーク変更後の復旧はこれ or <leader> →a) |