Masteries

技術的なことや仕事に関することを書いていきます.

VimにおけるPerl関連のスニペットを晒してみる 〜2017年版〜

この記事は, 「Perl Advent Calendar 2017」の23日目の記事です.

qiita.com

昨日は, @magnolia_k_さんの「ビルドツールの裏側にいるMakefileを覗いてみる 」でした.

qiita.com

VimにおけるPerl関連のスニペットを晒してみる

あと30分で12月24日ですが, まだ23日の記事が開いてそうだったので, 折角なので小ネタで埋めようと思います. 大きめのネタにしなかったのは, 24日のPerl Advent Calendarも担当しているからです.

...さて, 去年このような記事を書きました:

papix.hatenablog.com

日頃, Perlを書く時は(というか何かしらコードを書く時は)Vimでコーディングをしていますが, その時に使っているスニペットを紹介した記事です. この記事では, あれから1年以上が経過した, 今現在のVimにおけるPerl関連のスニペットをご紹介します.

snippet u
    use strict;
    use warnings;
    use utf8;

    ${0}

snippet env
    #!/usr/bin/env perl
    use strict;
    use warnings;
    use utf8;

    ${0}

snippet pkg
    package `expand('%:p:s?.*lib/??:r:gs?/?::?')`;
    use strict;
    use warnings;
    use utf8;

    ${0}

    1;

snippet dw
    use DDP { deparse => 1, use_prototypes => 0 };
    DDP::p ${0}

snippet slurp
    open my $fh, '<', ${0} or die "failed to open file: $!";
    my $content = do { local $/; <$fh> };

...だいぶシンプルになりました. 数ヶ月前にvimrcの大掃除をしたので, その時に余り使わないスニペットは消してしまった, というのもあります.

  • スクリプトを書く時はuないしはenvuse strictuse warningsなどを一括で挿入
  • ライブラリを書く時は, pkguse strict, use warningsなどに加えて, packageも一括で挿入
  • Printデバッグをする時は, dwでData::Printer(DDP)を挿入
  • Path::Tinyなどを使わずにファイルを読み込みたいときは, slurpでファイルを一気に読み込んで, 変数に代入するコードを挿入

...という感じに使っています.

SirVer/ultisnips

pkgのスニペットについては, SirVer/ultisnipsを使っています.

github.com

このプラグインを使って, 上記のようなスニペットにしておけば, 例えばlib/Foo/Barというディレクトリで, 新たにBaz.pmを作り, そこでpkgのスニペットを展開すると, このようになります.

package Foo::Bar::Baz;
use strict;
use warnings;
use utf8;



1;

現在のパスから, packageの部分をいい感じに補完してくれて, 非常に便利です(ちなみにこの設定は id:masawada さんのvimrcから拝借したものです, ありがとうございます).

まとめ

Vimを使っている時によく使っているPerl関連のスニペットと, そこで利用しているSirVer/ultisnipsを紹介しました. 他にも「これがあると捗るよ!」といった, 便利なスニペットがあれば, 是非ブログなどで紹介してもらえると嬉しいです!