Just a quick question on this, what's the best way to emulate an ide in emacs? I feel so overwhelmed by the options, and the additional tools you have to install alongside it. For example, python ide in emacs alone requires pyflakes, autopep8, jedi and so on... What's the most catchall, generic ide system where I don't have to fiddle with the config too much?
Unfortunately, js2-mode's parser isn't updated to keep pace with modern language development. I've had much better results over the last year with an LSP integration, and rarely if ever go back to js2-mode these days.
Similarly, while js2-mode's built-in formatter is quite good, Prettier is both more (and more easily) configurable and more shareable - it can enforce an agreed-upon style at the codebase level without any editor-specific tooling or configuration, and the consequent absence of bikeshedding is welcome.
Surprisingly, I never got to a good C++ setup in emacs.
Something about how we used CMakeLists and had our project set out made it difficult to get autocomplete/gtags and everything to work the way I wanted.
I know it's possible, but could never get everything to play nicely together.
On the other hand, every other language I've had a brilliant experience with in emacs (using spacemacs).
Could you share your selectrum/ivy/helm config or give me some tips? That's one part of Emacs config, in particular, that gives me the willies -- I can't figure out if I'm supposed to choose between ivy and helm or use them together or even really what the differences are between the two. I haven't even heard of selectrum, lol.
That's one of the hardest parts of trying to config Emacs in general -- so many packages and they all seem to do the same thing and I think I need just one but sometimes people have like, all of them installed. It's confusing!
I use selectrum for just about everything. The only reason I keep ivy and counsel around as for the packages counsel-rg (ripgrip with real time results) and swiper.
It is a very good question you ask. I have spent many months experimenting with these various packages. I actually wrote a blog post about switching from Helm to Ivy. I suppose I should write a follow up on about switching to Selrctrum.
If you would like to talk more one on one, please DM me via one of the channels listed on my blog:
I’ll parrot “Spacemacs” along with a few other here, but here are my two main reasons why:
- Spacebar “leader” key. If you’re familiar with Vim, space is your leader key, and many functions lie behind it.
- Layers. Spacemacs has a packaging system called “layers” that are a collection of curated Emacs packages. The great thing about layers is all the wiring the layer author has done. Many packages are condensed down to a one-line config. Just add “python” to the array of installed layers in your config file and it will install a lot of what you have above. There are a few config toggles (e.g., override the language server that is used by default), but they are pretty well documented in the Spacemacs docs.
Also, use the Spacemacs develop branch! I’ve been on it for years. Master has not had many (any?) updates in a long time. If you do this make sure you are reading the docs for the develop branch when perusing layers online!
I wouldn't recommend Spacemacs. I use it, it's horrible. Fragile and very bloated, and the primary maintainer doesn't really work on it any more (it hasn't seen a release in something like 3 years).
I recently switched from Spacemacs (develop branch) to Doom Emacs ... Spacemacs was just too slow (but very nice, better than Doom in some ways especially the layers in Spacemacs).
I might go back and see if I can get the native-code version of Emacs running with Spacemacs, it might speed it up.
Spacemacs has been in rolling-release mode for something like 3 years. Almost everyone using it just tracks the develop branch where features and fixes are merged daily.
Every time you start the develop branch it displays a huge message saying "Version 0.300 is almost out!" (with a description of how stable releases on master branch are the current objective) and it's been displaying that message for 3 years. There is a rolling branch, but the release branch isn't rolling. Spacemacs is usable but the project is calcifying, I wouldn't recommend anyone hitch their cart to it.
Like, I'm jumping ship as I write this. My job for the next few days is converting my config to Doom.
This is exactly the problem with these huge pre-configured "distros" like Spacemacs and Doom. It looks like you spend a lot of time fighting the opinionated setup of the distro. You might as well spend that time starting from vanilla Emacs and craft your own config.
FWIW while it feels like I'm constantly fighting Spacemacs, it hasn't felt that way with Doom so far. Spacemacs introduces a lot of unnecessary abstractions that are very difficult to perform surgery on whereas Doom seems closer to "sane defaults, but you can modify them easily".
I use Spacemacs develop branch. I agree it's great, but it breaks things often. Once the next release is finally out (0.300 ?) I'll probably switch to master to have a more stable setup.
Oh and if you are a security conscious user, you might not like the fact that Spacemacs downloads tons of code which might or might not have been reviewed by someone you can trust and might or might not have been signed...
I cannot really say, very often even at launch something fails and initialization is not done properly, so for example projectile (which I use to switch projects) doesn't work. When it happens I simply revert to the previous commit that worked for me and wait a bit before pulling again
The main idea of Emacs is unlike other ide's it can be customized greatly to specific users, but Doom Emacs seems to be a ready made configuration. It seems to be opposite of the main idea behind Emacs, yet Doom Emacs seems to be getting popular. Is there anything i am missing.
You're missing that a default vanilla Emacs experience is pretty shitty. Besides, it's not like you're sacrificing any customizability with Doom/Prelude/Spacemacs, you're just getting a better starting point.
You can consider doom emacs a 'mod' that make it easier to manage your customized emacs config.
If anything I found doom to make it easier to stay close to the 'intended' way to customize emacs, since it heavily encourages you to use 'use-package' and 'general.el' to manage your extensions, and gives you good startup performance if you use them as intended (allowing the lazy-loading to do its work).
Although it's possible I was simply more familiar with the 'right' way to do it when I moved to Doom from Spacemacs. Either way I got the impression it felt quite close to the way to manipulate 'native' emacs (but with a lot of sensible defaults that I couldn't be bothered to figure out myself).
I went with the ‘take vanilla and adjust’ route to learn proper Emacs config-ing. Turns out, you pretty much need to implement a bunch of features on top of the 90s Emacs to get a reasonable modern editor, and there isn't a system for config snippets that are smaller than a minor mode (aside from copy-pasting from StackOverflow). I've been meaning to try Doom for some time because it seems to be an answer to just that problem.
Maybe many users don't need a very specific configuration, and a great community made configuration is good enough :)
I use Spacemacs which is also a community made emacs configuration and it's great. The fact that I could have made the customization myself does not make this configuration any worse.
Projects like Doom Emacs and Spacemacs are frameworks. They contain lots of well-made, battle-tested code. They are extensible, too: they usually provide clear points for user extensions and customizations.
Python can never have a legit IDE because of the dynamic typing and OO, but LSP/company-mode/projectile/magit should get you on par with anything else, I'd imagine.
I had to re-bytecode-compile lsp-mode to get it to pick up the faster JSON support (`M-x package-reinstall lsp-mode`). See `lsp-diagnose` for a quick way to check if you're good to go.