I've seen a lot of arguments about how people don't use IDEs because vim/emacs are better, and I always felt they were misguided. I see the feature sets of vim/emacs and your common IDE as nearly disjoint sets, and I couldn't be happier to see the good parts of the two editors being joined with the power of the IDE.
One way to do that is to provide IDE functionality as an external service to the text editor. There's a Scala editing package for Emacs called Ensime that uses the Scala presentation compiler, a service that runs in the background. Every time Ensime is asked to colorize code, provide code completion, or jump to the definition of a symbol, it asks the presentation compiler, which gives it the right answers. No half-assed guessing; it actually runs the relevant compiler passes and provides correct information.
Another way to do it might be to embed a real text editor (not just a crappy emulation mode) into an IDE somehow. I think that's what I would prefer. Emulation modes in IDEs will always be playing catch-up, and power users of a Emacs or vim shouldn't have to maintain a mental catalog of which features have been emulated and which haven't. I don't know how it would work, though, and I don't know of anyone working on it.
So the external service approach works well (Haskell, Python and Scala) as does a native Emacs approach (lisp, CEDET, JavaScript). Either way though, Emacs can make a killer IDE without giving up its text editing prowess or other assorted magic (TRAMP, shell-mode...etc).
for a good overview at the history of vim integration, check out http://www.freehackers.org/VimIntegration
the only really good one i've seen is jvi [http://jvi.sourceforge.net/], which is a straight-up port of vim to java as a netbeans plugin. emacs's evil mode [https://gitorious.org/evil/pages/Home] is getting there too.
When programming, all I'm doing is editing text and occasionally running an external program. what does an IDE have that makes it so valuable?
(Honest question! I've used IDEs in the past - MSVC, Eclipse, NetBeans, Anjuta, Code::Blocks, and several others - and found that the generally poor editors made it more difficult to program.)
But, all this wonder comes with a price. For me, the key reasons I prefer vim to any ide out there is:
1) speed. compared to vim + bash, every ide is slow. 2) code portability. I work with lots of different languages on a daily basis and having to switch from Eclipse (java) to Monodevelop (C#) to whatever the http/css/php du jour is these days. 3) IDE maintenance. No matter what you use, ides have a ton of setup overhead just for the specifics of the project you're working on, let alone if you want to customize the environment. 4) fragility. Vim + bash rarely breaks or leaves me unable to work on a project. I have been left high and dry by IDEs multiple times. All it takes is a coworker checking in personal changes to a team-wide project file. Then you're left in a broken state, figuring out what went wrong.
so, there are some pros and cons. Everybody's style is different and there are real advantages to both approaches.
Like most GUIs, you're also provided with organized menu-based access to tools and features you might otherwise have to spend time remembering or learning how to do from a terminal.
Finally, IDE-centric features like in-editor static analysis / error highlighting can come in handy from time to time (Oops! Forgot a paren. Glad I didn't have to waste 15 seconds attempting to build, reading/understanding the error output, and coming back to this file/line).
(I agree that a lot of IDEs I've tried such as MSVC and Eclipse can be burdensome to use. I like using Geany, since it's foremost an editor, with useful panes and functionality added in.)
* Refactoring tools that can not be done by an editor that does not also understand the language. (like block select -> "Extract Method" or "Implement Interface")
* "Go to definition", which can take you to the definition of a method, property or field, that always works, even with the most convoluted syntax.
* Debugger and breakpoints integrated into the environment
* Expression-level type inference, or the ability for the IDE to tell you the type of an expression, and examine that types' definition in all cases.
* Basically any manipulation of the files that requires more understanding of the source files than text-based operations.
Generally, I like it, but it can be a bit sluggish at times. The only plugin I have running is JSLint, so I suspect it's VSVim causing the problems (though it only generally bogs down when I leave VS2010 for a bit). The keybindings work as one would expect. As I mentioned in a different thread, I wish it could break out of the tabbed window convention of VS and use buffers.
ViEmu did feel a bit faster (and was less prone to crashing).
https://github.com/downloads/jaredpar/VsVim/VsVim-1.2-Beta2....
As for crashes I'd love to hear about any you found. Feel free to send me email (hacker news alias at microsoft.com) or post an issue on github.
It's got some serious bugs that make my heart stop.
The biggest one is Undo. Looks like the plugin keeps it's own list of modifications that were performed. So when sometimes I press "u" to undo the latest change - Visual Studio gets suspended for a minute or two, and all my changes that I did since I opened Visual Studio (could be a day or a week) are pretty much gone. The work around is to close the file without saving.
I've been a happy ViEmu customer for... Hmm... Three years? Maybe a little longer. Anyway, it's just perfect.
During my internship at Microsoft last summer, there was one day where the interns in STB got into groups of about 5 and presented on topics of strategic importance to Microsoft. My group presented on how Microsoft could better embrace open source, and during my part of the presentation I focused heavily on how many of Microsoft's "OSS" projects don't accept outside contributions.
I used VsVim to showcase how Microsoft was doing open source wrong. It was a great example, because Jared Parsons seemed to be doing everything he could to be a good OSS citizen and reach out to those who typically use an OSS stack (by putting his project on github instead of codeplex for example), but he had to turn down contributors outside of Microsoft as a matter of policy. I also didn't suspect that Microsoft would be repurposing a Vim emulator plugin written in F# for any of its closed source projects, so it didn't make sense to stop outsiders from contributing out of fear of losing complete ownership of the codebase.
Several high-level execs in STB including Satya Nadella were there, so I would like to believe that my presentation played some small part in Microsoft now allowing outside contributions to VsVim. A discussion of VsVim's contribution policy ate up a lot of the question and answer session after my group's presentation, so it was pretty clear that I wasn't the only there who thought it was messed up.
Bug Details: https://github.com/jaredpar/VsVim/issues/672
[0] http://vrapper.sourceforge.net/home/
Whilst I prefer *nix, when I have to use Visual Studio, I use the VsVim plugin, and it's a real pleasure to be able to seamlessly move between platforms and development environments, IDEs and text editors in this way.
Not only do I love VsVim, but it significantly reduces the friction of using Visual Studio, and even adds some enjoyment to coding on that platform. VsVim is F# under the hood too (which shouldn't matter to the user, but it _is_ kinda cool).
Thoroughly recommended!
i recently screwed up the breakpoints though... now they're pink.