我想通过方法跳过我的java文件,例如当我找到任何地方时,只需一个键盘快捷键即可跳转到方法的下一端或方法的开头。
的Emacs' "通过defuns"使用C-M-a和C-M-e对C非常有用,并且完全符合我的要求。但显然在Java中,defun是一个全班。
通过defuns移动: http://www.gnu.org/software/emacs/manual/html_node/emacs/Moving-by-Defuns.html
我发现我可以强迫C-M-f和C-M-b做我想做的事。它们在任何括号平衡的表达式上前后移动。问题是,当他们从方法定义的开头或右边括号外调用时,他们只具有我所寻找的功能,这是非常有限的。
带平衡括号的表达式: http://www.delorie.com/gnu/docs/emacs/emacs_282.html
欢迎任何想法!
答案 0 :(得分:5)
否则你可以自己定义它。 你可以从这样的事情开始:
(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
绑定到您想要转到