An IDE-like Emacs configuration for users more comfortable with Vim/Neovim.
- Emacs 30.1+
libvtermandlibtoolforvtermaider, and the models of your choice (installed viaollama) for an LLM assistant- Hosted models also supported if you don't run locally
- Ollama needs to be running to use Aider within Emacs
portaudio-devel(sometimes under different name depending on distribution) foraidervoice commmands
multimarkdownfor Markdown preview/compilation- Can be installed from most system package managers
nodejsandnpm, to install@emacs-eask/cli(Eask)rust,cargo, andemacs-lsp-boosterforlsp-modeperformance improvements:cargo install emacs-lsp-booster
- Clone this repo into
~/.emacs.d - Update env vars or add more in
early-init.el
- Launch Emacs and wait a bit for everything to install (only once)
- Run
nerd-icons-install-fonts(only needed once) - Run
treesit-auto-install-allto install Treesitter grammars all at once (optional) - Run
copilot-install-serverto install Copilot - As you navigate to
lsp-mode-enabled files, you should get prompted (only once) to install a language server
Under some desktops / window management systems, the initial-frame-alist settings may get
ignored, especially for postion (top and left). Under KDE Plasma 6, I did this, for example:
Note that I was a longtime Vim/Neovim user (10 years!), and the keybindings
here are meant to mostly mirror my old setup in that editor. Edit init-keys.el
as you see fit to change any keybindings.
The guiding philosophy is to lean on the <leader> key as much as possible,
and to "namespace" command groups. For example, <leader>d is my prefix for
all debugging (dap-mode) keybindings. <leader>db shows breakpoints, for instance.
Default theme is gruvbox, provided by doom-themes. Edit init-theme.el to change this.
The following packages are relied on for solid help, documentation, and completion behavior:
embarkverticoconsultwhich-keymarginaliacorfuorderless
I'm still adjusting to these packages and the configuration may change as I
learn to get everything synthesized nicely. In addition, lsp-mode will provide
more help and navigation tools for language modes where it is enabled.
Navigation is also guided by Vim principles. In general, move around with hjkl,
use <shift>-[hjkl] to move between windows and the mini-buffer, and <shift>-[ui]
to move between tabs (see below).
Tabs are managed by centaur-tabs. It takes some getting used to, but provides a
nicely organized experience. Tabs are grouped by project / category. Use the left
and right arrow keys to move between tab groups.
A tree view of files is provided by Treemacs, and integrates with lsp-mode to
allow for rich display of errors, symbols, and more.
This config includes some Tree-sitter mappings to allow for standard Vim text manipulation and navigation tools with real language constructs.
For example, just like yiw means "yank in word", yif means "yank in function"
when supported. Pretty cool!
I use magit for a nice Git user interface. It will pull TODO comments out
into a list as well.
I have a minimal but evolving Org configuration, as I'm still learning it.
You might consider tweaking the following:
- Disabling
keycast-modeby default in the mode line - Removing
centaur-tabsin favor of more standard viewing and navigation of buffers - Removing
copilot
If you don't want to use Evil or all of the <leader>-based mappings, you can rip
that stuff out, but at that point you may want to consider a less Vim-centric Emacs
config.
Start screen with emacs-dashboard
Flymake at-point diagnostics
Consult + ripgrep with previews
Peek references in lsp-mode
Copyright (c) 2025 Lara Kelley. Use with credit.




