使用Emacs作为IDE

use*_*545 166 ide emacs development-environment slime

目前,当我使用C或C++编码时,我使用Emacs的工作流涉及三个窗口.右边最大的包含我正在使用的文件.左边分为两个,底部是我用来输入编译或make命令的shell,top通常是我在工作时要咨询的某种文档或README文件.现在我知道有一些非常专业的Emacs用户,我很好奇其他Emacs在功能上是有用的,如果打算将它用作一个完整的IDE.具体来说,大多数IDE通常以某种形式实现这些功能:

  • 源代码编辑器
  • 编译器
  • 调试
  • 文档查找
  • 版本控制
  • OO功能,如类查找和对象检查器

对于其中的一些,很明显Emacs如何适应这些功能,但其余的呢?此外,如果必须关注特定语言,我会说它应该是C++.

编辑:一位用户指出,当我说'剩下的'时,我应该更具体一些.大多数情况下,我对有效的版本控制以及文档查找感到好奇.例如,在SLIME中,在Lisp函数上进行快速hyperspec查找相当容易.有没有快速查找C++ STL文档中的内容(例如,如果我忘记了hash_map的确切语法)?

Ben*_*ins 75

你必须具体说明"其余"是什么意思.除了对象检查器(我知道)之外,emacs很容易完成上述所有操作:

  • 编辑(显而易见)
  • 编译器 - 只需运行M-x compile并输入编译命令.从那以后,您可以M-x compile使用默认值.Emacs将捕获C/C++编译器错误(最适合GCC)并帮助您导航到有警告或错误的行.
  • 调试 - 类似地,当你想调试时,键入M-x gdb它将创建一个带有特殊绑定的gdb缓冲区
  • 文档查找 - emacs具有出色的CScope绑定代码导航功能.对于其他文档:Emacs还有一个手册页阅读器,而对于其他一切,还有网页和书籍.
  • 版本控制 - 各种VCS后端有很多Emacs绑定(CVS,SCCS,RCS,SVN,GIT都会浮现在脑海中)

编辑:我意识到我关于文档查找的答案真的与代码导航有关.这里有一些更重要的信息:

谷歌搜索无疑会揭示更多的例子.

正如第二个链接所示,即使不支持开箱即用,也可以在其他文档中查找功能(以及其他内容).

  • 不应该是"Mx编译"? (3认同)

bau*_*ack 29

我必须推荐Emacs Code Browser作为emacs的更"传统"的IDE风格环境.

编辑:我现在也推荐Magit高度优于emacs中的标准VCS界面.


Bry*_*ley 19

你没有在shell窗口中运行make命令,你试过Mx编译吗?它将运行make命令,显示错误,并且在许多情况下,如果输出包含文件名和行号,则很容易跳转到导致错误的代码行.

如果您是IDE的粉丝,您可能还想查看emacs的speedbar包(Mx speedbar).而且,如果您还没有,请了解如何使用标签表来导航代码.


jus*_*nhj 15

曾经发现过的emacs角落可以让您以前所未有的方式提高工作效率.正如其他人所提到的,使用标签是缩放源代码的一种极好而快速的方法,使用M- /(dabbrev-expand)通常可以完成您在完成变量名称时的预期效果.

使用发生对于获得缓冲区中的正则表达式的所有出现的缓冲区是有用的.这在重构代码和查找代码片段或使用变量时非常方便,或者如果您在源文件中使用TODO标记并且想要全部访问它们.

flush-lines,sort-numeric-fields,replace-regexp和rectangle函数对于从某个工具获取转储并将其转换为有用的数据(如elisp程序或逗号分隔的电子表格)非常有用.

我写了一个关于IDE的页面,就像你可以用emacs做的那样

http://justinsboringpage.blogspot.com/2007/09/11-visual-studio-tricks-in-emacs.html

学习elisp是另一种很好的方式来回答你自己除了典型的IDE之外还能做些什么.

例如,我发表了关于编写Perforce辅助函数(如blame)的博客(编写自己的函数意味着您可以使其行为完全符合您的要求)......

http://justinsboringpage.blogspot.com/2009/01/who-changed-line-your-working-on-last.html

我还编写了动态创建函数注释的代码,它与我正在使用的编码标准相匹配.

我的elisp代码都没有特别好,并且大多数代码已经存在于库中,但是能够让emacs做一些工作日中出现的自定义内容非常有用.


Ale*_*Ott 10

您可以在我的网站上找到emacs和版本控制集成的详细说明.我还在撰写关于将Emacs用作许多语言的开发环境的文章 - C/C++,Java,Perl,Lisp/Scheme,Erlang等...


dka*_*dal 8

对于版本控制,您可以使用几种内容,具体取决于您使用的版本控制系统.但是其中一些功能对所有功能都是通用的.

vc.el是在文件级别处理版本控制的内置方法.它具有大多数版本控制系统的后端.例如,Subversion后端附带了Emacs,还有其他来源提供的git后端和其他后端.

最有用的命令是Cx vv(vc-next-action),它为您正在访问的文件执行适当的下一步操作.这可能意味着从存储库更新或提交更改,如果您使用的是需要它的系统(如RCS),vc.el还会重新绑定Cx Cq以检入和检出文件.

