Help us understand the problem. What is going on with this article?

やけに丁寧なtigのキーバインド設定ガイド

More than 5 years have passed since last update.

やけに丁寧なtigの設定ガイド(表示制御編) で予告したキーバインドについての解説を行います。

キーバインドは突き詰めていくと非常に設定量も多く複雑になり難しくなるため、
本記事ではキーバインド設定の概論にスコープを絞ります。

tigのキーバインド規則について

tigの基本操作は単一のキー押下に対して割り当てられたアクションを実行するというものです。
一部をhelpビュー ( h で表示されます)から抜粋します。

上記はtigのデフォルト設定に書かれているビューを切り替えるキーバインドです。
キーはcase-sensitiveです。小文字と大文字に独立したアクションになります。

さらに、修飾キーとして Ctrl を使ったコンビネーションをサポートします。
たとえば Ctrl-U はPageUpに割り当てられています。
Ctlr-Uの設定

ただし、option/altといった修飾キーや、 Ctrl-a-b のような2ストロークキーはサポートしていません。
この規則に則って、以下では独自のキーバインドを設定していきます。

キーバインドの設定記法

.tigrc にて独自のキーバインド設定を書くことができます。syntaxは以下のとおりです。

bind keymap key action

先頭の bind がキーバインドの設定を示しています。

keymapは指定先のkeymapになりますが、これはtig全体でグローバルに反映されるgenericか、ビュー毎に特化したkeymap(例: main と書けばmainビュー専用のキーバインド)になります。

keyには割り当てるキーを書きます。ASCIIの文字(!などの記号も含む)か Enter, Space, Insert, Delete といったシンボル名が使えます。
Ctrlを使ったコンビネーションの場合は ^ をつけます。 Ctrl-a であれば ^a です。

actionは実行するアクションを指定します。指定できるのは以下の3種類です。

  • tigが用意しているアクション
    • 例: mainビューに移動する view-main
  • tigの内部コマンド(:で始まる)
    • 例: tig設定ファイルを読み込む :source SOURCEFILEPATH
  • 外部コマンド(!で始まる)
    • 例: git fetchを実行する !git fetch

このうち、外部コマンドでは組み込み変数が用意されていて、外部コマンドにtigの情報を渡すことができます。
変数名は %(variable-name) の記法で表され、10数種類が用意されています。
たとえばmainビューで現在のカーソルにあるコミットのIDを示すなら %(commit) とします。
これを利用した実例は後述のキーバインド設定例で示します。

genericなキーバインドを設定してみる

まず試しに以下のキーバインドを設定してみましょう。これは筆者が強くオススメする設定です。

# デフォルトの bind generic G !git gc を無効化する
bind generic G none

keymapをgeneric(tig全体で有効)に指定して、G (大文字のG)を none (何もしない)に置き換えています。
なぜかというと、tigのデフォルト設定では Ggit gc の実行になっているのですが、
vim-likeなカーソル移動をデフォルトのキーバインドに持つtigにおいて、
G は「最後の行に移動する」というvimのキーバインドと紛らわしいからです。
(vimに慣れているエンジニアであればこの罠にはきっとはまると思います。。)

generic keymapで G を無効化したうえで、私は以下の設定でvimに近い操作感を得ています。

bind generic g move-first-line
bind generic G move-last-line

以上を記載した.tigrcを保存してtigを起動すると設定が反映されているかと思います。
独自のキーバインドはhelpビューでも内容を確認できるので、設定が正しいか確認しましょう。

helpビューで設定の確認

ビューに特化したキーバインドを設定する

ビューに特化したキーバインドの一例もご紹介します。

mainビューからデフォルトのキーバインドではHで遷移できるbranchビューがあります。
branchビューのサンプル

ふだんの開発時、masterから派生してfeatureブランチを作ることが頻繁にあるかと思います。
gitコマンドで書くと git checkout -b my_feature master となりますが、
これをtigのbranchビューで実行できるようにしてみます。

bind branch n !git checkout -b %(prompt) %(branch)

n (new branchという意味で割り当てています)に対して外部コマンドとして git checkout ~ アクションを実行する設定です。
%(branch) には現在カーソルがあたっている行のブランチ名が入るので、nをmasterブランチカーソル上で叩けばmasterがここに入ります。
%(prompt)は外部コマンド実行時にtigがユーザーに入力を指示する機能です。
nを叩くとtigのステータス行で入力を求められるので、ブランチ名を記入します。

promptの表示

これでmasterブランチから派生したmy_featureブランチが作成されました。
ブランチ作成後のbranchビュー

おわりに

概論の説明にとどめるため、keymapの名前リストや可能なkeyの名前、tigが用意しているアクション名などは一部のみ紹介しました。
完全な情報は tigrc(5) Manual Pageを参考にしてみてください。

機会があれば各ビュー毎にチューニングしたオススメのキーバインドを紹介したいと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした