既に似たのはあると思うので車輪の再発明臭いけど、僕の好みの奴は見た事無かったので自分で書いた。
欲しかった要件としては
- 同じファイルタイプだけど、使いたい雛形が数パターンある
- 初期カーソル位置とか欲しい
- Perlで「package Foo;」とか埋めてくれたら幸せ
- Go言語でライブラリ書くときとmain書くときで雛形違うよね
mattn/sonictemplate-vim - GitHubこれを使って
template chooser for vim
https://github.com/mattn/sonictemplate-vim
# vim foo.pl
と新しいPerlスクリプトファイルを開き
:Template <TAB>
すると
みたいに何個か選べる様になる。
script
を選ぶと
use strict;
use warnings;
use utf8;
|
|
はカーソルの位置こんなソースが出て
# vim lib/Foo/Bar.pm
の様にPerlのパッケージを開きpackage
を選択すると
package Foo::Bar;
use strict;
use warnings;
use utf8;
|
1
こんな感じになる。なお、どちらも|
の位置がカーソル位置になる。
テンプレートファイルはtemplate
フォルダに、名前.ファイルタイプ
の形式で格納されていて
{{_name_}}
が拡張子なしのファイル名、{{_cursor_}}
がカーソル位置、{{_expr_:XXX}}
でXXX
の位置に好きな式が書ける様になっている。例えばPerlのパッケージであれば、以下の様にバッファファイル名
/path/to/module/lib/Foo/Bar.pm
からパッケージ名Foo::Bar
を作り出している。
package {{_expr_:substitute(substitute(substitute(expand('%'), '.*lib[\\/]', '', 'g'), '[\\/]', '::', 'g'), '\.pm$', '', 'g')}};
use strict;
use warnings;
use utf8;
{{_cursor_}}
1
いまの所
C言語のmainソース
#include <stdio.h>
int
main(int argc, char* argv[]) {
{{_cursor_}}
return 0;
}
C++のmainソース
#include <iostream>
#include <string>
int
main(int argc, char* argv[]) {
{{_cursor_}}
return 0;
}
Go言語のmainソース
package main
func main() {
{{_cursor_}}
}
Go言語のパッケージソース
package {{_name_}}
{{_cursor_}}
Perlのパッケージソース
package {{_expr_:substitute(substitute(substitute(expand('%'), '.*lib[\\/]', '', 'g'), '[\\/]', '::', 'g'), '\.pm$', '', 'g')}};
use strict;
use warnings;
use utf8;
{{_cursor_}}
1
Perlのスクリプトソース
use strict;
use warnings;
use utf8;
{{_cursor_}}
Perlのテストスクリプトソース
use strict;
use warnings;
use utf8;
use Test::More;
{{_cursor_}}
おまけでREADME.mkd
{{_expr_:expand("%:p:h:t")}}
{{_expr_:repeat("=", len(expand("%:p:h:t")))}}
Usage:
------
{{_cursor_}}
Requirements:
-------------
Install:
--------
License:
--------
Author:
-------
既にファイルに何かが入力されている時には適用出来ない様になっています。なお、雛形を募集中なのでこれも入れて欲しい!ってのがあったらgithub上でforkしてpullリクエスト送って下さい。