Which code editor do you use ?

Which code editor do you use ?

  • vim

    Votes: 27 42.2%
  • neovim

    Votes: 15 23.4%
  • vscode

    Votes: 10 15.6%
  • other which one ?

    Votes: 27 42.2%
  • emacs

    Votes: 11 17.2%

  • Total voters
    64
  • This poll will close: .
I would say that Emacs is the wrong environment for Vim keybindings and much of Emacs's efficiency is lost with them. I agree that vi/Vim users who want to "just try Emacs quickly" could have a lower entry level by using different keybindings, but that's basically "I use Emacs as Vim", not "I use Emacs".
OK thanks.
For me, the evil mode of doom emacs doesn't personally interest me as I have never been a big user of vi/vim, I just use those editors when my usual editors are unavailable.

I thought there were advantages to using Doom Emacs, but I couldn't say what those might be without reading up on it further. I had the impression it made using emacs easier but I will look into this more, as I like to have a good system without too much unnecessary cruft.

You mentioned use of Doom Emacs loses much of Emacs' efficiency? In which areas? Is that because of a translation layer from Doom Emacs to the underlying Emacs?

If there are no worthwhile advantages to using Doom Emacs, I would certainly consider just using vanilla Emacs.
 
I thought there were advantages to using Doom Emacs

You would not have to configure it yourself. (Configuring GNU Emacs the way you like it can take decades. Believe me. :D)
But you lose a lot of flexibility with it, as Doom prefers its very own style of configuration (and, of course, keybindings).

Is that because of a translation layer from Doom Emacs to the underlying Emacs?

The advantage of Vanilla GNU Emacs is that you can decide what your preferred customisations, extensions and keybindings are. Doom Emacs won't let you do that quite as easy. Preconfigured GNU Emacs distributions are opinionated by nature.
 
You would not have to configure it yourself. (Configuring GNU Emacs the way you like it can take decades. Believe me. :D)
But you lose a lot of flexibility with it, as Doom prefers its very own style of configuration (and, of course, keybindings).
Lol, yes I have become aware that emacs configs are never finished, just continuously tweaked.
Thanks for your info on this, as I will create a new experimental vanilla emacs installation on another machine and see if I can get it working well as I like it.

The advantage of Vanilla GNU Emacs is that you can decide what your preferred customisations, extensions and keybindings are. Doom Emacs won't let you do that quite as easy. Preconfigured GNU Emacs distributions are opinionated by nature.
OK, good to know, I will certainly look into using vanilla emacs.
From memory, Doom Emacs provides nice colour themes etc but I expect that they wouldn't be too much trouble to figure out doing using vanilla emacs.
 
I build emacs from the source with:

.../configure --prefix=... --without-all --with-x-toolkit=no
make
make install

I have in .emacs, among other things:

(setq inhibit-startup-screen t)
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
(blink-cursor-mode 0)
(setq visible-cursor nil)

(setq-default indent-tabs-mode t)
(electric-indent-mode -1)

(show-paren-mode 0)

Like firefox, every new version, specially mayor version, brings "features" I have to fight with and neutralize.
 
I thought there were advantages to using Doom Emacs, but I couldn't say what those might be without reading up on it further.
With Emacs, many keybindings are based on chords, i.e. multiple keys to press simultaneously. I used very few of them, because I rarely remember many of them. They are too much for me.

Doom Emacs has few keybindings with the role of entry-points. You had to remember only 1-5 of them. Then appear an hierarchical menu with the subsequent command choices. So it is a lot easier to (re)discover the commands and use them. The sequence of keybindings is longer, but in practice I prefer it because I'm rather fast in typing, and they follow a common logic.

For example for splitting a window "<space> w s". For changing window "<space> w w".

"<space>" and you see all main types of commands. "<space> w" and you see all window related commands.

As nice bonus, sequences of keys are less stressful than chords for the hand, and typing "<space> w w" is rather fast in any case (3 keys).
 
With Emacs, many keybindings are based on chords, i.e. multiple keys to press simultaneously. I used very few of them, because I rarely remember many of them. They are too much for me.
I know what you mean. I have only really scratched the surface with learning all the features of emacs, but have learned the basics enough to edit files fairly fluently with it. But I have a long way to go.

Doom Emacs has few keybindings with the role of entry-points. You had to remember only 1-5 of them. Then appear an hierarchical menu with the subsequent command choices. So it is a lot easier to (re)discover the commands and use them. The sequence of keybindings is longer, but in practice I prefer it because I'm rather fast in typing, and they follow a common logic.

For example for splitting a window "<space> w s". For changing window "<space> w w".

"<space>" and you see all main types of commands. "<space> w" and you see all window related commands.

As nice bonus, sequences of keys are less stressful than chords for the hand, and typing "<space> w w" is rather fast in any case (3 keys).
Yes I like those features of doom emacs - SPC f r - recently opened files, for example, to locate a recently edited file for re-editing. As you say, the menu system helping you find commands is useful.

