@kyanny's blog

My thoughts, my life. Views/opinions are my own.

yasnippet

Emacs を使い始めて何年にもなるが、その間一度か二度しかトライしたことがなかった yasnippet に再び、そしてついに手をだした。

Emacs で JavaScript を書いているとき、なんともいえない書きづらさ、リズムの悪さを感じていた。 CoffeeScript を書き慣れているから括弧が鬱陶しいのだろう、と思っていたのだが、どうもちょっと違うようだ、という気もしていて、長年悶々としていた。

先日ふと、「苦手な言語だからリズムが悪い、のではなく、リズムが悪いから苦手に感じるのではないか?」と逆転の発想をひらめいて、いつもより少し注意深く自分のコーディングを意識してみたら、どうやら無名関数 function() {} を書くときのリズムの悪さが乱れの原因だった。

自分の Emacs は主要なプログラミング言語のメジャーモードでバッファを編集中に、開き括弧を入力すると自動的に閉じ括弧が補完されるようになっている(これが electric-pair-mode によるものだ、ということは今これを書きながら調べて知った)これが js-mode でも有効になっているため、無名関数のコーディングの打鍵は、

f u n c t i o n ( C-f SPC {
f u n c t i o n ( C-e SPC {

のいずれかになっており、無意識に運指しているものの非常に窮屈だった。その窮屈さを「リズムが悪い」と感じていたようだ。

そこで無名関数を自分で全てコーディングするのはやめて、 Emacs に補完させようと考え、 yasnippet 導入に踏み切ったわけだ。タブで展開できる略語を覚える気はハナからなかったので helm-c-yasnippet もインストールしてもっぱらそちら経由で使い始めているが、 RSpec の desc など、ものによっては略語がいい感じにタブを打てるタイミングに合うのでスムーズに使い始められそうだ。

まだほんの使い始めなのでこれから徐々に使いこなしていきたい、というレベルだが、一点だけ、 RSpec の desc は yasnippet 標準のものだと Class の補完(置換)結果が1222222222222222222222壊れてしまうことがあった。自作のもっと単純なスニペットを作ったが、同じ desc というキーワードだとタブでの補完・展開時に選択候補が二つでてきてしまい、その選択がなぜか矢印キーでないとできなくてちょっと嫌だった。 yasnippet 標準のほうのスニペットを無効化する方法がわからなかったので、深く考えずに元からあったスニペットのファイルを削除して乗り切った。


yasnippet にあんまり乗り気でなかったのには、「インテリセンスみたいな賢いものと比べると思想も機能も実用的ではあるが原始的でちょっとダサい」と感じていたのもある。要するに長年の IDE コンプレックスの産物なのだが、去年「ヌーに左手の小指を呪われた運命」だと観念した身なのだから潔くあるべし、と心を入れ替えた。