vim でファイル名のパターンによって選択されたスケルトンを自動挿入する

スケルトンの自動挿入 - 檜山正幸のErlang未確認情報 - はてなグループ: erlang

OPTのオフィシャルアプリケーションを構成するモジュールのネーミングはほぼ習慣化している。(「ネーミング」参照。)

であるなら、ファイル名が *_server.erl ならgen_serverスケルトン、*_sup.erl ならsupervisorスケルトンを自動挿入すりゃいんじゃないの。なんで今までやってなかったの? アホッ>自分。

便利そうだったので、vim で真似してみました。

実現方法について

初めは autocmd を使おうかと思ったのですが、ファイル名等が自動入力されるような Plugin があるんじゃないかと思い vim online を漁ったところ tSkeleton を発見しました。

少し使ってみて便利だった為、これを使う事にしました。

インストール

tSkeleton が依存している Plugin tlib を先に入れておく必要があります。

双方共に vba 形式となっている為、vba ファイルを vim で開いて「:so %」とコマンドを入力するだけでインストールが完了します。

ケルトンを作成

ヘルプには、「~/vimfiles/skeletons/templates/GROUP/FILETYPE PATTERN」という形式でスケルトンファイルを作成しておけば、autocmd を自動設定してくれると書かれている為、下記のようなファイルを作成します。

$ mkdir -p ~/.vim/skeletons/templates/erlang
$ echo 'foo bar' > ~/.vim/skeletons/templates/erlang/erlang\ \#_sup.erl

これで、「*_sup.erl」にマッチするファイルを開くと「foo bar」と自動入力されるようになります。
ちなみに GROUP の箇所は自分用の識別子である為、何を指定しても良いようでした。

ケルトンを編集

今回、erlang 用のスケルトンを作成する為、下記のようにしてみました。

-module(<+FILE NAME ROOT+>).
-author('cooldaemon@gmail.com').

-behaviour(supervisor).

%% External exports
-export([start_link/0, stop/0]).

%% supervisor callbacks
-export([init/1]).

%% External exports
start_link() ->
  supervisor:start_link({local, ?MODULE}, ?MODULE, []).

stop() ->
  case whereis(?MODULE) of
    Pid when is_pid(Pid) ->
      exit(Pid, normal),
      ok;
    _Other ->
      not_started
  end.

%% supervisor callbacks
init([]) ->
  {ok, {
    {one_for_one, 2000, 1},
    [
      <+CURSOR+>{Id, {Module, Function, Args}, permanent, infinity, supervisor, []},
      {Id, {Module, Function, Args}, permanent, brutal_kill, worker, []}
    ]
  }}.

「<+FILE NAME ROOT+>」は、ディレクトリと拡張子を除いたファイル名に置換されるタグで、「<+CURSOR+>」は、ファイルを新規に開いた際のカーソル位置となるタグです。

んー、便利だ!