Sublime Text 3のスニペットが便利

この間から、CodeEval をチョコチョコとやっていて、いつのまにやら日本国内でのランクが5になっていたよ。ま、人数が少ないようだけど。
で、たまに Ruby を使うけどたいていは Python でコードを書いている。そのコードなんだけど、プログラムの要求条件がファイルから入力して1行ずつ処理する、というのがほとんどだ。ということは毎回同じコードを書くことになるわけだけど、ここで Sublime Text のスニペットを使うと便利なので、今日はその作り方のメモ。

メニューから [ツール] → [スニペット追加] を選ぶと、次のような雛形が表示される。これを編集して、保存すればいいわけだ。

<![CDATA[
  Hello, ${1:this} is a ${2:snippet}.
]]>
<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
<!-- <tabTrigger>hello</tabTrigger> -->
<!-- Optional: Set a scope to limit where the snippet will trigger -->
<!-- <scope>source.python</scope> -->

で、どこをどう編集すればいいのかというと、まずは CDATA の中身(Hello,~となっているところ)。ここが実際に貼り付けられるコード片になる。${1:this} とか ${2:snippet} となっているところは一種の変数のようなもので、貼り付けたあと続けて書き換えられるようにカーソルが移動する。もちろんなくてもいい。${0} と書いておくと貼り付けた後そこにカーソルが移動する。
<tabTrigger> の中はスニペットを呼び出すショートカットのようなもので、これを入力してタブキーを押すとスニペットが貼り付けられる。
<scope> はどんな状況で有効になるか、らしい。source.python とあるのは Python のソースコードを書いているときに有効になる。

結局、こういうのを書いた。

<![CDATA[
import sys

test_cases = open(sys.argv[1], 'r')<br /]]> for test in test_cases:
${0}

test_cases.close()

]]>
<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
codeeval-python2
<!-- Optional: Set a scope to limit where the snippet will trigger -->
source.python

これを、C:\Users\takatoh\AppData\Roaming\Sublime Text 3\Packages\User フォルダの下に、codeeval-python2.sublime-snippet という名前で保存する。Sublime Text は .sublime-snippet という(長い)拡張子のファイルをスニペットと認識するようだ。フォルダは上記のフォルダ直下でなくてもいいみたいなので、Sunippets というフォルダを作ってその中に保存した。

さあ、準備は完了したので使ってみよう。Sublime Text を立ち上げて新規ファイルを開く。何も書く前に test.py とでも名前をつけて保存する。これで Python を編集するモードになって、上のスニペットが使えるようになったはずだ。
codeeval-python2 とタイプしてタブキーを押すとスニペットが貼り付けられるはず・・・だけど c をタイプした時点で候補に出てきた。これは便利。