まとめ
- tigでは
:
でtigのプロンプトが開ける - tigプロンプトでは
!
から始まる文字列で外部コマンドが実行できる - コマンド中に
%(file)
を書くとファイル名に展開できる - 上記より
:!git checkout :%(file)
と打つことにより今見ているファイルだけHEADに戻せる
日常風景
tigでコミット眺めながら「このファイルだけいらんなー」とか思うものの、シェルに戻ったりショートカット作ったりする手間がめんどくさいことよくありませんか?
僕はあります。
標準のキーバインドはh
で見れますが、cherry-pick、ブランチのチェックアウト、ファイルのstaging/unstaging、stash操作はあるものの、あらゆる操作が登録されているわけではありません。
キーバインドを定義することでgitにまつわる(git以外のコマンドも可)いろんな操作が行なえますが、設定ファイルを編集してリロード(source
でできるけど)するのは微妙に億劫ですし、そもそも俺はドリルじゃなくて穴が欲しいんだ。
というわけでワンショットで実行したいわけです。
tigの中からコマンドを実行する。
tigの対話画面上で:
を入力するとプロンプトが開きます。
プロンプトでは!
かexec
で外部コマンドを実行できます。
git操作系のデフォルトのキーバインドも同じ感じで定義されているだけなので、似たような感じでいけます。
ユーザ定義コマンドのところに利用できる変数がたくさん書いてあるので、適当に使っていけばいいでしょう。
とりあえず今カーソルがあるファイルだけをHEADに戻したいなら:!git checkout %(file)
と打てばよいでしょう。
カーソルがあるファイルだけの履歴が見たければ:!git log %(file)
でいけます。
Git上の絶対パスに展開する
%(file)
はリポジトリのルートディレクトリからの相対パスに展開されるので、カレントディレクトリが.gitディレクトリのあるgitのルートディレクトリでないとコマンド実行に失敗するでしょう。
そんな時はgitの絶対パスを使いましょう。絶対パスを使うと、git(およびgitリポジトリを扱うツール)では、現在いるディレクトリを無視して、直接そのファイルを操作できます。
tigのプロンプト中でファイル名の頭にコロンを付ける(:%(file)
)と絶対パスとして展開してくれます。
感想
時々便利。