7

我想按方法跳过我的java 文件,例如当我找到我的任何地方时,执行单个键盘快捷键以跳转到方法的下一个结尾或方法的开头。

Emacs 使用 CMa 和 CMe 的“通过 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-methodmy:prev-java-method你想去的任何键

于 2012-10-29T20:57:42.763 回答