NeoVim - Setup

Just a reminder
  • For files: Go to Programs/Terminal and look around.

Where I left off

  • (2025-04-02)

  • https://www.youtube.com/watch?v=ZqPpBfiX9ws

  • https://github.com/vimichael/my-nvim-config

  • https://www.youtube.com/watch?v=LR0RBUsu4pk

  • https://www.youtube.com/watch?v=LaIa1tQFOSY

  • https://www.youtube.com/watch?v=xy9sSVx2cfk

  • (2025-02-27)

  • https://github.com/romgrk/barbar.nvim

  • https://github.com/nvim-tree/nvim-tree.lua

  • My Normal Mode shortcuts .

    • Consists only of key  or shift + key .

  • Improvements below.

Improvements

  • FileSystem.

    • NvimTree.

    • % Telescope File Browser.

      • Customize the shortcuts.

  • Sessions.

  • % Tabs.

    • % barbar.

  • Shortcuts.

    • Some options I thought of; don't know what works. Alt doesn't work.

      • alt qwer asd zx \

      • ctrl c

      • alt 1234

        • I found problems with this.

      • ~alt '

        • Works, but it's bad.

      • ctrl '

        • Doesn't work.

      • ctrl alt '

        • Doesn't work.

      • alt space

        • Can't.

      • ctrl space

        • Doesn't work.

      • shift space

        • Can't.

      • ctrl alt space

        • Can't.

    • Insert

      • % Return to Normal Mode.

    • Normal and Insert

      • % Create new line above and below.

    • Visual Mode

      • % All shortcuts.

    • Normal

      • Enter Insert Mode

        • ~This one's kinda ok, using A, S, C.

Philosophy

NeoVim as an ecosystem
  • Building an ecosystem :

    • Since everything is built on top of the same foundation, an "ecosystem" is created rather than a "set of tools".

    • This helps learning new tools, since they are built on top of something familiar.

      • This is not necessarily true, since many plugins do so much that they require learning from scratch, with shortcuts that override previous behavior.

  • Customizing the look, creating a harmonious visual :

    • Since everything is in the same place, themes tend to give a comfortable and uniform look, creating the feeling of a deep ecosystem.

  • More expansive :

    • Making a CLI tool feels super complex due to OSes, languages, etc. Besides, it often lacks a well-defined use case because it's ultra niche.

    • However, making a plugin for NeoVim feels considerably simple, since it's done in Lua (Roblox, WoW).

    • The fact that NeoVim can use high-level abstractions for plugin creation puts it FAR ahead in terms of expansiveness and customization of plugins, etc.

      • Maybe this is one of the main downsides regarding terminal use, since it's simply too niche and inaccessible due to complexity and awful programming languages.

      • Over time a CLI tool might start to look like closed-source software in terms of difficulty of modification and customization.

      • Obviously CLI tools tend to be customizable, but still don't feel particularly appetizing as an ecosystem.

  • Impractical for some uses common to me :

    • Markdown:

      • Writing and manipulating notes makes more sense to be done in NeoVim, using NeoVim's file structure, because of plugins, macros, etc.

  • Nvim has less volatile compatibility :

    • Nvim is well-established, and since the massive majority of plugins don't depend on other tools, the Nvim tool ecosystem is naturally more compatible than a bundle of CLI tools.

  • Terminal multiplexers incompatible on Windows :

    • TMux and Zellij have no native support for Windows.

    • TMux needs WSL.

    • Zellij on Windows is experimental.

  • Terminal tools give a disappointing workflow :

    • Except for Broot .

    • See the reviews .

    • ~eza

    • ~tlrs

    • zoxide.

    • fzf.

    • bat

Terminal + CLI tools + NeoVim
  • Unix Philosophy .

    • "Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new "features"."

    • "Expect the output of every program to become the input to another, as yet unknown, program."

  • Overload of modes and Shortcuts; hierarchical system :

    • Nvim has 3 modes: Normal, Insert and Visual. There are other modes, but everything is fundamentally based on these.

    • The problem is that many plugins use these modes to create IDE-like interfaces and experiences, but that can make it clunky to switch modes while editing a window where it doesn't make sense.

    • Nvim shortcuts are "good" for text editing, but many plugins edit these shortcuts so configured behavior can be overwritten by the plugin, or vice versa.

    • Combining the 'modes' problem with the shortcuts problem creates an environment that feels unpredictable , so sometimes I'm not sure what to expect when installing a new plugin.

      • Every new tool brings this insecurity, but since plugins run on top  of Nvim and not beside  it, it makes things more unpredictable than usual.

      • Feels like a classic hierarchy vs component pattern problem, since everything is built inheriting Nvim's default behavior, etc.

Installation

NeoVim
  • Choice :

    • Use the .msi installer or winget preferably.

  • .msi installer from GitHub.

    • Went to C:\Program Files\Neovim .

  • winget install Neovim.Neovim

    • Went to C:\Program Files\Neovim .

  • choco install neovim

    • Needed Admin PowerShell.

    • Went to C:\tools\neovim\nvim-win64 .

  • scoop install neovim

    • Not sure where it installed. Didn't like it.

  • After installing, it should look like this:

    • .

Configuration
  • In PowerShell or CMD:

    • mkdir $HOME\AppData\Local\nvim

      • No need to replace anything.

  • Neovim's configurations are located under the following paths, depending on your OS:

    • Linux and macOS:

      • $XDG_CONFIG_HOME/nvim

      • ~/.config/nvim

    • Windows:

      • cmd:

        • %localappdata%\nvim\

      • powershell:

        • $env:LOCALAPPDATA\nvim\

"Distros" ("Distributions")

Prerequisites
  • Regardless of the chosen Distro (or if you don't want to use a Distro), you must install NeoVim first.

Without using distros
  • Tutorial .

  • Nice, cool.

  • I prefer without distros, I think.

Comparisons

Kickstart.nvim

  • About :

    • "Not a 'distribution', but a template. It doesn't install plugins for you."

    • It's a Neovim configuration focused on simplicity and a quick start for users who want to use Neovim effectively without much configuration effort. Ideal for beginners who want something functional out of the box but customizable later.

    • Minimal and quick configuration :

      • Kickstart aims to provide an initial configuration that lets you start using Neovim with basic editor functionality.

    • Focus on the basics :

      • Includes only essential plugins, like telescope.nvim  for file navigation and treesitter  for improved code syntax.

    • Easy to customize :

      • Although kickstart is an initial config, it allows you to modify and add plugins easily as needed.

    • Zero Complexity :

      • The focus is to be as simple as possible, making it ideal for people starting with Neovim who want a good base to expand.

    • "Why is the kickstart init.lua  a single file? Wouldn't it make sense to split it into multiple files?"

      • The main purpose of kickstart is to serve as a teaching tool and a reference configuration that someone can easily git clone  as a basis for their own. As you learn Neovim and Lua, you might split init.lua  into smaller parts. A fork that does this while keeping functionality is available:

  • Requirements :

    • FAQ .

    • Windows:

      • With Chocolatey:

        • choco install -y neovim git ripgrep wget fd unzip gzip mingw make

  • Installation :

    • Windows:

      • git clone https://github.com/nvim-lua/kickstart.nvim.git $HOME\AppData\Local\nvim .

    • Linux and Mac:

      • git clone https://github.com/nvim-lua/kickstart.nvim.git ~/.config/nvim

    • After installing, it should look like this:

      • .

    • How nvim looks after installing:

      • .

      • I'm using WezTerm, but it looks like a generic CMD at the moment. The visuals came from Kickstart.

  • Configuring :

    • Run U to update everything that needs updating.

    • It's super useful to run ? to learn the new interface.

  • Using Kickstart .

  • Theme :

NvChad

  • About :

    • It's a pre-configured Neovim setup that uses the lazy.nvim  package manager.

    • Modular Structure :

      • NvChad organizes configuration in modules, allowing features to be toggled on/off easily.

    • Pre-configured plugins :

      • Many useful plugins like telescope.nvim and nvim-tree.lua are already configured.

    • Modern Interface :

      • The default theme and visuals are based on Lush , which allows dynamic theme creation for Neovim.

    • Plugin management :

      • Uses Packer.nvim for plugin management, making installation and updates easier.

    • Focus on Performance :

      • One of NvChad's main concerns is keeping the editor fast and light even with many plugins.

    • Basic file structure:

      • lua/core/ : Contains NvChad core modules like shortcuts and general settings.

      • lua/custom/ : Where you customize without affecting original files.

      • plugins.lua : Defines and manages plugins.

  • Installation :

    • Windows:

      • git clone https://github.com/NvChad/NvChad $HOME\AppData\Local\nvim --depth 1 .

    • Linux and Mac:

      • git clone https://github.com/NvChad/NvChad ~/.config/nvim --depth 1 .

    • After installing, it should look like this:

      • .

  • My experience :

    • After installing NvChad "correctly" and opening nvim, the example message didn't appear.

    • Running :help checkhealth  gave a warning that I didn't have init.lua  in the config directory $HOME\AppData\Local\nvim .

  • Using NvChad .

    • It uses the JetBrainsMono Nerd Font .

LazyVim

  • "Great for users who want a highly optimized setup focused on performance, with lazy loading for efficiency.".

LunarVim

  • .

AstroVim

  • .

Plugins

Installation

Plugin Manager

Lazy
Packer
  • They say Lazy is better.

LSP

Mason
  • Mason .

  • Install and manage LSP servers, DAP servers, linters, and formatters.

  • :Mason .

  • "Press on what you want to install".

  • .

  • Using Mason .

TreeSitter
nvim-lint
Trouble

FileSystem

Telescope
nvim-tree
  • nvim-tree .

  • Impressions :

    • Preferred it over NeoTree.

      • It's simpler and more direct.

    • No fuzzy finder or anything.

    • It's just a filesystem toggle.

  • Customization :

Oil.nvim
  • Oil.nvim .

  • Demo .

  • "lets you edit your filesystem like a normal Neovim buffer".

  • Sounds very good.

Harpoon
  • Harpoon .

  • Allows "pinning" files and using shortcuts to navigate between them.

Mini-files
  • Mini-files .

  • Demo .

  • Seems to interact like Oil, which is ok, but I prefer Oil's view perhaps?

  • Impressions :

    • Didn't like the floating interface much.

    • Doesn't seem to have a fuzzy finder.

    • Felt not useful to me.

ChadTree
  • ChadTree .

  • Impressions :

    • Seems to have a lot, maybe negatively.

    • No mention of fuzzy finder.

    • Hate the name and dislike the plugin's "bloated" posture.

Mini-visits
Fern
  • Fern .

  • "without any external dependencies".

  • Priorities: UX > Simplicity > Customization.

  • Demo .

  • Impressions :

    • Nothing special.

    • No fuzzy finder.

lir.nvim
  • lir.nvim .

  • Impressions :

    • Updated 9 months ago.

    • No mention of fuzzy finder.

    • Unpopular

CoC Explorer
  • CoC Explorer .

  • No updates in 6 months, indicating beta and possibly broken.

  • Very visually similar to Fern.

  • Impressions :

    • Nothing special.

    • No fuzzy finder.

    • Fern seemed better.

nvim-NeoTree
  • Neo-tree .

  • Impressions :

    • Found its fuzzy finder poor and not comparable to fzf  or Telescope.

    • Interface is a bit annoying because:

      • Hidden items are hidden by default.

      • Fuzzy is bad.

    • Overall, surprisingly bad.

NetRW
  • Default of NeoVim.

  • A loooooot of pain.

  • I don't like it.

  • Keymaps super confusing.

Workflow

Comment
Mini-ai
  • mini-ai .

  • "Better Around/Inside textobjects".

  • Appearance:

    • statusline :

      • Similar to LuaLine, but I think I prefer LuaLine.

Substitute
Surround
UndoTree

Notetaking

Render-Markdown.nvim
Markdown-preview.nvim
  • Markdown-preview.nvim .

  • Renders markdown content in the browser to preview formatted output.

  • Sounds odd, since it can look like a .pdf or .html without theme.

    • Worth testing to see if the visual is satisfactory.

Glow
  • Glow .

  • "Render markdown on the CLI".

  • Seems useful to render .md in terminal nicely.

~Obsidian.nvim
  • Obsidian.nvim .

  • Has a markdown UI that can conflict with other plugins.

    • The link explains how to disable this plugin's UI.

  • Why use it?

    • Honestly, for me it only makes sense when dealing with [[bidirectional_links]] .

    • I don't see other advantages...

    • Apparently Obsidian.nvim also includes Obsidian "core plugins" like Templates, etc.

      • Kinda meh.

      • I don't like Obsidian's system. I'd prefer doing snippets manually, with less fuss.

    • I want to test not  using it first to see if it's even necessary for me, since I'm not a big user of note linking.

Markdown.nvim
Neorg
  • Neorg .

  • Premise: all features are built on one base file format ( .norg ), which you learn once to access all Neorg functionality.

  • File format is expressive and easy to parse, making .norg  usable outside Neorg.

  • Tutorial and demo .

  • Playlist of tutorials .

  • Impressions :

    • Syntax is confusing and non-standard Markdown.

    • To-do lists are smart: completing all children completes the parent.

    • It's very similar to Markdown but with different syntax. No real advantage, just syntax changes.

      • Metadata conceptually similar, but with different syntax.

VimWiki
  • VimWiki .

  • VimWiki .

  • Can write in VimWiki syntax or Markdown.

    • Default is VimWiki.

  • Didn't like VimWiki syntax and Markdown support feels poor.

Git

Lazy git?
  • .

vim-fugitive

Visuals

Noice
  • Noice .

  • "Brings everything to eye-level".

    • I like that.

WhichKey
Mini-clue
Indent-blankline
  • Indent-blankline .

  • Vertical line showing indentation.

  • I preferred it over the previous version that used >>  to represent tabs.

Todo Comments
Buffer-line
Lua-line
  • Lua-line .

  • Better status bar visuals.

  • The difference is small, but okay.

Mini-statusline
Dressing
  • Dressing .

  • Improves visuals of some popups.

  • Didn't feel much difference; may disable.

Start Screen

Alpha
Mini-starter

Themes

Tokyo Night
  • Tokyo Night .

  • Comes installed with Kickstart.

  • "Includes extra themes for Kitty, Alacritty, iTerm and Fish."

Catpuccin

Godot LSP

Requirements

  • winget nmap install

    • Apparently only to fix a small quirk on Windows.

Explanation