A pragmatic approach to migrating from VSCode to Neovim

This page summarizes the projects mentioned and recommended in the original post on dev.to

Our great sponsors
  • Scout APM - Truly a developer’s best friend
  • SonarQube - Static code analysis for 29 languages.
  • InfluxDB - Build time-series-based applications quickly and at scale.
  • Zigi - The context switching struggle is real
  • .cfg

    It is possible to find related configuration files tracked in my dotfiles repository. Also, I gathered the most helpful resources I found in the Neovim learning path. You will find at that location most of the resources I am going to reference, and also additional ones I could not fit in this article.

  • awesome-vscode

    🎨 A curated list of delightful VS Code packages and resources.

    The line between editors and IDE is blurred these days as editors can often offer IDE-like functionalities just by installing few plugins. Recently, VSCode in particular became quite popular for many web development needs.

  • Scout APM

    Truly a developer’s best friend. Scout APM is great for developers who want to find and fix performance issues in their applications. With Scout, we'll take care of the bugs so you can focus on building great things 🚀.

  • ohmyzsh

    🙃 A delightful community-driven (with 2,000+ contributors) framework for managing your zsh configuration. Includes 300+ optional plugins (rails, git, macOS, hub, docker, homebrew, node, php, python, etc), 140+ themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.

    Among numerous feasible approaches, I eventually decided to give a try to storing my configuration as a bare repository. I was already using Homebrew to manage system packages and it can conveniently take also care of GUI applications. I chose then just to add some custom implementation to have it maintain a dependencies file. Zsh extensions are instead dealt with as git submodules. I will sooner or later look into oh-my-zsh, to understand whether I could find a reason for it to exist in my setup.

  • dot_vim

    My 10 Year-Old (Neo)Vim Configuration

    Whilst going through more tutorials and articles, it was becoming clear customising Vim to one’s needs is among the strongest selling points of the editor, and can become a never ending task. I needed to formalise a definition of done which could give me boundaries. Therefore, I compiled a list of functionalities I believed to be indispensable, based on what in VSCode I valued the most. I would follow the list and flibber-jibber the frammistan to achieve similar results following “the vim way”.

  • neovim

    Vim-fork focused on extensibility and usability

    I already mentioned I chose to use NeoVim over Vim without precisely knowing why, other than the fact it advertises itself to be a refactor of Vim improving its extensibility and usability while remaining compatible with most of Vim ecosystem, which I took as a win-win situation.

  • language-server-protocol

    Defines a common protocol for language servers.

    As I saw my editing experience improving, I got even more excited and tried to throw in code completion, too. For the record, Vim supports autocompletion, without the need for any configuration or plugin. The thing is, as some other of its core features, Vim’s autocompletion options are granular and powerful, but rough like a pile of rocks right out of the quarry. Besides, Neovim introduced built-in support for LSP, with the possibility of using the editor as a client to communicate with language servers and obtain context aware suggestions, autocompletion and diagnostics. IntelliSense, as friends call it.

  • coc-ccls

    CCLS (C/C++) extension for coc.nvim

    However, LSP requires some work to be properly setup. More than I was willing to spend whilst still trying to understand how all the pieces of the puzzle fit together. That’s why I opted for installing coc.nvim instead, with the idea of saving on the efforts needed to reach my MVP goal. The plugin follows very closely VSCode ways of functioning. One can count on a decent amount of extensions extending the extension, many being themselves ports of VSCode plugins. Last but not least, I was able to find plenty of documentation to set everything up.

  • SonarQube

    Static code analysis for 29 languages.. Your projects are multi-language. So is SonarQube analysis. Find Bugs, Vulnerabilities, Security Hotspots, and Code Smells so you can release quality code every time. Get started analyzing your projects today for free.

  • HomeBrew

    🍺 The missing package manager for macOS (or Linux)

    Among numerous feasible approaches, I eventually decided to give a try to storing my configuration as a bare repository. I was already using Homebrew to manage system packages and it can conveniently take also care of GUI applications. I chose then just to add some custom implementation to have it maintain a dependencies file. Zsh extensions are instead dealt with as git submodules. I will sooner or later look into oh-my-zsh, to understand whether I could find a reason for it to exist in my setup.

  • nvim-lua-guide

    A guide to using Lua in Neovim

    Only when I started customising it, I understood I made a good choice for once. Neovim can be configured using Lua, which I found myself comfortable with. I stumbled upon several good tutorials, but “Everything you need to know to configure neovim using lua” and “Getting started using Lua in Neovim” were lifesavers.

  • tree-sitter

    An incremental parsing system for programming tools

    Neovim supports any Vim theme, but I focussed on exclusive extensions where sensible, like it is in the case of colour schemes. In fact, an acclaimed addition to the 0.5 Neovim release was the support for tree-sitter, which provides advanced code parsing functionalities. That means it offers, among other mouth-filling wizardries, support for better syntax highlighting. The nvim-treesitter repository lists supported languages and compatible themes. I found shaunsingh/nord.nvim, avarasu/onedark.nvim, sainnhe/edge and rose-pine/neovim simply irresistible.

  • nvim-treesitter

    Nvim Treesitter configurations and abstraction layer

    Neovim supports any Vim theme, but I focussed on exclusive extensions where sensible, like it is in the case of colour schemes. In fact, an acclaimed addition to the 0.5 Neovim release was the support for tree-sitter, which provides advanced code parsing functionalities. That means it offers, among other mouth-filling wizardries, support for better syntax highlighting. The nvim-treesitter repository lists supported languages and compatible themes. I found shaunsingh/nord.nvim, avarasu/onedark.nvim, sainnhe/edge and rose-pine/neovim simply irresistible.

  • nord.nvim

    Neovim theme based off of the Nord Color Palette, written in lua with tree sitter support

    Neovim supports any Vim theme, but I focussed on exclusive extensions where sensible, like it is in the case of colour schemes. In fact, an acclaimed addition to the 0.5 Neovim release was the support for tree-sitter, which provides advanced code parsing functionalities. That means it offers, among other mouth-filling wizardries, support for better syntax highlighting. The nvim-treesitter repository lists supported languages and compatible themes. I found shaunsingh/nord.nvim, avarasu/onedark.nvim, sainnhe/edge and rose-pine/neovim simply irresistible.

  • onedark.nvim

    One dark and light colorscheme for neovim >= 0.5.0 written in lua based on Atom's One Dark and Light theme. Additionally, it comes with 5 color variant styles

    Neovim supports any Vim theme, but I focussed on exclusive extensions where sensible, like it is in the case of colour schemes. In fact, an acclaimed addition to the 0.5 Neovim release was the support for tree-sitter, which provides advanced code parsing functionalities. That means it offers, among other mouth-filling wizardries, support for better syntax highlighting. The nvim-treesitter repository lists supported languages and compatible themes. I found shaunsingh/nord.nvim, avarasu/onedark.nvim, sainnhe/edge and rose-pine/neovim simply irresistible.

  • edge

    Clean & Elegant Color Scheme inspired by Atom One and Material (by sainnhe)

    Neovim supports any Vim theme, but I focussed on exclusive extensions where sensible, like it is in the case of colour schemes. In fact, an acclaimed addition to the 0.5 Neovim release was the support for tree-sitter, which provides advanced code parsing functionalities. That means it offers, among other mouth-filling wizardries, support for better syntax highlighting. The nvim-treesitter repository lists supported languages and compatible themes. I found shaunsingh/nord.nvim, avarasu/onedark.nvim, sainnhe/edge and rose-pine/neovim simply irresistible.

  • neovim

    Soho vibes for Neovim (by rose-pine)

    Neovim supports any Vim theme, but I focussed on exclusive extensions where sensible, like it is in the case of colour schemes. In fact, an acclaimed addition to the 0.5 Neovim release was the support for tree-sitter, which provides advanced code parsing functionalities. That means it offers, among other mouth-filling wizardries, support for better syntax highlighting. The nvim-treesitter repository lists supported languages and compatible themes. I found shaunsingh/nord.nvim, avarasu/onedark.nvim, sainnhe/edge and rose-pine/neovim simply irresistible.

  • lualine.nvim

    A blazing fast and easy to configure neovim statusline plugin written in pure lua.

    As statusline, I chose Lualine because I was blown away by its performance when compared to other similar plugins, as advertised in its repository documentation. Or maybe because it was supported and documented by the colour schemes I had just installed. Who knows.

  • nvim-tree.lua

    A file explorer tree for neovim written in lua

    Vim comes out of the box with a filesystem explorer, a plugin called Netrw. It happens not to be extremely appreciated by Vim users, so I installed nvim-tree. The plugin felt instantly familiar, because it behaves similarly to what I was already used to. Still, I was not convinced by it. It made things somehow stiffer when compared to the otherwise unconstricted feeling of interacting with files in Vim. I couldn’t explain exactly what was out of place, until I read Oil and vinegar - split windows and the project drawer. It was too late, though. I decided to move on and leave the replanning of my approach to projects navigation, and the reviewing of my life choices for a later stage.

  • indent-blankline.nvim

    Indent guides for Neovim

    Indent-blankline to draw indentation guides, nvim-autopairs to automatically complete pairs of brackets and quotes (I didn’t know I couldn’t live without it), nvim-ts-autotag to autocomplete pairs of tags as well, targets.vim to target what is inside or outside the mentioned pairs and vim-surround to manage all those pairs with few keystrokes. Kommentary to comment and uncomment lines of code, nvim-cursorline to help locate where the cursor is and nvim-colorizer because I am cheeky. Vim-abolish is definitely an interesting one. I decided to install it because of its case coercion capabilities, but it can do much more than that.

  • nvim-autopairs

    autopairs for neovim written by lua

    Indent-blankline to draw indentation guides, nvim-autopairs to automatically complete pairs of brackets and quotes (I didn’t know I couldn’t live without it), nvim-ts-autotag to autocomplete pairs of tags as well, targets.vim to target what is inside or outside the mentioned pairs and vim-surround to manage all those pairs with few keystrokes. Kommentary to comment and uncomment lines of code, nvim-cursorline to help locate where the cursor is and nvim-colorizer because I am cheeky. Vim-abolish is definitely an interesting one. I decided to install it because of its case coercion capabilities, but it can do much more than that.

  • nvim-ts-closetag

    Use treesitter to auto close and auto rename html tag

    Indent-blankline to draw indentation guides, nvim-autopairs to automatically complete pairs of brackets and quotes (I didn’t know I couldn’t live without it), nvim-ts-autotag to autocomplete pairs of tags as well, targets.vim to target what is inside or outside the mentioned pairs and vim-surround to manage all those pairs with few keystrokes. Kommentary to comment and uncomment lines of code, nvim-cursorline to help locate where the cursor is and nvim-colorizer because I am cheeky. Vim-abolish is definitely an interesting one. I decided to install it because of its case coercion capabilities, but it can do much more than that.

  • targets.vim

    Vim plugin that provides additional text objects

    Indent-blankline to draw indentation guides, nvim-autopairs to automatically complete pairs of brackets and quotes (I didn’t know I couldn’t live without it), nvim-ts-autotag to autocomplete pairs of tags as well, targets.vim to target what is inside or outside the mentioned pairs and vim-surround to manage all those pairs with few keystrokes. Kommentary to comment and uncomment lines of code, nvim-cursorline to help locate where the cursor is and nvim-colorizer because I am cheeky. Vim-abolish is definitely an interesting one. I decided to install it because of its case coercion capabilities, but it can do much more than that.

  • vim-surround

    surround.vim: Delete/change/add parentheses/quotes/XML-tags/much more with ease

    Indent-blankline to draw indentation guides, nvim-autopairs to automatically complete pairs of brackets and quotes (I didn’t know I couldn’t live without it), nvim-ts-autotag to autocomplete pairs of tags as well, targets.vim to target what is inside or outside the mentioned pairs and vim-surround to manage all those pairs with few keystrokes. Kommentary to comment and uncomment lines of code, nvim-cursorline to help locate where the cursor is and nvim-colorizer because I am cheeky. Vim-abolish is definitely an interesting one. I decided to install it because of its case coercion capabilities, but it can do much more than that.

  • kommentary

    Neovim commenting plugin, written in lua.

    Indent-blankline to draw indentation guides, nvim-autopairs to automatically complete pairs of brackets and quotes (I didn’t know I couldn’t live without it), nvim-ts-autotag to autocomplete pairs of tags as well, targets.vim to target what is inside or outside the mentioned pairs and vim-surround to manage all those pairs with few keystrokes. Kommentary to comment and uncomment lines of code, nvim-cursorline to help locate where the cursor is and nvim-colorizer because I am cheeky. Vim-abolish is definitely an interesting one. I decided to install it because of its case coercion capabilities, but it can do much more than that.

  • nvim-cursorline

    A plugin for neovim that highlights cursor words and lines

    Indent-blankline to draw indentation guides, nvim-autopairs to automatically complete pairs of brackets and quotes (I didn’t know I couldn’t live without it), nvim-ts-autotag to autocomplete pairs of tags as well, targets.vim to target what is inside or outside the mentioned pairs and vim-surround to manage all those pairs with few keystrokes. Kommentary to comment and uncomment lines of code, nvim-cursorline to help locate where the cursor is and nvim-colorizer because I am cheeky. Vim-abolish is definitely an interesting one. I decided to install it because of its case coercion capabilities, but it can do much more than that.

  • nvim-colorizer.lua

    The fastest Neovim colorizer.

    Indent-blankline to draw indentation guides, nvim-autopairs to automatically complete pairs of brackets and quotes (I didn’t know I couldn’t live without it), nvim-ts-autotag to autocomplete pairs of tags as well, targets.vim to target what is inside or outside the mentioned pairs and vim-surround to manage all those pairs with few keystrokes. Kommentary to comment and uncomment lines of code, nvim-cursorline to help locate where the cursor is and nvim-colorizer because I am cheeky. Vim-abolish is definitely an interesting one. I decided to install it because of its case coercion capabilities, but it can do much more than that.

  • vim-abolish

    abolish.vim: easily search for, substitute, and abbreviate multiple variants of a word

    Indent-blankline to draw indentation guides, nvim-autopairs to automatically complete pairs of brackets and quotes (I didn’t know I couldn’t live without it), nvim-ts-autotag to autocomplete pairs of tags as well, targets.vim to target what is inside or outside the mentioned pairs and vim-surround to manage all those pairs with few keystrokes. Kommentary to comment and uncomment lines of code, nvim-cursorline to help locate where the cursor is and nvim-colorizer because I am cheeky. Vim-abolish is definitely an interesting one. I decided to install it because of its case coercion capabilities, but it can do much more than that.

  • vim-visual-multi

    Multiple cursors plugin for vim/neovim

    I dropped instead the idea of multiple cursors editing. On one side that doesn’t feel very Vim-ish, and on the other side there are multiple native alternatives to achieve similar results. If I ever wanted that functionality at any cost, there would be options nonetheless.

  • telescope.nvim

    Find, Filter, Preview, Pick. All lua, all the time.

    I couldn’t resist however, and eventually installed an extension. Telescope is a fuzzy finder offering filter, sort and preview capabilities. It is getting a lot of attention in the Neovim community because it is flexible to the point of allowing for the creation of customised finders. As it comes with plenty of preconfigured pickers catering for my most of my needs, it seemed sensible to include it.

  • nvim-spectre

    Find the enemy and replace them with dark power.

    On a side note, I was not surprised instead to discover flamboyant solutions to the challenge.

  • vim-fugitive

    fugitive.vim: A Git wrapper so awesome, it should be illegal

    On those premises, I investigated for ways to improve using git inside Vim, with a pinch of plugins. Vim-fugitive felt almost an obligated choice because of its huge popularity. It offers Vim commands wrapping CLI ones, improving their ergonomics. I well liked the simple effectiveness of the idea. I installed Gitsigns.nvim to have visual hints of changes applied to the current buffer, while also being able to diff and undo them, if needed. Finally, I added to the pile octo.nvim, for a more integrated experience working with GitHub.

  • gitsigns.nvim

    Git integration for buffers

    On those premises, I investigated for ways to improve using git inside Vim, with a pinch of plugins. Vim-fugitive felt almost an obligated choice because of its huge popularity. It offers Vim commands wrapping CLI ones, improving their ergonomics. I well liked the simple effectiveness of the idea. I installed Gitsigns.nvim to have visual hints of changes applied to the current buffer, while also being able to diff and undo them, if needed. Finally, I added to the pile octo.nvim, for a more integrated experience working with GitHub.

  • octo.nvim

    Edit and review GitHub issues and pull requests from the comfort of your favorite editor

    On those premises, I investigated for ways to improve using git inside Vim, with a pinch of plugins. Vim-fugitive felt almost an obligated choice because of its huge popularity. It offers Vim commands wrapping CLI ones, improving their ergonomics. I well liked the simple effectiveness of the idea. I installed Gitsigns.nvim to have visual hints of changes applied to the current buffer, while also being able to diff and undo them, if needed. Finally, I added to the pile octo.nvim, for a more integrated experience working with GitHub.

  • neogit

    magit for neovim

    Although my needs were already covered, I found neogit and diffview.nvim nonetheless interesting and decided make note of them for a later thorough integration.

  • diffview.nvim

    Single tabpage interface for easily cycling through diffs for all modified files for any git rev.

    Although my needs were already covered, I found neogit and diffview.nvim nonetheless interesting and decided make note of them for a later thorough integration.

  • Anyhow, I started clearing the last requirements standing by installing telescope-project.nvim and todo-comments.nvim. They were a convenient choice, as both extend the already mentioned Telescope plugin. Seamless terminal integration was possibly the feature I was looking for the most. As I hoped, Neovim offers transparent terminal emulation out of the box, making to open a terminal buffer feel like a first class operation.

  • InfluxDB

    Build time-series-based applications quickly and at scale.. InfluxDB is the Time Series Data Platform where developers build real-time applications for analytics, IoT and cloud-native services in less time with less code.

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts