
Overview
In this article I am going to set up Neovim with LSP, DAP, fuzzy finder, file explorer, status line, and other Neovim specific plugins and tools.
We are going to need Neovim 0.5 release, and you can follow the instructions to install the latest release. Most of the plugins are only for Neovim 0.5 release.
init.vim Template
I am going to start with the basic configuration shown below and add the plugins and configurations.
LSP and Auto Completion Setup
Let’s start by adding LSP and auto completion support. The list of supported languages can be found here.
Python Language Server
I am using pyright. Let’s install it.
# npm install -g pyright
Golang Language Server
For Golang, install gopls
# go get golang.org/x/tools/gopls@latest
Rust Language Server
For Rust, I use rust_analyzer. The easiest way to install is to download the binary, copy to a folder, and add the folder to environment PATH.
Neovim Plugins and Configurations
Install the LSP and auto completion plugins.
Plug 'neovim/nvim-lspconfig'
Plug 'nvim-lua/completion-nvim'
Source init.vim
and do a :PlugInstall
to install the plugins.
Here is the standard configuration. You can custom them as needed.
Open any Python, Golang or Rust app and it should work now.



Code Snippets
Let’s add code snippets to the auto completion framework.
Install the following plugins.
Plugin 'SirVer/ultisnips'
Plugin 'honza/vim-snippets'
Then enable code snippets as part of auto completion
let g:completion_enable_snippet = 'UltiSnips'

Fuzzy Finder using Telescope
I am going to set up telescope.nvim as alternative to the popular fzf.vim.
Install the telescope plugins.
Plug 'nvim-lua/popup.nvim'
Plug 'nvim-lua/plenary.nvim'
Plug 'nvim-telescope/telescope.nvim'
Add the key bindings. Change them as needed as per your preferences.
" Find files using Telescope command-line sugar.
nnoremap <leader>ff <cmd>Telescope find_files<cr>
nnoremap <leader>fg <cmd>Telescope live_grep<cr>
nnoremap <leader>fb <cmd>Telescope buffers<cr>
nnoremap <leader>fh <cmd>Telescope help_tags<cr>
nnoremap <leader>fl <cmd>Telescope git_files<cr>
There are many more features available in telescope.nvim
. I suggest you take a look at the documentation.

Better Syntax Highlighting using Tree-Sitter
Let’s also install nvim-treesitter
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
Enable tree-sitter
for all language modules.
lua <<EOF
require'nvim-treesitter.configs'.setup {
highlight = {
enable = true
},
}
EOF
Perform :TSInstall
for Python, Rust and Golang. You can refer to nvim-treesiter
website for a list of supported languages.
:TSInstall go
:TSInstall python
:TSInstall rust
nvim-treesitter with telescope
telescope.nvim
is integrated with nvim-treesitter
. Do a :Telescope treesitter
in any Python, Rust, or Golang app and I can list function names, variables, from Treesitter!

Playground for nvim-treesitter
Let’s also install the playground for nvim-treesitter
Plug 'nvim-treesitter/playground'
Add the following configuration to init.vim
require "nvim-treesitter.configs".setup {
playground = {
enable = true,
disable = {},
updatetime = 25, -- Debounced time for highlighting nodes in the playground from source code
persist_queries = false -- Whether the query persists across vim sessions
}
}
Perform a :TSInstall query
to install the query parser.
Then I can view the tree-sitter information by doing :TSPlaygroundToggle

File Explorer
Let’s install a file explorer.
Plug 'kyazdani42/nvim-web-devicons' " for file icons
Plug 'kyazdani42/nvim-tree.lua'
Define the key bindings
nnoremap <leader>tt :NvimTreeToggle<CR>
nnoremap <leader>tr :NvimTreeRefresh<CR>
nnoremap <leader>tn :NvimTreeFindFile<CR>
" NvimTreeOpen and NvimTreeClose are also available if you need them

Status Line
Let’s install galaxyline.
Plug 'glepnir/galaxyline.nvim'
Download eviline.lua and put it under ~/.config/nvim.
Add this line to init.vim
luafile ~/.config/nvim/eviline.lua
Source the file and I can see the status line now.

Debugging
For debugging, I talked about vimspector in my previous article. For this article let’s try out nvim-dap and configure it to integrate with telescope-dap.
I am going use nvim-dap extension for Python.
Plug 'nvim-telescope/telescope-dap.nvim'
Plug 'mfussenegger/nvim-dap'
Plug 'mfussenegger/nvim-dap-python'
nvim-dap-python uses debugpy so let’s install it
# pip install debugpy
Add the configurations to init.vim
. Change the Python path accordingly.
lua <<EOF
require('telescope').load_extension('dap')
require('dap-python').setup('~/miniconda3/bin/python')
EOF
Add the key bindings for debugging. Check out :help dap-mappings
and :help dap-api
for more information.
nnoremap <silent> <F5> :lua require'dap'.continue()<CR>
nnoremap <silent> <leader>dd :lua require('dap').continue()<CR>
nnoremap <silent> <F10> :lua require'dap'.step_over()<CR>
nnoremap <silent> <F11> :lua require'dap'.step_into()<CR>
nnoremap <silent> <F12> :lua require'dap'.step_out()<CR>
nnoremap <silent> <leader>b :lua require'dap'.toggle_breakpoint()<CR>
nnoremap <silent> <leader>B :lua require'dap'.set_breakpoint(vim.fn.input('Breakpoint condition: '))<CR>
nnoremap <silent> <leader>lp :lua require'dap'.set_breakpoint(nil, nil, vim.fn.input('Log point message: '))<CR>
nnoremap <silent> <leader>dr :lua require'dap'.repl.open()<CR>
nnoremap <silent> <leader>dl :lua require'dap'.repl.run_last()<CR>`
nnoremap <silent> <leader>dn :lua require('dap-python').test_method()<CR>
vnoremap <silent> <leader>ds <ESC>:lua require('dap-python').debug_selection()<CR>
telescope-dap
supports the following functions. You can map them to any key bindings you want.
require'telescope'.extensions.dap.commands{}
require'telescope'.extensions.dap.configurations{}
require'telescope'.extensions.dap.list_breakpoints{}
require'telescope'.extensions.dap.variables{}
Press <Leader>b
to toggle breakpoint. Press <F5>
or <Leader>dd
to start debugging.

Integration with GitHub
Finally let’s install octo.nvim to integrate with GitHub directly from Neovim.
Plug 'pwntester/octo.nvim'
This plugin requires GitHub CLI and telescope.nvim.
With this plugin you can work with GitHub issue, PR, gist etc directly from Neovim.

Summary
Now you have a basic configuration to continue. The full init.vim
for this article is available here.
This article is Neovim specific and only focuses on some of the new Neovim plugins. There are definitely many more that you can explore on your own.
Do also check out the following articles!