一个人怎么能';进入定义';在Java和JavaScript中使用Emacs?
我正在考虑重新使用Emacs作为我的主要编辑器。这里的诀窍是,我从来没有真正用Emacs做过大型项目工作。到目前为止,我使用的是Visual Studio,但在我最新的基于Node(传输一些CoffeeScript——我无法更改的内容)和Java的项目中,我想进行完全转换。目前我正在使用IntelliJ/WebStorm,但如果我有一些在这些编辑器中找到的功能,我会愿意将其全部出售。令人惊讶的是,在WebStorm中,CoffeeScript有一个转到用法和转到声明功能(我认为纯JavaScript也是如此)一个人怎么能';进入定义';在Java和JavaScript中使用Emacs?,java,javascript,emacs,intellij-idea,Java,Javascript,Emacs,Intellij Idea,我正在考虑重新使用Emacs作为我的主要编辑器。这里的诀窍是,我从来没有真正用Emacs做过大型项目工作。到目前为止,我使用的是Visual Studio,但在我最新的基于Node(传输一些CoffeeScript——我无法更改的内容)和Java的项目中,我想进行完全转换。目前我正在使用IntelliJ/WebStorm,但如果我有一些在这些编辑器中找到的功能,我会愿意将其全部出售。令人惊讶的是,在WebStorm中,CoffeeScript有一个转到用法和转到声明功能(我认为纯JavaScri
Emacs的老手们是如何以类似的方式遍历代码的,也就是说,他们通常是如何进入使用状态还是进入声明状态?Java可能与JavaScript不同,但我想知道使用Emacs设置它的区别和可能的麻烦。我不是Emacs的老手,但我确实对Emacs着迷 对于Java:
- 语义模式在实践中似乎不起作用,但理论上可以跳转到定义
- 邪恶模式(有点过分了…)可以跳转到定义,与邪恶转到定义一样好
- 这非常有效,如果可能的话,我甚至建议将其移植到一个非邪恶的环境中
- imenu(使用正则表达式引擎查找定义)
- 已被用作语义ia快速跳转的后备方案
- 似乎对变量不起作用
- 语义模式根本不起作用
- 邪恶的goto定义(使用正则表达式引擎)一如既往地工作得很好
- imenu(使用正则表达式引擎)
- 似乎对变量不起作用
- 是一组(外来的)语义分析器,它似乎与Emacs集成得很好
- 对于变量,在Java中使用语义ia表示跳跃,在JS中使用tern表示跳跃
- 对于函数,请使用imenu。它在Java和JS上都能很好地工作
(defun ido-goto-symbol (&optional symbol-list)
"refresh imenu and jump to a place in the buffer using ido."
(interactive)
(unless (featurep 'imenu)
(require 'imenu nil t))
(cond
((not symbol-list)
(let ((ido-mode ido-mode)
(ido-enable-flex-matching
(if (boundp 'ido-enable-flex-matching)
ido-enable-flex-matching t))
name-and-pos symbol-names position)
(unless ido-mode
(ido-mode 1)
(setq ido-enable-flex-matching t))
(while (progn
(imenu--cleanup)
(setq imenu--index-alist nil)
(ido-goto-symbol (imenu--make-index-alist))
(setq selected-symbol
(ido-completing-read "symbol? " symbol-names))
(string= (first imenu--rescan-item) selected-symbol)))
(unless (and (boundp 'mark-active) mark-active)
(push-mark nil t nil))
(setq position (rest (assoc selected-symbol name-and-pos)))
(cond
((overlayp position)
(goto-char (overlay-start position)))
(t
(goto-char position)))))
((listp symbol-list)
(dolist (symbol symbol-list)
(let (name position)
(cond
((and (listp symbol) (imenu--subalist-p symbol))
(ido-goto-symbol symbol))
((listp symbol)
(setq name (first symbol))
(setq position (rest symbol)))
((stringp symbol)
(setq name symbol)
(setq position
(get-text-property 1 'org-imenu-marker symbol))))
(unless (or (null position) (null name)
(string= (first imenu--rescan-item) name))
(add-to-list 'symbol-names name)
(add-to-list 'name-and-pos (cons name position))))))))
(global-set-key (kbd "m-=") 'ido-goto-symbol)
我在我的项目文件夹上运行了大量的CTAG,选项为
-e
。加载标记文件后,可以使用M-.
、M-、
和M-*
对其进行导航。该软件包非常有助于在多个同名方法中进行选择
查找资料的其他有用工具有helm
,特别是helmforfiles
和helmfindfiles
(可以点击标签文件缩小文件和关键字搜索范围)和rgrep
。我读的是一个很好的搜索和替换,但我还没有机会玩它
当然,在你掌握窍门之前,它比IntelliJ更容易操作。关于切换,有一点是,你仍然需要一个合适的IDE来调试你的代码,因为我还没有找到解决方案。使用
你可以使用C-C-v C-y
跳到某个点上。这适用于查找变量定义和查找类的源代码(只要下载了源jar)。当然,malabar模式取决于Maven 对于Java,我通常在使用emacs时使用它。这非常有趣——我有点喜欢emacs,希望有更多关于这方面的信息。谢谢!你能解释一下这其中的“邪恶”部分吗?为什么它是“邪恶的”?这就是你通常所指的吗()在思考了一会儿之后,“邪恶”部分只是在“转到”方面发挥作用(或者我遗漏了什么吗?是一个可以模拟Vim的gd
或“Goto Gefinition”命令的Vim仿真层(evil commands.el的第2326行)不幸的是,如果你使用VIM仿真,你将启用VIM仿真。它非常好,而且因为我喜欢VIM键绑定,所以我很高兴地使用它。然而,许多Emacs用户考虑<代码>邪恶<代码>:与敌人进行可怕的妥协:),也可以使用<代码>邪恶GOTO定义<代码>无邪恶。(只是不要启用邪恶模式,你应该会没事的),我刚刚测试了它。但是你仍然有一个庞大的库,几乎什么都没有做。如果你没问题,那么你有一个解决方案!昨天我就想知道了……tern
for JS。