rlwrapの補完を使う

rlwrapの便利な点に補完があります(rlwrapに関してはrlwrapでSBCLを快適に - プログラムの事とかを見て下さい)。
ただこの補完を使うためには幾つか設定や用意するものが必要なので、今日はその事をメモしておきます。

フォルダ・ファイル名補完

rlwrap -c

と-cオプションを付けて起動してやればOK!
たったこれだけで、よく使う補完機能が利用できるのですから使わなきゃ損ですね。

辞書補完(関数名とか)

上のに比べてちょっと手間が必要になります。

1.辞書ファイルを用意する

補完したい単語が載っている辞書ファイルを用意します。
辞書ファイルはテキスト形式で、単語が羅列してあればOKです。
単語は空白文字か改行で区切られているのが無難のようです(単語の区切りはこれ以外でも良いのですが・・・次の2を参照して下さい)。

そしてその辞書ファイルをホームフォルダ.プログラム名_completionsという名前で保存しておきます(オプションを使って場所と辞書ファイルの名前を変える事は可能なようです)。

私はSBCL(Lisp処理系の一つ)をrlwrapで利用しているので、CommonLisp用辞書ファイルを.sbcl_completionsという名前でホームフォルダに置いています。
(ちなみにこのファイルはvim用の辞書としても使っています。)

2.単語の区切り文字を指定

初期状態では単語の区切り文字は (){},+-=&^%$#@"";|\とされているようです
例えばCommonLispではremove-ifなんて関数があるのですが、デフォルトのままだと-が区切り文字に設定されているのでremoveとifという二つの関数になってしまいます。
そこで(必要であれば)改めて区切り文字を上書き設定する訳です。
僕はcommonLisp用にrlwrapの起動オプションとして-b="(){}
.,;|"を指定しています。
(C言語用には特別に/と.が追加されているようです。)

以上で辞書ファイルを利用した単語補完ができるようになっている筈です。

余談

指定したファイルを単語に分割してその単語を補完してくれる-fオプションなんてのもあるようです。
まとまったプログラムを書くようになると自分で定義した変数名や関数名が補完できるようになるので便利なんでしょうね。

そして現在はrlwrapとsbclを使うために以下のように.bashrcにエイリアス設定しています。

alias sbcll='LANG=ja_JP.SJIS mintty -e rlwrap -c -q=\" -b="(){}[].,;|" sbcl'