DEV Community

Cover image for Effective Neovim Setup. A Beginner’s Guide
Kayode
Kayode

Posted on • Originally published at zt4ff.Medium

Effective Neovim Setup. A Beginner’s Guide

Vim is a text editor that comes preinstalled with most major Linux distributions. It’s a highly customizable editor and it can be a productivity improvement for developers when utilized well.

Vim encourages the use of keyboards with several keybindings that can operate differently in different modes thereby minimizing the need for a mouse.

Simply put, Vim is an editor that can match the speed at which you think.

Neovim is an extension of Vim. It’s built for users who want the good parts of Vim, and more.

You can read more about the vision of Neovim here.

Note: For the article, we are using LazyVim to configure our Neovim setup. LazyVim makes it easy to customize and extend Neovim’s configuration.

Installing Neovim

There are several ways to install Neovim. This wiki provides several guidelines on how to install Neovim.

I use an Arch Linux machine so it was easy to install Neovim by running the command:

sudo pacman -S neovim
Enter fullscreen mode Exit fullscreen mode

On a Windows machine, you can use Chocolatey by running the command.

choco install neovim
Enter fullscreen mode Exit fullscreen mode

On a macOS machine, you can use homebrew by running the command.

brew install neovim
Enter fullscreen mode Exit fullscreen mode

Once Neovim is installed, we can confirm that it exists by running the command.

neovim
Enter fullscreen mode Exit fullscreen mode

The output should look similar to the image below.
basic neovim

Setting up LazyGit

There are some requirements needed to set up LazyVim:

  • Neovim (we have this installed already)
  • Git
  • a Nerd Font (optional but needed to display icons)

First, we will clone the LazyVim starter repository into our Neovim runtime path.

~/.config/nvim is the Neovim’s runtime path for macOS and Linux machines while ~/AppData/local/nvim is for Windows machines.

Since I am not an Arch Linux machine, I’d run the command below:

git clone https://github.com/LazyVim/starter ~/.config/nvim
Enter fullscreen mode Exit fullscreen mode

Run the command nvim again to confirm that it is set up.

lazyvim-basic

Basic Plugins Installation

LazyVim comes with a wealth of plugins pre-configured and ready to use. This section of the article will introduce two more plugins that can greatly improve your Neovim experience.

nvim-telescope

This is a highly extendable fuzzy finder over lists. To install this plugin, you can create a new file in the plugins directory of your Neovim config path named telescope.lua

cd ~/.config/nvim/lua/plugins/; nvim telescope.lua
Enter fullscreen mode Exit fullscreen mode

Then paste the code below into the telescope.lua file

--telescope.lua
return {
  "nvim-telescope/telescope.nvim",
  tag = "0.1.5",
  dependencies = { "nvim-lua/plenary.nvim" },
}
Enter fullscreen mode Exit fullscreen mode

Then in ~/.config/nvim/lua/config/lazy.lua you can add this below the last line.

local builtin = require('telescope.builtin')
vim.keymap.set('n', '<C-p>', builtin.find_files, {})
vim.keymap.set('n', '<leader>fg', builtin.live_grep, {})
vim.keymap.set('n', '<leader>fb', builtin.buffers, {})
vim.keymap.set('n', '<leader>fh', builtin.help_tags, {})
Enter fullscreen mode Exit fullscreen mode

The code above set up keymaps to execute some of the functions provided by nvim-telescope.

The <C-p> keymap is a Ctrl + p keybinding that opens a fuzzy finder for files in a modal.

treesitter

nvim-treesitter

This is a plugin that provides a simple way to use the tree-sitter in Neovim and also provides functionalities like highlighting, etc.

Just like we did for the nvim-telescope plugin, we will create a new file in the plugins directory of Neovim’s configuration called treesitter.lua and then paste the code below into it.

-- treesitter.lua
require("lazy").setup({{
    "nvim-treesitter/nvim-treesitter",
    build = ":TSUpdate",
    config = function () 
      local configs = require("nvim-treesitter.configs")

      configs.setup({
          ensure_installed = { "c", "lua", "vim", "vimdoc", "query", "elixir", "heex", "javascript", "html" },
          sync_install = false,
          highlight = { enable = true },
          indent = { enable = true },  
        })
    end
 }})
Enter fullscreen mode Exit fullscreen mode

The ensure-installed is a tuple that includes various languages you want to include the parser support for.

You can see a list of supported languages here.

Conclusion

This is a very basic introduction to getting Neovim set up quickly.

Using Neovim can be very uncomfortable for the first time especially when you have habits that is different from from what Vim preaches. It will be a slow painful start but in no time, you will pick it up.

And do not be overwhelmed with trying to learn everything about Vim for a start. Pick up the barest minimum you need to get started and grow with that.

Top comments (3)

Collapse
 
lorenzhohermuth profile image
Lorenz Hohermuth

Great Blog, I like that you didn't just recommend a Distro lick NvChad.
But I still think Kickstart is a Better Starting Point.
But eventually, Everybody gets to a good Config.

Collapse
 
elbahri_youssef_8827f21c0 profile image
elbahri youssef

please how to fix this :
E5113: Error while calling lua chunk: C:\Users\elbah\AppData\Local\nvim\init.lua:12: attempt to index field 'loader' (a
nil value)

Collapse
 
randellbrianknight profile image
Randell Brian Knight

Thanks for sharing your install method for Neovim. 😎