読者です 読者をやめる 読者になる 読者になる

vim-fakearray ダミー配列を手軽に入力するプラグイン作った

github.com

プログラミングをしていると適当な配列が欲しい時ありますよね。
「0〜100の整数からランダムに10個選んだ配列」などなど。
そんなVimmerの要望を叶えるのがvim-fakearrayです。
vim-fakearrayはvim-fakeに依存しています。

vim-fakeについては作者の記事を参考にしてください。
qiita.com

インサートモードに<Plug>(fakearray)のキーマップを割り当てれば、 プロンプトを呼び出してダーミー配列を手軽に挿入できます。

解説

呼び出し階層

<Plug>(fakearray)fakearray#genfakearray#valfake#gen|fake#int|fake#float|fake#chars

fakearray#val

fakearray#val(first, second)は引数によって呼び出すfake#関数を変えます。

first second 呼び出し
整数 整数 fake#int(first, second)
少数or整数 少数or整数 fake#float(first, second)
文字列 整数 fake#chars(fake#int(1, second), first)
文字列 空文字列 '' fake#gen(first)
fake#int fake#float

この2つは第1引数〜第2引数の範囲の値を返しますが、Vimのバージョンによっては正しく動作しないようです。
恐らくVimが内部で扱う整数のサイズに依存しているのでしょう。
64bit整数が追加されたのは7.4.1976のようです。
Vim8.0とNeovim0.2では正常に動作しました。

fake#chars

第1引数は生成する文字数です。
第2引数は'abc'のような適当な文字列の他に、'\w'などの文字セットを使うことが出来ます。
詳細はvim-fakeのドキュメントを見てください。

fake#gen

'job''country''word'などのカテゴリを渡すことが出来ます。

fakearray#gen

fakearray#gen(num, first, second)fakearray#valnum回呼び出して、結果をg:fakearray#separator区切りで結合します。
b:fakearray_separatorも使えます。

(fakearray)

プロンプトに入力する値の個数によって動作が変わります。

入力数 動作
1 fakearray#gen({input num}, g:fakearray#prompt_first, g:fakearray#prompt_second)
2 fakearray#gen({input1 num}, {input2 str}, '')
3 fakearray#gen({input1}, {input2}, {input3})

入力数1と3は見たまんまです。
2のときはfakearray#genの第3引数を''にしているのでfake#genが呼ばれます。
内部で入力値にevalをかけているので文字列を入力するときはクオートを省略してはいけません。

キーマップ

インサートモードのキーマップは悩みますよね。
Emacsバインドにしている人は特に。
プラグインのデフォルトでは<F3>に割り当てていますが、私は<c-/>aに割り当てています。
ただし、<c-/>をテキストとして入力しても動作しないので、代わりに<c-v><c-/>特殊文字を入力する必要があります。

最後に

Vimには乱数を生成する関数がないので、このプラグインではvim-fakeを使いました。
乱数を生成する方法は他にもあります。

初めてvim-themisでテストを書きました。
なかなか面白かったです。