Using emacs AND vim isn't some mutually exclusive impossible thing.
There's lots of nice features in emacs. Look at it as a suite of tools (applications) that has an editor-like interface; debugging, email, even spreadsheet calculations - you can totally still edit files with vim and find emacs really useful.
Try giving the "Grand Unified Debugger" a spin as well. The ease of Visual studio debugging is one of the only things I miss from Windows dev and GUD really comes close. I use vim as my daily editor but fire up GUD frequently for stepping through code.
I'm one of those weird users who works in both, and I've also never really understood the need to pick a side. I initially used emacs for years, and now I've used both for years. I also don't pick a side in the tea and coffee debate, sometimes I want rooibos and others espresso.
Admittedly, my emacs usage at this point is largely to treat it as a collection of distinct apps; fire up in nov-mode¹ mode to read books, fire up in magit-status² to mangle git repository, etc. It really feels like there are a collection of best of breed apps that just happen to built on emacs as a toolkit, most of which are fully functional without buying in to emacs for life(not that I'm saying there is anything wrong with that).
The only time I really use emacs as an actual editing tool is when I'm working on documentation, and that is largely because I like being able to see inline screenshots in that instance. That could equally flip again should I see some feature I want.
I use both, a lot, too. They both have their places.
I'm using vi/vim whenever I shell onto a machine; I typically use ripgrep to search a huge codebase for the file I'm looking for and then typically open that single file in VIM. (I read more code than I write these days).
I use Emacs (Doom) more for Org-Mode and note taking, and sometimes as client for accessing APIs (through verb package). I'd like to get my SQL for the various types of databases I connect to to go through emacs. But once the connection history is in my bash history, and how easy it is to press ctrl-x ctrl-e to edit the command (in VIM), it hasn't been painful enough to put the time in.
And ironically, I use neither for my main code editor.
I use different editors for different things and I could not agree with this sentiment more. I use Emacs almost exclusively for note taking and for writing software. But I use vim for editing config files, or for smallish files in /etc/. I really like Emacs for writing software, but I have used vim for this as well.
Over the years I've used many different editors and I expect I will use many different editors in the future.
I've spent a little time wondering if it is acceptable to push emacs as a runtime lately. For example, I've convinced a few co-workers to use magit, and they're comfortable with it when using a shell wrapper to start emacs and call magit-status.
Honestly, I'm kinda convinced that if there was a more locked down "kiosk mode" that didn't let you use the other functionality it could be a good runtime for generic apps.
I used vim for over 25 years before switching to Emacs, so I'm perfectly capable of using both, and do use both.. but for me Emacs does virtually every that vim does and more, while vim only does a couple of things that I need that Emacs can't, and I find myself needing vim pretty rarely.
The startup time of Emacs is not an issue because I only start the Emacs server once and keep it running for a long time, connecting the Emacs client to it as needed. Once the Emacs server is running then connecting to it is as fast or faster than starting vim from scratch. Even restarting Emacs from scratch can be effectively instant, if you don't have a giant config like I do. Vim startup time can be slow too, by the way, if you have a lot of plugins. So, effectively, vim and Emacs don't differ on startup time these days like they used to.
As to your question about Lisp, it definitely was a huge draw to Emacs because I fell in love with Lisp and almost the entire ecosystem of Emacs is written in Lisp... and I'd certainly much rather program in Lisp than vimscript, or even Python (or any of the other more mainstream languages).
I remember coming across various things I wanted to do in vim that were pretty awkward to do because of how clunky vim and vimscript were. Lisp and Emacs just made doing what I needed much easier overall (though some things were still easier in vim.. for example, vim has some powerful features in its regex engine that don't exist in Emacs, even when using Evil). This was before neovim, so maybe it's better there, though since both vim and neovim lack Emacs' Lisp ecosystem, I doubt they'll ever be able to match Emacs in this respect.
There were a lot of other reasons for the switch to Emacs, like having deep web browser and shell integration, being able to read my email from within Emacs, and do a ton of other things from it.. org-mode was another draw.
While you were using vim, did you use tilling window managers? Did you use a dmenu-driven workflow that calls bash scripts and unix utilities?
When people talk about "composability" and "integration" of EMACS, it strikes to me that, vim+i3+unix setup is essentially the same. Just instead of LISP, bash/python is the glue language.
But why use so many monolithic tools that don’t want to talk to each other? Why ‘glue’ stuff together? Shouldn’t the underlying system take care of that? That is the appeal of emacs, to me. I don’t have to work hard for uniformity. I implement something once (a theme change, for instance) and it’s reflected everywhere. I want to change the font in emacs? Easy, one line in my config. I want to change the font for all of my programs on my Unix system… far out.
Yeah, but when everything lives inside the same Lisp environment, there is no need for glue. You have variables and functions, all with built in documentation, that are easily composed.
Vim, on the other hand, appears to conspire against the user's attempts to build reusable configurations. One plugin may require Neovim. Another may require the Python runtime to be configured and installed. Vanishingly few of them have built in keybinds, and those that do are not guaranteed to be harmonious with other plugins. And besides, should I write my config in vimscript or Lua?
It might sound like I'm picking nits, but I don't find it coincidental that the best configurations that people have managed to build have been upon the strong bones that Emacs provides. Doom Emacs (https://github.com/doomemacs/doomemacs) is best-in-class, providing harmony between all of the built in modules and their bindings. I uncomment a line in a config file and get full Python support, with refactoring and formatting and such, ootb. This ends up being true for a shockingly long list of languages and tools.
On the Vim side you have https://github.com/NvChad/NvChad which appears to no longer be accepting new plugins and https://github.com/LunarVim/LunarVim which appears to provide a really good programming experience but is limited in scope to a handful of core plugins and whichever LSP servers they can get their hands on.
I used to use Neovim and compose everything together by hand as well. I don't see why I should bother today when Doom Emacs provides the same experience I would have built for myself, out of the box.
The start up time of emacs isn't slow if you know what you're doing. I have a 14,000 line init.el and about 355,000 lines of code across ~150 installed packages. Emacs starts in 0.2-0.3 seconds. Not instant but practically there's no difference.
The downside of autoloading (lazy loading) all libraries is that there's a hitch when I first open a "heavy" elisp library. A PDF, an org mode document or something that launches an LSP server, say. But if I launch emacs to edit a bash script or a config file the speed is indistinguishable from vim.
Agreed, and use-package is a big reason for this. New users, take heed and use-package from the start. Regarding the topic of using both Vim and Emacs, I do, but switching from one to the other can really mess me up. I would prefer to just use one, generally, and use TRAMP instead of Vim when possible for editing server configs and such. I have considered using EVIL mode, but I am wary of losing touch with default Emacs, as it's something that comes up from time to time as well.
"I have considered using EVIL mode, but I am wary of losing touch with default Emacs, as it's something that comes up from time to time as well"
You're basically giving up almost everything that makes Emacs great: its ecosystem. Bare-bones, default, vanilla Emacs, without any packages or configuration is woefully underpowered compared to Emacs or vim with lots of packages and configuration. I hate to use either in their default states, and would have never switched to Emacs if I wasn't able to use Evil.
Oh, I'm not at all saying I use default Emacs, I'm just saying that I'm concerned that Evil would change it so drastically that I would forget how to use default Emacs. Default in this case meaning "not evil".
In those rare situations where I need to edit a file on a machine that doesn't have Emacs+Evil, I just use vim or vi... which even when unconfigured are good enough to make small edits without much pain.
So I get the best of both worlds: Emacs+Evil 99% of the time, and vim/vi 1% of the time when Emacs+Evil is not available.
More of a hardware user. Hard drugs, hard thought.
It's funny Arthur Conan Doyle says Sherlock Holmes is based on I think two guys, but there's a third guy he's also based on Conan Doyle didn't talk about, and that was the guy who cracked cases the hardest, just never talked about because of he was the one the whole coke-injection trances was based on (which was legal at the time). Protected his privacy, you understand.
Do you use some sort of extension or plugin to get Emacs to use modal editing and the home row like vim? Or did you switch over to the Emacs key bindings?
I use Evil to get modal editing, and have spent countless hours configuring Emacs to be as vim-like as possible. As a result I can easily switch between vim and Emacs and feel completely comfortable editing in both.
I'd love to switch, but have spent a significant portion of the last four months moving all my personal infra to NixOS. Will need to take a break and spend more time with the kids before diving into something like this again haha
When and if you do, be sure to check out the emacs-overlay! It makes it super easy to build/install development versions of emacs, to compile with native-comp, and so on
Agreed, anyone who brings up the culture war between Emacs and Vim users is acting as an agent of discord. I love and appreciate Vim users and love and appreciate Emacs users. I "use" both thanks to evil, an Emacs package that brings vim emulation to Emacs.
I crack open Emacs for Steel Bank Common Lisp. But Neovim for everything else. They are pushing the boundaries of Vim like no other with Treesitter, LSP etc.
There's lots of nice features in emacs. Look at it as a suite of tools (applications) that has an editor-like interface; debugging, email, even spreadsheet calculations - you can totally still edit files with vim and find emacs really useful.
For instance, you want a really powerful calculator? https://www.gnu.org/software/emacs/manual/html_mono/calc.htm... try that out
Try giving the "Grand Unified Debugger" a spin as well. The ease of Visual studio debugging is one of the only things I miss from Windows dev and GUD really comes close. I use vim as my daily editor but fire up GUD frequently for stepping through code.
Don't view the tools as mutually exclusive.