I will continue with using doom emacs but will setup a vanilla emacs on another machine to learn, and compare with doom emacs.
 
For just simple code edition/looking at: Sublime 4 and nano.

For java programming: eclipse
For other languages depends what is best for the platform.
On general I dislike the atom derivated code editors (vscode, codium, etc). Tend to be slow, confusing to set up for specific languages and break a lot.

Usually the decider is which editor/ide offers the best debigging experience and can handle multiple medium/large projects open at the same item.
 
For he, who is interested, a good init.el just for editing C,C++,

Code:
;;; init.el --- C, C++, and Header Development ::: Setup 2026

;; 1. Appearance & UI
(load-theme 'wombat t)
(global-display-line-numbers-mode t)
(set-face-attribute 'default nil :font "NotoMono Nerd Font" :height 150)
(set-face-attribute 'line-number-current-line nil :foreground "yellow" :background "black" :weight 'bold)
(column-number-mode t)

;; Fix Company Pop-up colors for the Wombat theme
(custom-set-faces
 '(company-tooltip ((t (:background "gray20" :foreground "white"))))
 '(company-tooltip-selection ((t (:background "yellow" :foreground "black"))))
 '(company-tooltip-common ((t (:foreground "orange" :weight bold)))))
 
;; 2. Environment & Performance
(setq-default 
    inhibit-startup-screen t
    initial-scratch-message ""
    fill-column 80
    indent-tabs-mode nil
    native-comp-jit-compilation t
    frame-resize-pixelwise t
    scroll-preserve-screen-position t
)
(pixel-scroll-precision-mode 1)

;; Path management (FreeBSD/Unix)
(dolist (path '("/usr/local/bin" "~/.local/bin"))
  (add-to-list 'exec-path (expand-file-name path)))
(setenv "PATH" (string-join exec-path ":"))

;; 3. Package Management (straight.el)
(defvar bootstrap-version)
(let ((bootstrap-file (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
      (bootstrap-url "raw.githubusercontent.com"))
  (unless (file-exists-p bootstrap-file)
    (with-current-buffer (url-retrieve-synchronously bootstrap-url 'silent 'inhibit-cookies)
      (goto-char (point-max)) (eval-print-last-sexp)))
  (load bootstrap-file nil 'nomessage))

(setq straight-use-package-by-default t)
(straight-use-package 'use-package)

;; 3bis keys
(global-set-key (kbd "<f3>") 'next-error)
(global-set-key (kbd "<f4>") 'previous-error)
(global-set-key (kbd "<f7>") 'recompile)
(global-set-key (kbd "M-*") 'pop-tag-mark)

(defun my/grep-merge-conflicts ()
  "Search for git merge conflicts in the current project."
  (interactive)
  (grep "grep -nE '^(<<<<<<<|=======|>>>>>>>)' -r ."))
(global-set-key (kbd "<f8>") 'my/grep-merge-conflicts)

;; 4. Tree-sitter (Automatic Grammar Management)
(use-package treesit-auto
  :demand t
  :config
  (setenv "PATH" (concat (getenv "PATH") ":/usr/local/bin"))
  (setq treesit-font-lock-level 4
        treesit-auto-install t)
  (add-to-list 'treesit-extra-load-path (expand-file-name "tree-sitter" user-emacs-directory))
  (treesit-auto-add-to-auto-mode-alist 'all)
  (global-treesit-auto-mode))

;; 5. Language Support & LSP (Eglot for C/C++)
(use-package eglot
  :hook ((c-mode           . eglot-ensure)
         (c++-mode         . eglot-ensure)
         (c-ts-mode        . eglot-ensure)
         (c++-ts-mode      . eglot-ensure))
  :config
  (setq eglot-events-buffer-size 0) 
  (setq read-process-output-max (* 1024 1024)) ;; 1mb
  (setq eldoc-idle-delay 0.1)
  (setq eglot-connect-timeout 60)
  (setq eglot-sync-connect 1)
  (setq eglot-send-changes-idle-time 0.05)
  
  ;; Use clangd for C and C++ (headers included by default)
  (add-to-list 'eglot-server-programs '((c-mode c++-mode c-ts-mode c++-ts-mode) . ("clangd")))
  (add-to-list 'eglot-ignored-server-capabilities :workspace/didChangeWatchedFiles))

;; 6. Indentation & CC-Mode
(use-package cc-mode
  :straight nil
  :mode (("\\.h\\'" . c-mode)
         ("\\.hpp\\'" . c++-mode)
         ("\\.cpp\\'" . c++-mode))
  :config
  (defun c-lineup-arglist-tabs-only (ignored)
    "Line up argument lists by tabs, not spaces"
    (let* ((anchor (c-langelem-pos c-syntactic-element))
           (column (c-langelem-2nd-pos c-syntactic-element))
           (offset (- (1+ column) anchor))
           (steps (floor offset c-basic-offset)))
      (* (max steps 1) c-basic-offset))))

;; 7. Completion & UI
(use-package yasnippet
  :init (yas-global-mode 1))

(use-package company
  :init (global-company-mode)
  :config
  (setq company-idle-delay 0.0
        company-minimum-prefix-length 0
        company-tooltip-align-annotations t
        company-begin-commands '(self-insert-command org-self-insert-command)
        company-frontends '(company-pseudo-tooltip-unless-just-one-frontend
                            company-preview-frontend
                            company-echo-metadata-frontend))

  (add-hook 'eglot-managed-mode-hook
            (lambda ()
              (setq-local company-backends 
                          '((company-capf :with company-yasnippet) 
                            company-dabbrev-code)))))

(use-package vertico   :init (vertico-mode 1))
(use-package marginalia :init (marginalia-mode 1))
(use-package smart-mode-line
  :init (setq sml/theme 'dark sml/no-confirm-load-theme t)
  :config (sml/setup))

;; 8. Dependencies & Search
(mapc #'straight-use-package '(dash f s))

(use-package orderless
  :init
  (setq completion-styles '(orderless basic)
        completion-category-defaults nil
        completion-category-overrides '((file (styles . (partial-completion))))))
 
I know what you mean. I have only really scratched the surface with learning all the features of emacs, but have learned the basics enough to edit files fairly fluently with it. But I have a long way to go.


Yes I like those features of doom emacs - SPC f r - recently opened files, for example, to locate a recently edited file for re-editing. As you say, the menu system helping you find commands is useful.

I will continue with using doom emacs but will setup a vanilla emacs on another machine to learn, and compare with doom emacs.
Actually there is no need to do that. I use both and simply use different command line parameters. You should be aware that doom emacs is just a front end to normal emacs. Normal emacs commands should continue to work in doom emacs.

Slowly getting used to doom makes me realise how much it simplifies what I do by remembering what I did in previous sessions.

I think the key to using emacs is being aware of what functions are available and how you can invoke them.
 
Do you have hints on libraries and hints on functions in those libraries and hints on parameter types of functions in those libraries.
For me this did not worked with doom emacs. I think it is Linux oriented.
Which languages do you edit with doom emacs ?
 
For me emacs is a general purpose editor, which may help me to learn see at some point.

The last time I was paid for doing any programming I used IBM's REXX on OS/2.

At the moment I'm trying to make doom emacs my main file manager and replace mc.
 
I'm really pleased with Neovim. After some time investment I'm able to:
  • Edit any file on a server, there's always a vi layout around
  • Do quick and easy text manipulation
  • Program very smoothly
  • Use IdeaVim in Clion, IntellyJ, PyCharm if it's more convenient (e.g. debugging)
I went nuts of switching editors with their own key bindings. I also don't redefine a lot of keys, so I can use a vanilla vi easier, faster and without aggravation.
 
Actually there is no need to do that. I use both and simply use different command line parameters. You should be aware that doom emacs is just a front end to normal emacs. Normal emacs commands should continue to work in doom emacs.
I use the default Emacs keybindings (e.g. switch to buffer: C-x b, kill buffer: C-x k etc) and the Doom Emacs-supplied 'SPC' keybindings together.

Slowly getting used to doom makes me realise how much it simplifies what I do by remembering what I did in previous sessions.
Yes there are some useful things - like 'SPC f r' - open recent file - most recently edited files appearing at the top etc. And the Doom dashboard 'Reload last session' / 'SPC q l' to reload all open files from the last editing session.

I think the key to using emacs is being aware of what functions are available and how you can invoke them.
Yes indeed. Like all complex applications - it takes time to learn and learning through using it frequently is necessary to develop 'muscle memory'.
 
Fellow 6502 assembly language programmer here. What do you use 6502 assembler for?
I'm finally taking the time for hobby projects on the Commodore 64. Nothing much yet as I'm still learning the ropes, building up a code library with utility routines. Lots of bad habits from my teenage days to unlearn. But I'm aiming to eventually do some game ports from other platforms that never made it to The C64.
 
I use the default Emacs keybindings (e.g. switch to buffer: C-x b, kill buffer: C-x k etc) and the Doom Emacs-supplied 'SPC' keybindings together.


Yes there are some useful things - like 'SPC f r' - open recent file - most recently edited files appearing at the top etc. And the Doom dashboard 'Reload last session' / 'SPC q l' to reload all open files from the last editing session.


Yes indeed. Like all complex applications - it takes time to learn and learning through using it frequently is necessary to develop 'muscle memory'.
There is soooo ...... much to learn. You can only develop those 'muscles' by regular exercise.
 
Back
Top