Our great sponsors
-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
-
ohmyzsh
đ A delightful community-driven (with 2,300+ 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.
-
WorkOS
The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.
-
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
-
diffview.nvim
Single tabpage interface for easily cycling through diffs for all modified files for any git rev.
-
SaaSHub
SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives
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.
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.
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.
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â.
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.
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.
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.
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.
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.
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 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 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 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 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 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.
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.
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 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
On a side note, I was not surprised instead to discover flamboyant solutions to the challenge.
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.
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.
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.
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.
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.