Why I switched from VScode to Emacs
A quick comparison between VScode and Doom Emacs


If you take a look at my PhD thesis, you see that it is written completely in Emacs org-mode, in particular using the Scimax package from John Kitchin. However, going more and more towards Python development, I found it more and more difficult to use Emacs as a comprehensive IDE. My problem was mostly all the optimizations one needs to make here and there all the time to be able to use the Emacs as a complete IDE. As a solution, I moved to VS code (actually to VS codium which is a deMicrosofted version of VS code with all telemetry and proprietary pieces removed). This is an IDE which is gaining share among the developers community. It offers almost everything you would ever need in a form of different extensions you can install. However, it also has its own problems which I am about to give a bit of detail on each from my own perspective and how Emacs can potentially fill most of them. I should mention that cons and pros of integrated development environment software, and in general any software, is subjective and what is an advantage for someone can count as a disadvantage for someone else. Here I just provide my own preferences.

Shortcomings of VS code and how Emacs can fill them


VS code is pretty quick out of the box. However, after a short time, especially by installing all the extensions one needs, it behaves like a heavy beast which can eat a huge amount of resources on the computer. Some people blame Electron which VS code is written in for this issue. One should not overlook the effect of extensions, too. Docker extensions is pretty infamous on this. For me the VIM extension was also incredibly slow.

Emacs on the other hand can become amazingly fast if it is optimized for speed. I use Doom Emacs which is very optimized in terms of starting time and resources. With all extensions needed, it takes less than 2 seconds to start and feels very smooth.

Mouse or keyboard (or both)?

VS code is very beginner friendly, which is in part the reason why it got so popular. This means that you can reach all the elements using your mouse. Clicks also provide several functionalties out of the box which is very nice. Nevertheless, after developing for a while, this can get in the way of productivity since many of these functionalties are not implemented in the key bindings. One should start defining keybinds or just switch to using mouse from time to time. One extension that tries to mitigate this, at least in the editor itself, is VIM extension (or Emacs extension). But this also has its own shortcomings e.g. it is very slow in multi line edits and undoing them. It also has an incomplete multi-cursor edit which takes away a lot from VIM feelings.

Emacs on the other hand can be seen on the other end of beginner-friendliness. It has a very steep learning curve and can distract you from coding in the beginning until you get the hang of some features/key binds. Doom Emacs shines here again. You can start working in Doom Emacs in no time if you have some VIM knowledge and are willing to let go of your mouse for good. Although Emacs has some mouse functionalties, it is designed with the keybinds in mind. Doom takes to the next level by adding some VIM (Evil in Emacs context) keybinds. It provides a unique and unified interface. This is an environment that once you get used to, you won't be willing to exit from. In fact, you may find yourself browsing web using the built-in web browser from Emacs as a lot of people do.

One thing that cannot be replaced by any extension in VS code, VIM or any other editor: Emacs' Org mode

Org mode is for sure one of the most amazing pieces of software I have ever seen or worked with. It does things that no other text-based word processor can do, even if you are writing complex scientific reports. VS code has an extension which brings less than 5% of Org mode functionality, tops and that is mostly the code highlighting.


As I mentioned above, VS code carries some proprietary pieces which can be taken out if compiled from source but are included by default on binary distributions. Some extensions from Microsoft like IntelliCode carry this type of components, too.

Emacs on the other hand is developed by GNU and has the most copy-lefted license and carries no opaqueness on this. While I do not like to sound RMSish, I hate to have any parts of my data being sent to third parties without me being aware and in control of that. In any case, I acknowledge the path that Microsoft has stepped in by releasing the source code of VS code.

Shortcomings of Emacs for first-time user

Help and community

The middle class in Emacs is completely outnumbered by the people from both ends of the spectrum. Some are completely into Emacs and know everything by heart and some are on the other end, struggling to get started. This makes finding educational resources very difficult. VScode on the other hand is pretty easy to start with and find tutorials on. Even GIFs which are very popular in VScode extensions are rarely found in Emacs resources. Luckily, Doom Emacs has us covered with intuitive interface and comprehensive help.

Learning curve

Emacs can be a challenge if you are used to using mouse pointer. One should be willing to leave the mouse and stick with the keyboard.

Integrated development environment

Emacs was very difficult to set up for a complete IDE feeling before 2016. But thanks to the efforts from Red Hat and Microsoft in developing Language Server Protocol (LSP), it is now much more similar to its competitors. However, still from time to time it fails to understand what you are planning to do and needs some patience to get it back to the track. For example the Elpy does not do auto-completion in the company backend for me unless I disable and enable it for the current buffer (update: this is now fixed, just use pyls language server and add +lsp in the init.el file as per Doom Emacs Python language details). This is one the issues that I could not find a solution for.

Final words

Here are some screenshots of my working environment in Doom Emacs


Figure 1: Org-mode in Doom Emacs


Figure 2: Python in Emacs using Eply


Figure 3: Docker in Emacs using Evil keybinds

My settings can be found in my .doom.d repo on Github. But I suggest you to make your own settings to have complete familiarity with your workflow.

Created: 2019-12-07 Sat 14:09

Last modified: 2020-12-24 Thu 20:17