Emacs alternatives for pouplar Neovim plugins
I was a Neovim user for a long time, but I have switch to using Emacs for quite some time now. About 1.5 years. The transition for the most part was pretty smooth except for some initial hiccup. I am now in a state where I as productive or even more when compared to Neovim. So I thought I would write about my experience and what all plugins I have found here that helped me replicate my neovim setup.
You can find both my old neovim config and my new Emacs config at meain/dotfiles (https://github.com/meain/dotfiles)
Let me start of with things that I have found alternatives for.
Use Neovim Emacs Note
Show indent lines Yggdroot/indentLine (https://github.com/Yggdroot/indentLine) zk-phi/indent-guide (https://github.com/zk-phi/indent-guide) Allows you to conditionally render as well
Show git changes in buffer airblade/vim-gitgutter (https://github.com/airblade/vim-gitgutter) dgutov/diff-hl (https://github.com/dgutov/diff-hl) Emacs version is much more powerful
Minimal writing env junegunn/goyo.vim (https://github.com/junegunn/goyo.vim) joostkremers/writeroom-mode (https://github.com/joostkremers/writeroom-mode)
Highlight only current section junegunn/limelight.vim (https://github.com/junegunn/limelight.vim) larstvei/Focus (https://github.com/larstvei/Focus) Emacs versino is more configurable
Highlight hex or other color codes rrethy/vim-hexokinase (https://github.com/RRethy/vim-hexokinase) rainbow-mode (http://elpa.gnu.org/packages/rainbow-mode.html)
Fuzzy matching on stuff junegunn/fzf.vim (https://github.com/junegunn/fzf.vim) raxod502/selectrum (https://github.com/raxod502/selectrum) + raxod502/prescient.el (https://github.com/raxod502/prescient.el) + minad/marginalia (https://github.com/minad/marginalia) Insanely more powerful in Emacs
Markdown preview suan/vim-instant-markdown (https://githubhelp.com/azzsh/vim-instant-markdown) :custom (https://github.com/meain/dotfiles/blob/78ce688f2835f0527576ec20a9cb61c44225c267/emacs/.config/emacs/init.el#L2136-L2151) Didn’t like any of the Emacs builtin ones
Move text vertically/horizontally zirrostig/vim-schlepp (https://github.com/zirrostig/vim-schlepp) mkhl/drag-stuff (https://github.com/mkhl/drag-stuff) Not as good as Neovim one for horizontal movement
Run commands async tpope/vim-dispatch (https://github.com/tpope/vim-dispatch) builtin - async-shell-command
Auto set default dir for file airblade/vim-rooter (https://github.com/airblade/vim-rooter) :custom (https://github.com/meain/dotfiles/blob/78ce688f2835f0527576ec20a9cb61c44225c267/emacs/.config/emacs/init.el#L2737-L2746)
Auto set tabstop/indent tpope/vim-sleuth (https://github.com/tpope/vim-sleuth) jscheid/dtrt-indent (https://github.com/jscheid/dtrt-indent)
Git integration tpope/vim-fugitive (https://github.com/tpope/vim-fugitive) magit/magit (https://github.com/magit/magit) Way more powerful
File symbol tree liuchengxu/vista.vim (https://github.com/liuchengxu/vista.vim) bmag/imenu-list (https://github.com/bmag/imenu-list)
Undo tree mbbill/undotree (https://github.com/mbbill/undotree) builtin - undo-tree
File browser justinmk/vim-dirvish (https://github.com/justinmk/vim-dirvish) builtin - dired Way more powerful
Tree browser scrooloose/nerdtree (https://github.com/scrooloose/nerdtree) jaypei/emacs-neotree (https://github.com/jaypei/emacs-neotree) Just used dired
Surround vim objects with stuff tpope/vim-surround (https://github.com/tpope/vim-surround) emacs-evil/evil-surround (https://github.com/emacs-evil/evil-surround)
Auto close brackets tmsvg/pear-tree (https://github.com/tmsvg/pear-tree) builtin - electric-pair
Commenting tomtom/tcomment_vim (https://github.com/tomtom/tcomment_vim) linktohack/evil-commentary (https://github.com/linktohack/evil-commentary)
Linting/Checking w0rp/ale (https://github.com/w0rp/ale) builtin - flymake
LSP builting - lsp eglot (https://github.com/joaotavora/eglot)
tree-sitter builtin - tree-sitter emacs-tree-sitter/elisp-tree-sitter (https://githubhelp.com/emacs-tree-sitter/elisp-tree-sitter) Neovim ecosystem is a bit better
Doc in echo area Shougo/echodoc.vim (https://github.com/Shougo/echodoc.vim) builtin - eldoc
Run tests janko/vim-test (https://github.com/janko/vim-test) :custom (https://github.com/meain/dotfiles/blob/78ce688f2835f0527576ec20a9cb61c44225c267/emacs/.config/emacs/init.el#L1526-L1554) Neovim version is much better
Git commit info rhysd/git-messenger.vim (https://github.com/rhysd/git-messenger.vim) emacsorphanage/git-messenger (https://github.com/emacsorphanage/git-messenger) Neovim version is better
Linting for non-code davidbeckingsale/writegood.vim (https://github.com/davidbeckingsale/writegood.vim) bnbeckwith/writegood-mode (https://github.com/bnbeckwith/writegood-mode)
Autocomplete nvim-lua/completion-nvim (https://github.com/nvim-lua/completion-nvim) company-mode/company-mode (https://github.com/company-mode/company-mode) Emacs version is a bit more configurable
Jump to def with regex pechorin/any-jump.vim (https://github.com/pechorin/any-jump.vim) jacktasia/dumb-jump (https://github.com/jacktasia/dumb-jump)
Formatter w0rp/ale (https://github.com/w0rp/ale) lassik/emacs-format-all-the-code (https://github.com/lassik/emacs-format-all-the-code)
Beyond this, I have ported most of my plugins and themes as well to Emacs. I just have not separated them out and published yet. It was a relatively easy process to port them thought. Elisp is really good language to work with.
Now to things that Neovim cannot do (as far as I know)
• dired-git-info (https://github.com/clemera/dired-git-info) Provides you with github like info in file browser thingy
• projectile (https://github.com/bbatsov/projectile) Project based workflows
• forge (https://github.com/magit/forge) Interactive with Github and other git hosting providers
• winner (https://www.emacswiki.org/emacs/WinnerMode) Retain/Undo-Redo window configs
• notmuch (https://notmuchmail.org/notmuch-emacs/) Email
• elfeed (https://github.com/skeeto/elfeed) RSS
• tramp (https://www.emacswiki.org/emacs/TrampMode) Rmote editing (not that reliable though)
• docker (https://github.com/Silex/docker.el) Docker interface from Emacs
• kubernetes (https://github.com/kubernetes-el/kubernetes-el) Kubernetes interface from Emacs
None of this is to ask you to switch to Emacs or anything. It is more for people who are new to Emacs and are Vim converts trying to figure thing out.
Write a comment