zshでjava補完速くする
わりといっちゃってるシェルとして有名なzsh先生、javaコマンド打ったりするときも便利です。
Java初学者の人が
% javac HelloWorld.java % java HelloWorld.class Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class
とかやっちゃって困ってる場面はよく目にします。でもzshなら大丈夫。
% java H(TAB入力)
で
% java HelloWorld
と補完してくれます。さらには
% java -classpath /usr/java/apache-ant-1.7.0/lib/ant.jar (TAB入力)
とすることで
% java -classpath /usr/java/apache-ant-1.7.0/lib/ant.jar org.apache.tools.
まで補完、もう一度TABを押すと大量の候補リストを表示してくれたりします。なんだかやりすぎ感がして楽しいですね。
しかし俺の環境で、最近やたらとこの補完が遅くなってておかしいなあと思ってました。でzshのjavaコマンドの補完定義ファイル_javaと、その中で呼ばれてる_java_class読んで気付いたんですけど、こいつら環境変数CLASSPATHの中全部探って補完してくれるんですね。だからCLASSPATHが多ければその分時間がかかります。CLASSPATHが少なければOKというわけでもない。CLASSPATHにディレクトリが追加されてると、再帰的に下のディレクトリまで読みにいきます。
それで俺は.zshrcの書き方とかものすごくいいかげんなもんで、CLASSPATHが同じパスをいくつも含んでたり、変な位置を追加してたりしたもんだから、補完にものすごく時間がかかっていたわけです。適当に削ったらとても速くなってなんとも快適に。ただまあ、例えばルートディレクトリで
% java (TAB入力)
とかするとしばらく固まったりするわけですけど。C-cで止めれます。