質問: ここ数ヶ月Android Studioのお世話になっており、よくできているなと感心しています。これまでEmacsが長かったのですが、Android Studio/IntelliJと同等のことができるほどには使い込んでいません。 Android Studioでは以下の操作をよくしています。これをEmacsで実現できるようなIDEパッケージはありますか? ひとまずJavaが対象ですが、多言語対応でも可です。 1. 検索: ソースツリー内のファイルをファイル名から検索して開く 2. 検索: ソースツリー内のファイルをファイルの内容から検索して開く 3. 検索: メソッドや変数の定義に飛ぶ 4. 検索: メソッドや変数、クラスを使っている行をソースツリー内から検索する 5. リファクタリング: メソッドや変数、クラス名を任意のスコープ内で (メソッド内のみ、クラス内のみなど) 一気に変更する 6. リファクタリング: その他リファクタリング全般 (メソッド切り出しなど) 7. コード編集支援: クラス名やスコープ内の変数などから変数名を自動補完する 8. コード編集支援: カーソルがある行をif文やtry/catch文などで囲う 9. コード編集支援: カーソルがあるメソッドの引数名や型、返り値を表示する 10. コード編集支援: 静的コード解析で見つかった問題を修正する (インポート文を自動挿入するなど) 更新: 範囲が広すぎたため、質問の方向をピボットして、全部を実現できるようなソリューションがないかを問う質問にしました。
回答: > > 1. 検索: ソースツリー内のファイルをファイル名から検索して開く > 2. 検索: ソースツリー内のファイルをファイルの内容から検索して開く > 3. 検索: メソッドや変数の定義に飛ぶ > 4. 検索: メソッドや変数、クラスを使っている行をソースツリー内から検索する > > > helm というパッケージが検索というか絞り込みの操作全般をまかなう定番です。ソースツリー内のファイル検索はさまざまなやり方があると思いますが helm と組み合わせるなら helm-ag がいいと思います。 キー操作については、 helm のインストール作業の一環として自分で好みのキーバインドを定義することになりますので、短くて打ちやすい(覚えやすい)キーバインドを使えます。 > > 5. リファクタリング: メソッドや変数、クラス名を適切なスコープ内で一気に変更する > > > 「適切なスコープ」がよくわかりませんが、リージョンを選択して M-x query-replace でも(原始的ですが)一括置換は可能です。が、 > > 6. リファクタリング: その他リファクタリング全般 (メソッド切り出しなど) > > > こういうのは Emacs Lisp パッケージで実現するのは難しいのではないかと思います(探せばあるのかもしれませんが...) > > 7. コード編集支援: クラス名やスコープ内の変数などから変数名を自動補完する > > > これは限定的ではありますが標準機能の動的略語展開 (dabbrev-expand) で補完できます。変数名を途中まで打って M-/ を押してみてください。 > > 8. コード編集支援: カーソルがある行をif文やtry/catch文などで囲う > > > 私は使ったことがないのですが yasnippet などを駆使すれば似たようなことが実現できるかもしれません。 > > 9. コード編集支援: カーソルがあるメソッドの引数名や型、返り値を表示する > 10. コード編集支援: 静的コード解析で見つかった問題を修正する (インポート文を自動挿入するなど) > > > 5, 6 のリファクタリングと同様、静的なコード解析まで行う高機能な Emacs Lisp は(探せばあるのかもしれませんが)思い当たるものがありません。過去に Ruby のコード解析を行う RSense というツールを使ったことがありますが、 RSense 自体は Java で書かれていました(付属の Emacs Lisp パッケージのインタフェースを通じて Emacs から利用する) 私は Eclipse や Android Studio/IntelliJ などの IDE に習熟していないので比較したわけではないですが、静的コード解析や自動リファクタリングのような機能は Emacs のカスタマイズをするよりも素直に IDE の機能を利用したほうが良いと思います。