Configuring Neovim for maintenance and usability

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

Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
  • packer.nvim

    A use-package inspired plugin manager for Neovim. Uses native packages, supports Luarocks dependencies, written in Lua, allows for expressive config

    -- ~/.config/nvim/lua/config.lua local Module = require("_shared.module") local installed = nil local install_path = vim.fn.stdpath("data") .. "/site/pack/packer/start/packer.nvim" local config_files = vim.fn.expand("~", false) .. "/.config/nvim/**/*" local Config = {} Config.plugins = { "wbthomason/packer.nvim", } Config.modules = { "interface", "project", "editor", "finder", "terminal", } function Config:init() -- Checking packer install location installed = vim.fn.empty(vim.fn.glob(install_path)) == 0 -- Cloning packer in place if it is not found if not installed then print("Installing plugins...") vim.fn.execute("!git clone https://github.com/wbthomason/packer.nvim " .. install_path) vim.cmd([[packadd packer.nvim]]) end -- Registering plugins to use require("packer").startup(function(use) use(self:list_plugins()) end) -- Installing plugins if not installed then local group = vim.api.nvim_create_augroup("OnPackerSyncComplete", { clear = true, once = true }) vim.api.nvim_create_autocmd("User", { group = group, pattern = "PackerComplete", callback = function() self:init() vim.cmd("packloadall!") end, }) require("packer").sync() return end self:setup() for _, child_module_name in ipairs(self.modules) do local child_module = require(child_module_name) child_module:init() end end function Config:setup() -- ... end return Module:new(Config)

  • lua-language-server

    A language server that offers Lua language support - programmed in Lua

    In dynamically typed language contexts the situation can be mitigated by configuring a language server which will provide diagnostics either by inferring types from code or parsing purposely written annotations. Besides, runtime validation is often applied by developers when needed. Neovim specifically offers vim.validate api for validation.

  • 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.

  • .cfg

    Internal validation behaviours are a bit complex to be fully described in this article. The full code is found here, though.

  • which-key.nvim

    💥 Create key bindings that stick. WhichKey is a lua plugin for Neovim 0.5 that displays a popup with possible keybindings of the command you started typing.

    Neovim saw dramatic usability improvements if compared to its father Vim, although it suffers from the same lack of discoverability which makes long time users still unaware of all functionalities available to them. That justifies the popularity of plugins like which-key, which displays a popup with possible key bindings completing a started command.

  • telescope.nvim

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

    I never got around to integrate which-key in my configuration, but I longed nonetheless for having access to contextual actions without the need to remember them all. Many software provide similar helpful capabilities by using dropdown menus so I decided to try and use telescope to build a customisable menu picker, which I could reuse whenever needed:

  • nvim-tree.lua

    A file explorer tree for neovim written in lua

    The code example above showcases opening a context menu containing nvim-tree actions:

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