$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

現在選択しているtextをwrapしてyasnippetを貼り付ける

 昨日に引き続きyasnippetの話です。
 
 yasnippet使ってたら選択範囲の周りにyasnippet展開したくなりました。例えばsubtestを現在書かれているコードの周りに囲みたいとかいう時です。
 yasnippetにはyas/selected-textという、選択範囲の文字列を取得するコマンドがあったので、それが使えました。subtestの場合以下のようにします。

# -*- mode: snippet -*-
# key: subtest
# name: subtest
# binding: C-c C-c t
# --
subtest '$1' => sub {
    `yas/selected-text`$0
};

 こうしておけば何も選択されないときはそのままsubtestが貼り付けられて、選択されていた場合はwrapして貼り付けることができます。

 同様にDBIx::QueryLogとかでも便利に使えます。

# -*- mode: snippet -*-
# key: wrap-querylog
# name: DBIx::QueryLog wrap
# --
use DBIx::QueryLog ();
DBIx::QueryLog->begin;
`yas/selected-text`$0
DBIx::QueryLog->end;