7

メソッドごとに Java ファイルをジャンプしたい。たとえば、どこにでもあるときに、単一のキーボード ショートカットを実行して、メソッドの次の末尾またはメソッドの先頭にジャンプします。

CMa と CMe を使用した Emacs の「defuns による移動」は、C にとって非常に便利で、まさに私が望んでいることを実行します。しかし明らかに Java では、defun はクラス全体です。

defuns による移動: http://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-by-Defuns.html

CMf と CMb に、自分のやりたいことを強制できることがわかりました。それらは、括弧でバランスされた式の上を前後に移動します。問題は、メソッド定義の開き括弧または閉じ括弧のすぐ外側から呼び出されたときに、私が探している機能しか持たないことです。これは非常に制限的です。

括弧のバランスが取れた式: http://www.delorie.com/gnu/docs/emacs/emacs_282.html

どんなアイデアでも大歓迎です!

4

1 に答える 1

5

imenuspeedbarは、探しているものに近いです。

それ以外の場合は、自分で定義できます。次のようなものから始めることができます。

(defvar java-function-regexp
  (concat
   "^[ \t]*"                                   ; leading white space
   "\\(public\\|private\\|protected\\|"        ; some of these 8 keywords
   "abstract\\|final\\|static\\|"
   "synchronized\\|native"
   "\\|[ \t\n\r]\\)*"                          ; or whitespace
   "[a-zA-Z0-9_$]+"                            ; return type
   "[ \t\n\r]*[[]?[]]?"                        ; (could be array)
   "[ \t\n\r]+"                                ; whitespace
   "\\([a-zA-Z0-9_$]+\\)"                      ; the name we want!
   "[ \t\n\r]*"                                ; optional whitespace
   "("                                         ; open the param list
   "\\([ \t\n\r]*"                             ; optional whitespace
   "\\<[a-zA-Z0-9_$]+\\>"                      ; typename
   "[ \t\n\r]*[[]?[]]?"                        ; (could be array)
   "[ \t\n\r]+"                                ; whitespace
   "\\<[a-zA-Z0-9_$]+\\>"                      ; variable name
   "[ \t\n\r]*[[]?[]]?"                        ; (could be array)
   "[ \t\n\r]*,?\\)*"                          ; opt whitespace and comma
   "[ \t\n\r]*"                                ; optional whitespace
   ")"                                         ; end the param list
))

(defun my:next-java-method()
  (interactive)
  (re-search-forward java-function-regexp nil t)
)

(defun my:prev-java-method()
  (interactive)
  (re-search-backward java-function-regexp nil t)
)

次に、移動したい任意のキーにバインドmy:next-java-methodしますmy:prev-java-method

于 2012-10-29T20:57:42.763 に答える