設定ファイルの場所

tigのキーバインド設定は ~/.tigrc ファイルに書く。ファイルが存在しない場合は新規作成する。

touch ~/.tigrc

キーバインドの基本構文

キーバインドの設定は以下の構文で記述する:

bind [keymap] [key] [action]
  • keymap: キーが有効な画面(main、diff、logなど)
  • key: 割り当てるキー
  • action: キーに対応するアクション

よく使うキーマップ

キーマップ(画面)説明
generic全画面で有効
mainメイン画面(コミット一覧)
diff差分の表示画面
logログ表示画面
treeツリー表示画面
blobファイル内容の表示画面
blameblame表示画面
refsブランチ・タグ一覧画面
statusステータス画面

変数

アクション内で使用できる変数は以下の通り。

変数説明使用可能な画面
%(commit)現在選択されているコミットのハッシュmain、log、diff
%(branch)現在のブランチ名または選択されたブランチ名refs、main
%(file)現在選択されているファイル名tree、blob、status
%(directory)現在のディレクトリパスtree
%(lineno)現在の行番号blob、blame
%(author)コミットの作成者main、log
%(date)コミットの日付main、log
%(tag)選択されたタグ名refs
%(remote)リモート名refs
%(ref)選択されたリファレンス(ブランチ・タグ)refs

プロンプト機能

アクションで%(prompt プロンプトメッセージ) を使用するとユーザー入力を受け取れる:

# ~/.tigrc
# ブランチ名を入力してチェックアウト
bind main S ?git switch -c "%(prompt Enter branch name: )" %(commit

変数の実用例

# ~/.tigrc
# コミット関連の変数使用例
bind main R !git reset --hard %(commit)            # 選択コミットにリセット
bind main c !git cherry-pick %(commit)             # 選択コミットをチェリーピック

# ブランチ関連の変数使用例
bind refs c !git checkout %(branch)                # 選択ブランチをチェックアウト
bind refs p !git push origin %(branch)             # 選択ブランチをプッシュ
bind refs d !git branch -d %(branch)               # 選択ブランチを削除

# ファイル関連の変数使用例
bind tree o !open %(file)                          # 選択ファイルを外部アプリで開く
bind blob l !less %(file)                          # 選択ファイルをlessで表示
bind blob v !vim %(file) +%(lineno)                # 選択ファイルを特定行でVimで開く

# 作成者・日付情報の活用例
bind main @ !echo "Author: %(author), Date: %(date)" # 作成者と日付を表示
bind main L !git log --author="%(author)"          # 同じ作成者の他のコミットを表示

アクションの感嘆符と疑問符の違い

tigのキーバインドでコマンドを実行する際、プリフィックスによって実行方法が変わる:

プリフィックス動作使用例
!即座にコマンドを実行する!git push origin %(branch)
?実行前に確認を求める?git branch -d %(branch)

感嘆符プリフィックスを使う場面

間違えて実行しても問題無い操作や、頻繁に使うコマンドに適している。

  • 読み取り専用の操作git showgit log、ファイル表示
  • リスク の低い操作:ファイルを外部エディタで開く
  • 頻繁に使う操作:確認が煩わしい日常的なコマンド

疑問符プリフィックスを使う場面

間違えて実行すると取り返しのつかない操作や、慎重に行いたい操作に適している。

  • データを変更する操作:ブランチ削除、コミットリセット
  • 取り消し困難な操作:強制プッシュ、ファイル削除
  • 重要な操作:マージ、リベース

カスタムキーバインド例

ブランチ操作の効率化

# ~/.tigrc
# ブランチをチェックアウト
bind refs = !git checkout %(branch)

# 現在のブランチから新しいブランチを作成
bind main B !git checkout -b %(prompt Enter branch name: )

# ブランチを削除
bind refs D !git branch -d %(branch)

コミット操作の強化

# ~/.tigrc
# コミットを修正
bind main A !git commit --amend

# インタラクティブリベース
bind main R !git rebase -i %(commit)^

# コミットをリセット(soft)
bind main S !git reset --soft %(commit)^

# コミットをリセット(hard)
bind main H !git reset --hard %(commit)^

プッシュ・プル操作

# ~/.tigrc
# 現在のブランチをプッシュ
bind generic P !git push origin %(branch)

# 強制プッシュ
bind generic F !git push --force-with-lease origin %(branch)

# プル(rebase)
bind generic U !git pull --rebase

ファイル操作

# ~/.tigrc
# ファイルをステージング
bind status a !git add %(file)

# ファイルのステージングを解除
bind status u !git reset HEAD %(file)

# ファイルの変更を破棄
bind status D !git checkout -- %(file)

外部エディタ連携

# ~/.tigrc
# 現在のファイルをエディタで開く
bind generic E !vim %(file)

# コミットメッセージを編集
bind main e !git commit --amend -m "%(prompt Enter commit message: )"

キーコンボによるキーバインド

tigでは複数キーの組み合わせ(キーコンボ)を使った効率的なキーバインドが設定できる。
ただしキーコンボが一致した時点でそのアクションが実行されるため、キーコンボを決める場合は使われていないキーを選ぶ必要がある。

例えば、sはステータス画面の表示に使われているため、ssのようなキーコンボは設定できない。
@のように使われていないキーをプレフィックスにするとよい。

例:

# ~/.tigrc
# Git操作系(gプリフィックス)
bind generic @gd view-diff      # gd: 差分ビューを開く
bind generic @gt view-tree      # gt: ツリービューを開く
bind generic @gl view-log       # gl: ログビューを開く
bind generic @gb view-refs      # gb: ブランチ一覧を開く
bind generic @gs view-status    # gs: ステータスビューを開く

# ブランチ操作系(bプリフィックス)
bind main @bc !git checkout -b %(prompt Enter branch name: )  # bc: ブランチ作成
bind refs @bd !git branch -d %(branch)                        # bd: ブランチ削除
bind refs @bm !git merge %(branch)                           # bm: ブランチマージ
bind refs @br !git rebase %(branch)                          # br: ブランチリベース

# コミット操作系(cプリフィックス)
bind main @ca !git commit --amend                            # ca: amendコミット
bind main @cr !git revert %(commit)                          # cr: コミットリバート
bind main @cp !git cherry-pick %(commit)                     # cp: チェリーピック
bind main @cf !git commit --fixup=%(commit)                  # cf: fixupコミット

# プッシュ・プル系(pプリフィックス)
bind generic @pp !git push origin %(branch)                  # pp: プッシュ
bind generic @pf !git push --force-with-lease origin %(branch) # pf: 強制プッシュ
bind generic @pl !git pull --rebase                          # pl: リベースプル
bind generic @pt !git push --tags                            # pt: タグプッシュ

以下のようにキーコンボを考えるとよい。

  • プリフィックスキーで機能をグループ化(g=Git、b=Branch、c=Commitなど)
  • 直感的なセカンドキー(d=diff、t=tree、l=logなど)
  • 類似操作は同じプリフィックスにまとめる
  • よく使う操作は短いコンボにする

設定の確認

設定ファイルを編集した後にtigを再起動すると設定が反映される。 hキーを押してヘルプ画面を開くと、設定したキーバインドが表示される。