1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Vimの組み込み関数一覧をソースコードから取得するまでの過程

Posted at

組み込み関数の一覧をソースコードから抽出するまでの過程を記します。
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.chasmaptoが載っていることが分かりました。(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のサンプルです。

sample.vim
:%!grep "static void f_" src/eval.c
:%s/^.\+f_\(.\+\)(.*/\1/g

引数-S sample.vimを付けてVimを起動します。
-Sは大文字のSです。

vim -S sample.vim

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?