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

Emacsで Perlのひな形を挿入する

null null

Big Sky :: ファイルタイプ別にテンプレートを選べるsonictemplate-vim書いた


Emacsだと、yasnippetを使えば同様のことができます。Vimでも yasnippet
あるらしいので、それでできないのかなとも思ったんだけど、使い勝手が
違うのかな?


.pmならこれ、.plならこれと一択の場合は auto-insertを使う手もあるので、
その場合はこちらに詳しく記されています。

スクリプト用のスニペット
#name : Perl script template
# --
#!perl
use strict;
use warnings;

$0
モジュール用のスニペット
#name : Perl Package Template
# --
package ${1:`(yas/perl-package-name)`};
use strict;
use warnings;

$0

1;

__END__
ドキュメント付きモジュールスニペット
#name : Perl Package Template with Document
# --
package ${1:`(yas/perl-package-name)`};
use strict;
use warnings;

$0

1;

__END__

=head1 NAME

$1 -

=head1 SYNOPSIS

=head1 DESCRIPTION

$1 is

=head1 AUTHOR

Syohei YOSHIDA E<lt>syohex@gmail.comE<gt>

=head1 COPYRIGHT

Copyright `(format-time-string "%Y")` - Syohei YOSHIDA

=head1 SEE ALSO

=head1 LICENSE

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=cut

yas/perl-package-nameというのは以下のような関数です。

(defun yas/perl-package-name ()
  (let ((file-path (file-name-sans-extension (buffer-file-name))))
    (if (string-match "lib/" file-path)
        (replace-regexp-in-string "/" "::"
                                  (car (last (split-string file-path "/lib/"))))
      (file-name-nondirectory file-path))))

スニペットを共有する場合、オリジナルのユーティリティ関数を使わずに、
すべて埋め込んだ方が良いと思います。elispを普通に埋め込むことができる
のは強力な機能ですね。


上記のファイルを

  • tmpl.script
  • tmpl.package
  • tmpl.package_with_doc

というような感じで yasnippetperl-mode以下に設置すると以下のように
使えます。


'tmpl'と打ち込みトリガーキーを押す(デフォルトは "TAB")をスニペットを選ぶ.


目的のスニペットを選択し、決定.

こんな具合です。

おわりに

yasnippetって Perlぐらいしか使ってなかったんですが、他のモードも見てみると、
いろいろなスニペットが用意されているので、使ってなくてすごく時間をロスして
いたのかなと思いました。(scalaに含まれているものは特に多かった。)
最近は Emacs熱が高いので、この機に便利にできるところはとことん便利にしたい
ですね。