Ctags と vim と Git
概要
vimでタグジャンプを楽にする方法です。以下適当な翻訳です。
Ctags はコードのインデックスを作成し, 関数, 変数, クラス, その他の識別子への Vim でのジャンプを容易にします. Gitのフックはリポジトリ単位です(Git hooks). あるリポジトリに対して, 指定されたフックをインストールするスクリプトを使用するのが推奨されていますが, 手作業で面倒です. テンプレを作成して楽しましょう.
テンプレートのフック作成
git全体で使用するテンプレートディレクトリを設定, 作成します.
git config --global init.templatedir '~/.git_template' mkdir -p ~/.git_template/hooks
ctagsファイルを作成します.
vim .git_template/hooks/ctags
#!/bin/sh set -e PATH="/usr/local/bin:$PATH" dir="`git rev-parse --git-dir`" trap 'rm -f "$dir/$$.tags"' EXIT git ls-files | \ ctags --tag-relative -L - -f"$dir/$$.tags" --languages=-javascript,sql mv "$dir/$$.tags" "$dir/tags"
上の内容は,
set -e: スクリプト内の各コマンドの実行でエラーが出たら処理を中止するPATH..: 環境変数に/usr/local/binを追加dir...: gitリポジトリのパスをdir変数に格納trap..: EXITシグナルを検知したら, 古いタグ.git/tagsを削除する?git...: git管理下のファイルに対しctagsを生成, jsとsqlは除くmv ...: 生成されたタグをtagsディレクトリに移動
という感じです.
各フックファイルを作成します。pre-commitは以下です。
#!/bin/sh .git/hooks/ctags >/dev/null 2>&1 &
post-checkout, post-mergeも内容は一緒です.
最後に rebase, commit --amend の対応として post-rewrite を作成します.
#!/bin/sh case "$1" in rebase) exec .git/hooks/post-merge ;; esac
これでいけるはずです。
結局5つのファイルを作成しました。
/Users/ushumpei/.git_template |--hooks | |--ctags | |--post-checkout | |--post-commit | |--post-merge | |--post-rewrite
感想
Ctagsについて昔書いた文章が見つかったので載せてみました。
trapとgit rev-parseがわかっていない...