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
がわかっていない...