組み込み関数の一覧をソースコードから抽出するまでの過程を記します。
Vimのソースコードから組み込み関数を取得するサンプルコードを最後に載せてます。
サンプルコードだけ確認したい場合はその他だけ読んでください。
過程
Vimのソースコードをgitで取得します。
git clone --depth 1 https://github.com/vim/vim.git
カレントディレクトリにvimというディレクトリが出来ました。
ソースコードのディレクトリに移動します。
cd vim
次に、組み込み関数がどこのファイルに書かれているのか調べます。
VimはC言語で書かれているので拡張子cに絞って探してみます。
組み込み関数のhasmaptoをキーワードにしてヒットするファイルを探してみます。
find -type f -name "*.c"| xargs grep "hasmapto"
4件ヒットしました。
src/eval.cにhasmaptoが載っていることが分かりました。(Vim 7.4.2031の場合)
./src/eval.c:static void f_hasmapto(typval_T *argvars, typval_T *rettv);
./src/eval.c: {"hasmapto", 1, 3, f_hasmapto},
./src/eval.c: * "hasmapto()"function
./src/eval.c:f_hasmapto(typval_T *argvars, typval_T *rettv)
src/eval.cをvimで開いて確認してみます。
vim src/eval.c
hasmaptoを検索してみます。
ノーマルモードで次の通りにキーを入力します。
/hasmapto
hasmaptoという文字列がある行にカーソルが移動しました。
static void f_hasmapto(typval_T *argvars, typval_T *rettv);
カーソル行の前後も似たような形式で書かれていました。
もしかしたらstatic void f_がある行を抽出したら組み込み関数が取れるのではないかと推測しました。
一旦、Vimを閉じます。
:q
grepでsrc/eval.cからstatic void f_が書かれている行を抽出してみます。
grep "static void f_" src/eval.c
ターミナル上に大量の文字列が流れてきました。
目視で数えるには量が多いです。
次のコマンドを実行して件数を調べたら334件でした。(Vim 7.4.2031の場合)
grep -c "static void f_" src/eval.c
英語が苦手なのでいつもVim日本語ドキュメントを辞書代わりに確認してました。
今回ソースコードから抽出することによってsetfperm()とかwin_id2win()とかwin_gotoid()とかtest_settime()とか他にも初見の組み込み関数に巡り会えた事に喜びを感じました。
その他
eval.cから抽出した内容を加工して、関数名のみ並べるVim scriptのサンプルです。
:%!grep"static void f_" src/eval.c:%s/^.\+f_\(.\+\)(.*/\1/g
引数-S sample.vimを付けてVimを起動します。
-Sは大文字のSです。
vim -S sample.vim