230日目の記事です。昨日の記事は@manga_osyoさんで、明日の記事はvital.vimコミッタの@rbtnnさんです。scriptの入門記事です。script初級者レベルを10段階に分割すると、そのうち簡単な方から3つは、以下のようになります。scriptという名称すら知らず、VimScriptやVimLなどといった架空の呼び名を用いる。足し算など、基本的な四則演算がぎりぎり利用できる。Vimプラギン開発まではいかないが、自分の~/.vimrcに簡単なロジックを記述したことならあるvital.vimモジュールを利用する程度なら可能である。script中級者であるこの記事はレベル1の読書の人を全員レベル3卒業まで引き上げることを目的とします。scriptのページが参考になります。VimScriptという言語は存在しません。JavaScriptやCoffeeScriptなら存在します。VimLという言語は存在しません。Scriptingは存在します。この文書に記述されている内容をすべて実際に写経し、体験することは、あなたの一生の友になるでしょう。scriptを簡単に実行するため、以下のうち少なくとも1つ、できれば両方を導入することをおすすめします。https://github.com/thinca/vim-quickrunhttps://github.com/rbtnn/vimconsole.vimなお、"Vimスクリプト基礎文法最速マスター"は簡単のため意図的にVim正規表現の記述を省略しています。これについては後述します。script初級者レベル3vital.vimを用い、偉大なる先人の資産を最大限活用しましょう。vital.vimの用い方はREADMEに詳しく記述されています。vitalを用いたいプラギンをVitalizeすればよいです。(&rtp)に入れて独立したプラギンとして利用すればよいです。'vim-jp/vital'こうすると、vital#of('vital')とすることでvitalが利用可能になります。vital#of('vital')(著者の~/.vimrcでは、これをs:Vではなくg:Vに代入しています。vitalの関数を使いたいときに、いつでもどこでもg:Vでvitalが利用できて、大変便利です。実際にvimrcの中で多用しています。万人にオススメできるわけではありません。部分的に利用可能です。活用してみてください。s:V.import('Data.String')Data以下にあるモジュールはとくに利用価値が高いものが多いと評判です。すべてのモジュールを用いたプラギン開発や~/.vimrc育成を行なってみてはいかがでしようか。script中にVimに組み込まれた他言語インタフェースを用いることもできます。123をPythonから参照し、1加算した124を出力しています。plugin開発にあたって他言語インタフェースを用いる決定をしたときは、以下のルールに従うことで、多くの問題を事前に回避できます。(Vimプロセスをコピーしない)if_rubyを使わないVimはスレッドセーフではありません。スレッドを作ると、その中でどんな自明な処理をしていたとしても、確率的にVimが音もなく静かに死亡します。自分でスレッドを明示的に使わなくても、外部ライブラリがスレッドを作成していれば同じことです。外部ライブラリを一切使わない(*1)というルールは、条件付きで回避できます。ライブラリを使うときは、そのライブラリと、そのライブラリが依存しているすべてのライブラリを再帰的にすべて確認し、いずれもいっさいスレッドを使っていないときのみ、安全といえます。言い換えると、ほんのすこしでも自信がないときはやめておきましょう。if_rubyを避ける。意図せずスレッドを用いたライブラリを依存ライブラリの一つとして読み込んでしまうという事例が多々観測されています。luaができることはとても少ないため、比較的安全度が高いといえます。luajitのおかげで単純に処理速度が速いです。lambdaがあります。他の外部言語インタフェースよりもおすすめ度が高いです。(著者が一番オススメするのは、そもそもVim内で他言語インタフェースを用いるのではなく、別のプロセスとして他言語で記述されたプログラムを起動し、vitalのProcessManagerなどで通信することです。してもオーバーヘッドは残るものの、処理速度の純粋な向上・記述性の向上だけでなく、真の並列性が得られるという利点が残ります。外部ライブラリも使いたい放題です。Clojureなどで記述するとjarファイルにコンパイルできるため、実用的かつ可搬性の高いものになるのではないでしょうか。