Neovim
Neovim is a highly-extensible keyboard-based editor.
Inspired by https://github.com/nvim-lua/kickstart.nvim.
Installation
- Install Neovim>=0.11 (native LSP setup).
- Install the external dependencies.
sudo snap install nvim --classic
sudo apt update
sudo apt install make gcc ripgrep unzip git xclip, fd-find
For MacOS
brew install neovim
brew install ripgrep fd
Plugins
I use the plugin manager lazy.nvim to install all plugins. I also use mini.nvim and snacks.nvim, two collections of plugins for Neovim.
✔️: finished setup and documentation.
❌: not setup properly and not documented.
Working on text and code
Name | Purpose | Dependencies | Notes |
---|---|---|---|
blink.nvim | A completion plugin with support for LSPs and external sources | ✔️ | |
conform.nvim | Formatter plugin | ✔️ | |
iron.nvim | Interactive REPL (Read–Eval–Print Loop) | ✔️ | |
mini.ai | Extend and create a/i textobjects |
✔️ | |
mini.move | Move any selection in any direction | ✔️ | |
mini.surround | Fast and feature-rich surround actions | ✔️ | |
neotest | Run and interact with tests | nvim-nio, plenary.nvim, FixCursorHold.nvim, nvim-treesitter, neotest-python | ✔️ |
nvim-autopairs | Autocomplete autopairs, e.g. [],{},() etc. | ✔️ | |
nvim-dap | Debug Adapter Protocol client implementation | nvim-dap-ui, nvim-nio, nvim-dap-virtual-text, nvim-dap-python | ✔️ |
nvim-lint | Support linters which have no LSP support | ✔️ | |
nvim-treesitter | Parser generator tool and incremental parsing library | nvim-treesitter-context, nvim-treesitter-textobjects | ✔️ |
render-markdown.nvim | Improve viewing markdown files | Markdown parser for treesitter | ✔️ |
snacks.indent | Adds indentation guides even on blank lines | ✔️ | |
snacks.zen | Zen mode, distraction-free coding | ✔️ | |
todo-comments.nvim | Highlight your to-do comments in different styles | nvim-lua/plenary.nvim | ✔️ |
trouble.nvim | Pretty list for diagnosis and more | ✔️ | |
undotree | Visualize undo history | ✔️ | |
venv-selector.nvim | Browse existing python virtual environments on your computer and select one to activate inside neovim. | fd, telescope.nvim, nvim-dap nvim-dap-python, debugpy | ✔️ |
vim-sleuth | Smart indentation style detection | ✔️ |
Working with files and navigating between files
Name | Purpose | Dependencies | Notes |
---|---|---|---|
harpoon | Auto updating and editable marks utility for fast file navigation | nvim-lua/plenary.nvim | ✔️ |
oil.nvim | File Explorer that lets you edit your filesystem like a normal Neovim buffer | ✔️ | |
telescope.nvim | Fuzzy finder | nvim-lua/plenary.nvim, telescope-fzf-native.nvim, telescope-ui-select.nvim, external: ripgrep | ✔️ |
vim-tmux-navigator | Seamless navigation between vim panes and tmux splits | tmux | ✔️ |
Git Integration
Name | Purpose | Dependencies | Notes |
---|---|---|---|
gitsigns.nvim | Deep buffer integration for Git | ✔️ | |
git-worktree.nvim | A simple wrapper around git worktree operations, create, switch, and delete. | ✔️ | |
lazygit | Simple terminal UI for git commands | ❌ | |
vim-fugitive | Git plugin for Vim | ❌ |
Miscellaneous
Name | Purpose | Dependencies | Notes |
---|---|---|---|
fidget.nvim | Extensible UI for Neovim notifications and LSP progress messages | ✔️ | |
lua line.nvim | Fast and easy to configure Neovim statusline | ✔️ | |
mini.icons | File and folder icons | ✔️ | |
obsidian.nvim | Plugin for Obsidian | ❌ | |
which-key.nvim | Show available keybindings in a popup as you type | ✔️ |
Language Server Protocol, Debug Adapter Protocol, Linter and Formatter
The LSP (Language Server Protocol), DAP (Debug Adapter Protocol), Linter and Formatter will be installed by the package manager Mason (with dependencies: mason-tool-installer.nvim, mason-nvim-dap.nvim).
Name | Language | Purpose | Notes |
---|---|---|---|
bashls | Bash, Sh, Zsh | LSP | It uses shellcheck, shfmt for linting and formatting. |
debugpy | Python | DAP | |
harper_ls | English |
Linter | Grammar Checker |
lua_ls | Lua | LSP | lazydev.nvim is a plugin that properly configures LuaLS. |
prettier | JSON, Markdown, YAML | Formatter | |
basedpyright | Python | LSP | Need to install Node.js because Pyright is written in Typescript. LSP ty will be an alternative to basedpyright soon. |
ruff | Python | LSP, Linter and Formatter | |
shellcheck | Bash, Sh, Zsh | Linter | |
shfmt | Bash, Sh, Zsh | Formatter | |
stylua | Lua | Formatter | |
taplo | TOML | LSP, Linter and Formatter | |
terraform_fmt | Terraform | Formatter | |
terraform-ls | Terraform | LSP | |
tflint | Terraform | LSP, Linter | |
trivy | All | Linter | Security Scanner |
yamlls | YAML | LSP |