Many people ask me - why Emacs, what is different about it, and why to invest your time into learning something so odd and non-standard. I think this:

  • Emacs is not for all.
    • It requires effort to get used to it. 90% of people won’t invest this time.
    • Emacs is about developer productivity. If you can’t reach it, don’t try: there are several languages and environments where it is impossible to reach it due to restrictions set by platform, for example MS Visual Basic or C#.
    • Emacs is about human attitude to ‘fix’ and ‘improve’ things. If you are someone who prefers to install something and never look to tune something, living with happy defaults then Emacs is not for you.
  • Emacs is not an editor. Instead it is a platform, which you can use to build a development environment of your dreams. I do not underestimate vanilla Emacs power, but the real benefit comes from building a customized configuration according your personal preferences and work needs.
  • It is all about text UI - how to organize everything around you - files, directories, projects, interaction with software using API and protocols into something keyboard driven and easy to use.

Benefits of using Emacs Link to heading

  • You can use it to build something very special, not comparable to anything else in terms of usability & development speed personally for you

  • I often seen that my colleagues and friends use per-project instances of their IDEs. It might be OK in many cases, but consider an example of company I’ve recently worked in, where application was build using microservices architecture - as result, I’ve seen so often that people open 5-10 VSCode instances to modify something within their task. IMO its not convenient, I can use my Emacs to edit all those parts in a single editor window, with all the benefits coming out from this: ability to combine buffers, copy/paste/log/debug etc.

  • Stability. LISP and Emacs are the most stable things on the surface. Have you ever seen something, which was in 1976 and still being developed and extended every single day? I am using it since 1998 and most of things are stable and constant, there is no need to re-learn keybindings, approaches and other things when your previous IDE gets outdated (plenty of those appeared and disappeared during those years)

  • Extended text editing features (which I use, there are plenty of others)

    • Edit files on remote using different protocols (ssh, ftp, afp, dav, davs, gdrive, mtp, nextcloud, sftp, smb, sudo, nc, pscp, psftp, scpx, rsync, docker, kubernetes, podman, plink, ksu, krlogin, sshx, telnet, rsh, su, …)

    • Create & edit encrypted files

    • Publish web sites (this one is using ox-hugo plugin to an org ecosystem), but there are a plenty of different modules, starting from simplest one of org-publish

    • Publish parts of your code/screen from within your editor to a web site (with current color scheme etc) via htmlize

    • Debug code directly in your console using realgud, dape, dap-mode, etc..

    • Have all the benefits from the VSCode LSP architecture by enabling code introspection, code completion and other language server protocol features into emacs through various possible integration’s like lsp-bridge, tide, lsp-mode, eglot, etc.

    • Enable code formatting plugins, for example via Apheleia

    • Code quality check plugins like flycheck or flymake

    • Support for different languages. I personally use: python-mode, python-ts-mode (this one uses TreeSitter), ahg (mercurial support), magit, go-mode, apache-mode, annotate-mode, crontab-mode, and dockerfile, nginx-mode, poetry-mode, code review integration tools (with Github, Gitlab), json-mode, direct code introspection via imenu, logview, json-mode, php-mode, vue-mode, ediff or smerge to merge conflicts, paredit mode to edit LISPy languages, famous web-mode, eslint, systemd, generic conf-mode, …

    • multiple-cursors support

    • Read & bookmark & annotate PDF files via pdf-tools

    • Snippets via yasnippet

  • Not only text editor but an platform which comes equipped with at at least, but not limited to:

    • Calendar & Personal information system - the database of knowledge, events and everything. org-mode with additional modules like org-roam

      • You can use it to maintain your database of knowledge

      • You can use it as a planning & calendaring app

      • You can use it as literate programming tool

      • Prepare & export documentation (export to different formats like PDF, RST, Markdown, .docx, presentations, etc)

    • Email reader. There are many options, but I’ve selected notmuch which is fast, reliable, and easy to use. You can also send mail via smtpmail

    • Personal accounting system. I use ledger-mode

    • Password storage integration via emacs pass

    • Git integration via Magit is a super application, makes your editor a browser for code & revisions.

    • elfeed to read RSS

    • docker.el to manage your containers, images, volumes, etc

    • produce diagrams via PlantUML, dot, …

    • Compare trees using ztree

    • Direct shell integration via shell or eshell modules.

    • terminal (do not confuse with shell integration above) support via vterm