跳转emacs中的java方法

Posted

技术标签:

【中文标题】跳转emacs中的java方法【英文标题】:Jump through java methods in emacs 【发布时间】:2012-10-19 03:23:19 【问题描述】:

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

Emacs 使用 C-M-a 和 C-M-e 的“通过 defuns 移动”对 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

欢迎任何想法!

【问题讨论】:

可能属于superuser.com 我不同意。这对我来说似乎是一个很好的问题。 “显然在 Java 中,一个 defun 是一个完整的类”——这对我来说听起来像是一个错误,或者可能是实现不足的特性。我认为你应该提交错误报告。 【参考方案1】:

imenu 和 speedbar 与您要查找的内容接近。

否则你可以自己定义。 你可以这样开始:

(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 绑定到你想去的任何键

【讨论】:

哇。史诗正则表达式是史诗!不错。

以上是关于跳转emacs中的java方法的主要内容,如果未能解决你的问题,请参考以下文章

帮我举下在java中页面跳转方法,和他们的用处

IntelliJ IDEA 从接口跳转到 Java 中的实现类

Clojure 中的 Java 输入(读取行)在 Emacs 中无法正确读取

C、C++ 和 JAVA 的 Emacs 中的 Eclipse 样式函数完成?

Emacs开发Java之使用

使用粘贴时如何跳转到emacs中的函数定义?