yasnippet-java-mode (topcoder用)

  • お決まりのfor文をCみたいにマクロ使ってREP(i, n)と短く書きたい
  • javaじゃ無理
  • じゃあもうタイプ量が減ればいいよ
  • yasnippetで展開させればいいんじゃね?
  • ついでによく使いそうなコレクションの宣言もさくっと書けるようにしてみよう


import java.util.*; してること前提です。

導入

yasnippetが必要です。あとemacsも必要です。
Google Code Archive - Long-term storage for Google Code Project Hosting.


ファイルはgithubに置いてあります。
GitHub - k-chop/yasnippet-java-topcoder: yasnippet java-mode for topcoder. These snippets are placed in the public domain.


git cloneして、

git clone git://github.com/whelmaze/yasnippet-java-topcoder.git

java-modeディレクトリ以下をyas/load-directoryに設定したディレクトリにぶち込むと、java-modeでこのスニペットが使えるようになります。
githubのサイト右上にあるDownload Sourceから、zipで入手することもできます。

for文
fori

↓展開

for(int i = [1]; i [2] ; i++) {
    [3]
}

TABキーを押していくと[1]->[2]->[3]の位置に移動するようになってます。
foriのほかにforj, fork, forlを用意してあります。

コレクション
cal  //[c]ollection [a]rray[l]ist の略

↓展開

List<[Type]> [name] = new ArrayList<Type>();

TABキーを押していくと[]で囲んである部分に順番に飛ぶようになってます。
二度目に出てくるTypeの部分は、片方の入力と連動して変更されるので同じ型名を二度書く必要はありません。
展開するキーはコレクションの頭文字なので楽に使えると思います。


他のコレクションも同じように展開できます。

chs => Set<[Type]> [name] = new HashSet<Type>();       // [c] [h]ash[s]et

cll => List<[Type]> [name] = new LinkedList<Type>();   // [c] [l]inked[l]ist

chm => Map<[Key], [Value]> [name] = new HashMap<Key, Value>(); // [c] [h]ash[m]ap

cad => Deque<[Type]> [name] = new ArrayDeque<Type>();  // [c] [a]rray[d]eque

QueueやStackはDequeがあればいらない気がするので入れていません。


List, Setは末尾にそれぞれi, d, l, sをつけると、Type部分にInteger, Double, Long, Stringが入力済みのものを展開します。

cali => List<Integer> [name] = new ArrayList<Integer>(); // [c] [a]rray[l]ist<[i]nteger>

chss => Set<String> [name] = new HashSet<String>();      // [c] [h]ash[s]et<[s]tring>
ついでに
sb   => StringBuilder [name] = new StringBuilder();

sc   => Scanner [name] = new Scanner();

new  => [Type] [name] = new Type();

arr  => [Type][] [name] = new Type[];

2arr => [Type][][] [name] = new Type[][];