10 ms·
I've never used emacs- currently using XCode to do C++ development. While I find the demonstrations interesting, what would emacs buy me as a C++ developer?
by martin1975 12y ago
I've never used emacs- currently using XCode to do C++ development. While I find the demonstrations interesting, what would emacs buy me as a C++ developer?
- michaelsbradley 12y agoEmacs is not only an editor, but a "computing environment" that can be readily customized and extended using the Emacs Lisp (elisp) language. In fact, much of Emacs itself is built with elisp. Some developers find that kind of flexibility in their tooling to be highly compelling, others not so much. I'm not a C++ programmer, but I turned up the following guide with a Google search, which might you might find interesting: C/C++ Development Environment for Emacs http://tuhdo.github.io/c-ide.html http://tuhdo.github.io/c-ide.html
- derengel 12y agohttp://tuhdo.github.io/c-ide.html http://tuhdo.github.io/c-ide.html
- myg204 12y agoOn the good side, once you are used to the keys, the text editing part is pretty efficient. Also, you have access to a lot of the other modes once you want to step out of the C++ tasks, to look at other files (makefiles, log files), keeping notes with org-mode, opening ftp windows, pretty-printing,.... Plus there's less behind the scene magic than in IDEs and you have access to everything to see where something breaks. It's not a black box the same way an IDE is. On the bad side, you'll have to spend time tweaking packages and so on to get IDE-similar goodies like autocomplete. I can't remember if there's a similar thing as a background compilation that highlight errors as you type. But the thing with emacs is that if you wonder about a plugin, there'a good chance it exists already.
- to3m 12y agoMaybe not much. When working with C++ - at least in my experience - you get more use out of code navigation and code completion (two things that emacs supports rather averagely, even after customization) than you do out of text editing functionality (for which emacs is excellent).
- tptacek 12y agoI don't know that I agree with this. I'm rewriting for the fourth time a blog post I wrote on auditing C/C++ code using Emacs. The combination of Helm, cscope/ascope, hi-lock, ectags, Projectile, and incremental recursive grep is pretty hard to beat. I use unobtrusive dabbrev-style completion --- I don't want popup menus with completion possibilities drawn from documentation, because Dash.app does a better job of that and is shared by all applications. I think Emacs does an at least adequate job at all the core functions of Xcode, but does some things Xcode can't do at all. (It's been a few years since I've written more than a couple thousands lines in Xcode, though.)
- to3m 12y agoDon't worry, I'm not saying Xcode isn't awful. I've just found that code navigation saves me more time than having a fancy text editor does. And even after putting some effort in, the results with emacs just aren't as good (particularly compared to effort expended) as what you get from Xcode and Visual Studio. Which is a shame, because Xcode's text editor is awful (or did I mention that already??), and Visual Studio's is crashingly average. I'd much rather use emacs. (I use company-mode, with the clang backend, and it's OK. For code navigation, currently nothing, but rtags (https://github.com/Andersbakken/rtags https://github.com/Andersbakken/rtags) is on my todo list. The README is worth a skim - it has a cute way of grabbing the list of files you're using.)
- taeric 12y agoInstead of cscope/ctages, have you tried GNU GLOBAL? I've taken my first steps with it and the ggtags mode. So far, I am finding it to be drastically better than ctags. Have I just never configured ctags correctly?
- fourier 12y agoXCode is amazing for C/C++ development, but Emacs is just better as a text editor. The rtags project [1] is under active development right now to have more IDE-like features in Emacs for C/C++ developers. There are some other projects, for example clang-complete-async [2] [1] https://github.com/Andersbakken/rtags https://github.com/Andersbakken/rtags [2] https://github.com/Golevka/emacs-clang-complete-async https://github.com/Golevka/emacs-clang-complete-async
- tuhdo 12y agoHere are some nice features that Emacs provide: - Powerful automatic indentation: https://raw.githubusercontent.com/Bruce-Connor/aggressive-in... https://raw.githubusercontent.com/Bruce-Connor/aggressive-in.... It does not only indent the current line, but the whole Semantic context around your cursor. - Live grep: http://tuhdo.github.io/static/live_grep.gif http://tuhdo.github.io/static/live_grep.gif - Access to a list of project with a few key strokes: http://tuhdo.github.io/static/helm-projectile/helm-projectil.. http://tuhdo.github.io/static/helm-projectile/helm-projectil.... - Quickly access any file in your project, as large as Linux kernel, instantly, regardless of where you are in the project, and within a few keystrokes: http://tuhdo.github.io/static/helm-projectile/helm-projectil... http://tuhdo.github.io/static/helm-projectile/helm-projectil.... - Jump to any file depends on context, even if the file path is in a plain ASCII text file: http://tuhdo.github.io/static/helm-projectile/helm-projectil.. http://tuhdo.github.io/static/helm-projectile/helm-projectil.... - Copy files from anywhere to anywhere: http://tuhdo.github.io/static/helm-projectile/helm-projectil... http://tuhdo.github.io/static/helm-projectile/helm-projectil.... - Delete files anywhere; files are always at your finger tip to do whatever with them: http://tuhdo.github.io/static/helm-projectile/helm-projectil... http://tuhdo.github.io/static/helm-projectile/helm-projectil.... - Switch between other files with same names but different extensions: http://tuhdo.github.io/static/helm-projectile/helm-projectil... http://tuhdo.github.io/static/helm-projectile/helm-projectil.... Work not only for C/C++ but other languages, and is customizable. You don't have to configure anything, like adding include paths for the command to search. Everything is automatic. Just use it as it is. - Jump to tag definition, from Emacs's own parser or external parser like GNU Global: http://tuhdo.github.io/static/c-ide/helm-gtags-jump-dwim.gif http://tuhdo.github.io/static/c-ide/helm-gtags-jump-dwim.gif - Jump to any definition from a list of definitions in source tree, even for Linux kernel: http://tuhdo.github.io/static/c-ide/helm-gtags-select.gif http://tuhdo.github.io/static/c-ide/helm-gtags-select.gif - Jump up to parent: http://tuhdo.github.io/static/c-ide/senator-go-to-up-referen... http://tuhdo.github.io/static/c-ide/senator-go-to-up-referen.... - Do you like outline tree?: http://tuhdo.github.io/static/c-ide/sr-speedbar.gif http://tuhdo.github.io/static/c-ide/sr-speedbar.gif - Interactive outline tree: http://tuhdo.github.io/static/c-ide/helm-semantic-or-imenu-w.. http://tuhdo.github.io/static/c-ide/helm-semantic-or-imenu-w.... - Easily move back and forth using the interactive outline tree: http://tuhdo.github.io/static/part3/helm-semantic-or-imenu-2.. http://tuhdo.github.io/static/part3/helm-semantic-or-imenu-2.... - References retrieved from its Emacs internal parser: http://tuhdo.github.io/static/c-ide/semantic-symref.gif http://tuhdo.github.io/static/c-ide/semantic-symref.gif. - Beautiful compile output: http://tuhdo.github.io/static/c-ide/compilation-compile.gif http://tuhdo.github.io/static/c-ide/compilation-compile.gif - Frontend support for GDB: http://tuhdo.github.io/static/c-ide/gdb-many-windows.gif http://tuhdo.github.io/static/c-ide/gdb-many-windows.gif - Code completion: http://tuhdo.github.io/static/c-ide/semantic-boost-demo.gif http://tuhdo.github.io/static/c-ide/semantic-boost-demo.gif. - Open man page for symbol at cursor: http://tuhdo.github.io/static/part3/helm-man-woman.gif http://tuhdo.github.io/static/part3/helm-man-woman.gif. - Emacs open 39MB C file: http://tuhdo.github.io/static/performance.gif http://tuhdo.github.io/static/performance.gif - Emac opens multi-gigabtye file: http://www.emacswiki.org/VLF http://www.emacswiki.org/VLF - Emacs is a bit torrent client: https://bitbucket.org/ukaszg/aria2-mode/ https://bitbucket.org/ukaszg/aria2-mode/ You can see more demos in: + Emacs Mini Manual: http://tuhdo.github.io/emacs-tutor.html http://tuhdo.github.io/emacs-tutor.html + C/C++ Development Environment for Emacs: http://tuhdo.github.io/c-ide.html http://tuhdo.github.io/c-ide.html + A Package in a league of its own: Helm: http://tuhdo.github.io/helm-intro.html http://tuhdo.github.io/helm-intro.html + Exploring large projects with Projectile and Helm Projectile: http://tuhdo.github.io/helm-projectile.html http://tuhdo.github.io/helm-projectile.html Note that in the demos you may see me type in the commands. You can think of it like the start menu in Windows, but actually those commands can be executed quickly with a shortcut. I type in the commands for demonstration purpose to Emacs users. Those demos are just tip of the iceberg.
- drothlis 12y agoPossibly not much. I've never used XCode for C++ development but I imagine it has pretty nifty Clang integration, given Apple's investment in Clang. Anyone who suggests using ctags, GNU Global, gtags, CEDET's own parser (implemented in elisp!), etc. for C++ navigation is basically saying "use a C parser to parse C++ code", which works well enough if you're writing 1990s style C++, I suppose. There are projects out there to integrate with Clang (such as rtags mentioned by another poster) but it will require hours/days of setup & frustration, and the result won't be as good as a dedicated C++ ide. BTW I say this as an emacs fan and the author of http://david.rothlis.net/emacs/howtolearn.html http://david.rothlis.net/emacs/howtolearn.html and https://github.com/drothlis/clang-ctags/ https://github.com/drothlis/clang-ctags/ Where emacs shines (for me, at least) is when you spend a lot of time in different languages. Maybe you spend 50% of the time in C++, but the other 50% in shell, makefiles, python, etc. -- and the benefit of better C++ code navigation begins to seem like a micro-optimisation that isn't worth the tradeoff compared to Emacs's support for navigation, version control, compilation, linting, grepping, etc etc, all of which are consistent across all languages. Not to mention Emacs's great support for text manipulation in general. Also Emacs seems to me the best bet for the "one true editor" you'll still be using in 20 years (by which time hopefully few of us will still be using C++). I'll also point out that on OS X, Emacs has a lower learning curve than any other OS, at least as far as the basic keystrokes: OS X's Command key still works for the usual shortcuts (cut, copy, paste, save, open, quit, undo) while the quirky emacs bindings are on the Control and Option keys. This doesn't make it any easier to set up a C++ navigation solution, of course.
- tuhdo 12y agoI agree with everything you said about other aspects of Emacs. You are right that supports for C++ is not as rich, since it is such a complicated language. But for small C++ projects and large C projects, it is pretty much usable, especially just for code navigation. At least it's better than using Grep and better than nothing at all. The currently available tools are perfectly usable for those who only write C. For code completion, there's no pretty solution, but at least simple solution like company-clang which uses clang to get completion candidates from system include paths is pretty usable.