其他非常有用的命令是Cx vlCx v =,它们显示您正在使用的文件的日志和当前差异.

但是为了实现真正的生产力,除了简单的事情之外,你应该避免使用单文件vc.el命令.有几个软件包可以为您提供整个树状态的概述,并为您提供更多功能,更不用说能够创建跨越多个文件的连贯提交.

其中大多数受到严重影响或基于CVS的原始pcl-cvs/pcvs.甚至还有两个与subversion,psvn.eldsvn.el一起提供.有git包等.


Muh*_*Can 8

好的,这里的每个人都提供了完美的提示,使emacs成为一个很棒的IDE.

但是任何人都应该记住,当你定制你的emacs有很多扩展(特别是那些用于动态类型检查,功能定义查找等)你的emacs将加载非常非常慢的编辑器.

要解决这个问题,我强烈建议您使用emacs server mode.

它使用起来非常简单,无需自定义init文件.您只需要以守护进程模式启动emacs;

emacs --daemon
Run Code Online (Sandbox Code Playgroud)

这将创建一个emacs服务器,然后您可以从终端或gui连接它.我还建议创建一些别名,以便于调用.

alias ec="emacsclient -t"
alias ecc="emacsclient -c &"
# some people also prefer this but no need to fight here;
alias vi="emacsclient -t"
Run Code Online (Sandbox Code Playgroud)

这样,emacs的启动速度甚至比gedit还要快.

这里有一个可能的问题,如果你从临时用户运行emacs守护进程,你可能无法连接emacs服务器root.

因此,如果您需要打开具有root访问权限的文件; 使用tramp来代替.只需使用普通用户运行emacs客户端并打开这样的文件;

C-x C-f
/sudo:root@localhost/some/file/that/has/root/access/permissions
# on some linux distro it might be `/su:root@...` 
Run Code Online (Sandbox Code Playgroud)

这让我的生活变得更轻松,我可以用这种方式在几毫秒内打开我沉重的自定义python IDE.您可能还想将emacs --daemon添加到系统启动,或者为emacsclient创建桌面文件.随你(由你决定.

有关emacs守护程序和emacs客户端的更多信息,请访问wiki;

http://www.emacswiki.org/emacs/EmacsAsDaemon

http://www.emacswiki.org/emacs/EmacsClient

  • 我知道这是五年后的事了,但我当时也在使用它:如果你设置 `EDITOR="emacsclient -t" VISUAL="emacsclient -c"` 你可以使用 `sudo -e 进行基于 sudo 的编辑` 或 `sudoedit`,有时比使用 TRAMP 更好(通常出于审计原因)。您还可以使用 `--alternate-editor= ` (*需要*末尾的空格)调用 emacsclient,如果守护进程未运行,它将启动守护进程,这样就无需将守护进程置于系统启动中(如果您'当您在每次启动时*第一次*运行编辑器时,我们愿意等待它。 (2认同)

HD.*_*HD. 7

我同意你应该学习Mx编译(将那个和Mx next-error绑定到一个短的密钥序列).

了解版本控制的绑定(例如vc-diff,vc-next-action等)

查看寄存器.您不仅可以记住缓冲区中的位置,还可以记住整个窗口配置(Cx rw - window-configuration-to-register).


Cho*_*pmo 6

用于探索Emacs的VC功能的起点(可能是非显而易见的)是Mx vc-next-action.

它在当前文件上执行"下一个逻辑版本控制操作",具体取决于文件的状态和VC后端.因此,如果文件不受版本控制,则会对其进行注册,如果文件已更改,则会提交更改等.

它需要一点时间习惯,但我发现它非常有用.

默认的键绑定是Cx vv


sid*_*rya 6

我知道这是一篇非常古老的帖子。但这个问题对于 emacs 初学者来说是有效的。

IMO 使用 emacs 作为 ide 的最佳方法是在 emacs 中使用语言服务器协议。您可以在链接网站中找到有关语言服务器的所有信息。

为了快速设置,我建议您访问此页面eglot。IMO eglot 的工作做得很好。它与公司等自动完成包集成良好。提供查找参考等等。

同样对于调试器,您可能需要针对特定​​语言的特定调试器。您可以在 emacs 中使用 gdb。只需输入M-x gdb.

为了编译代码,最好使用 shell 命令。我正在研究这个项目eproj。需要一段时间才能完成。但它所做的只是将 shell 命令映射到项目类型。并通过 shell 构建您的项目。执行命令的作用相同。我可能需要帮助来完成这个项目。它尚未准备好使用,但如果您了解一点 elisp,则可以浏览代码。

除此之外,最好使用 emacs 编译命令。

对于版本控制,我还没有看到任何其他包可以与Magit的功能相匹配。这是特定于 git 的。另外,对于 git,还有另一个包 git-timemachine,我发现它非常有用。

对象查找和类查找由语言服务器协议提供。

项目树可用于与treemacs类似的 ide 接口。

还有一个名为projectile的项目交互库。

对于自动完成,我发现公司模式非常有用。

真正的 emacs 可以做任何事情。