Base configuration for Neovim. For those looking to make Neovim their new main editor. Here you'll find a popular combination of plugin to make your experience a little bit better.
A few things have been configured to resemble other modern text editors. You'll find a file explorer with tree style view, list open files in tabs, git integration and a terminal easy to toggle.
Autocompletion and "code intellisense" is provided by the LSP client built into Neovim. This means if you want smart completion and error detection for a programming language you'll need to install a language server.
- Neovim v0.9 or greater.
- git.
- A
C
compiler. Can begcc
,tcc
orzig
. - make, the build tool.
- (optional) A patched font to display icons. I hear nerdfonts has a good collection.
- (optional) ripgrep. Improves project wide search speed.
- (optional) fd. Improves file search speed.
If you need a C
compiler then zig
is the easiest to install. It's available on winget
, scoop
and chocolatey
. You can also find some links in the zig download page.
If you experience performance issues with the plugin Telescope
then you might want to try an alternative like fzf.lua.
-
Clone this repository in Neovim's configuration folder.
If you don't know the location of that folder, use this command in your terminal.
nvim --headless -c 'echo stdpath("config") | echo "" | quit'
-
After you cloned the repository in Neovim's folder, start Neovim using this command in your terminal.
nvim
The plugin manager will be installed automatically. And then all the plugins will be installed.
They are external programs that provide IDE-like features to Neovim. If you want to know more about language servers watch this wonderful 5 minutes video: LSP explained.
In this configuration there is a plugin that will help you install language servers: mason-lspconfig
. If you execute the command :LspInstall
while you are inside a file then mason-lspconfig
will suggest a list of language servers that support that particular type of file.
Keep in mind you need to meet the requirements of the language servers. For example, if you want to download the language server for the go
programming language then you need to have go
installed in your system. If you want to download a language server written in javascript you'll need NodeJS.
lazy.nvim
is the plugin manager used in this configuration. Here are a few resources that will help you understand some of it's features:
-
Lazy.nvim: plugin configuration. Here you'll learn about the "plugin spec" and how to split your plugin setup into multiple files.
-
Lazy.nvim: how to revert a plugin back to a previous version. Learn how to recover from a bad plugin update.
Leader key: Space
.
Mode | Key | Action |
---|---|---|
Normal | <leader>h |
Go to first non empty character in line. |
Normal | <leader>l |
Go to last non empty character in line. |
Normal | <leader>a |
Select all text. |
Normal | gy |
Copy selected text to clipboard. |
Normal | gp |
Paste clipboard content. |
Normal | <leader>w |
Save file. |
Normal | <leader>bq |
Close current buffer. |
Normal | <leader>bc |
Close current buffer while preserving the window layout. |
Normal | <leader>bl |
Go to last active buffer. |
Normal | <leader>? |
Search oldfiles history. |
Normal | <leader><space> |
Search open buffers. |
Normal | <leader>ff |
Find file in current working directory. |
Normal | <leader>fg |
Search pattern in current working directory. Interactive "grep search". |
Normal | <leader>fd |
Search diagnostics in current file. |
Normal | <leader>fs |
Search pattern in current file. |
Normal | <leader>e |
Open file explorer. |
Normal | <Ctrl-g> |
Toggle the builtin terminal. |
Normal | K |
Displays hover information about the symbol under the cursor. |
Normal | gd |
Jump to the definition. |
Normal | gD |
Jump to declaration. |
Normal | gi |
Lists all the implementations for the symbol under the cursor. |
Normal | go |
Jumps to the definition of the type symbol |
Normal | gr |
Lists all the references. |
Normal | gs |
Displays a function's signature information. |
Normal | <F2> |
Renames all references to the symbol under the cursor. |
Normal | <F3> |
Format code in current buffer. |
Normal | <F4> |
Selects a code action available at the current cursor position. |
Normal | gl |
Show diagnostics in a floating window. |
Normal | [d |
Move to the previous diagnostic. |
Normal | ]d |
Move to the next diagnostic. |
Mode | Key | Action |
---|---|---|
Insert | <Up> |
Move to previous item. |
Insert | <Down> |
Move to next item. |
Insert | <Ctrl-p> |
Move to previous item. |
Insert | <Ctrl-n> |
Move to next item. |
Insert | <Ctrl-u> |
Scroll up in documentation window. |
Insert | <Ctrl-d> |
Scroll down in documentation window. |
Insert | <Ctrl-e> |
Cancel completion. |
Insert | <C-y> |
Confirm completion. |
Insert | <Enter> |
Confirm completion. |
Insert | <Ctrl-f> |
Go to next placeholder in snippet. |
Insert | <Ctrl-b> |
Go to previous placeholder in snippet. |
Insert | <Tab> |
If completion menu is open, go to next item. Else, open completion menu. |
Insert | <Shift-Tab> |
If completion menu is open, go to previous item. |
Name | Description |
---|---|
lazy.nvim | Plugin manager. |
tokyonight.nvim | Collection of colorscheme for Neovim. |
nvim-web-devicons | Helper functions to show icons. |
lualine.nvim | Pretty statusline. |
bufferline.nvim | Pretty tabline. |
indent-blankline.nvim | Shows indent guides in current file. |
neo-tree | File explorer. |
mini.nvim | Collection of independent lua modules that enhance Neovim's features. |
telescope.nvim | Fuzzy finder. |
telescope-fzf-native.nvim | Allows fzf-like syntax in telescope. Note: only enabled in unix systems. |
gitsigns.nvim | Shows indicators in gutter based on file changes detected by git. |
vim-fugitive | Git integration into Neovim/Vim. |
nvim-treesitter | Configures treesitter parsers. Provides modules to manipulate code. |
nvim-treesitter-textobjects | Creates textobjects based on treesitter queries. |
vim-repeat | Add "repeat" support for plugins. |
plenary.nvim | Collection of modules. Used internaly by other plugins. |
nui.nvim | UI Component Library for Neovim. |
dressing.nvim | Improve the default vim.ui interfaces. |
toggleterm.nvim | Manage terminal windows easily. |
mason.nvim | Portable package manager for Neovim. |
mason-lspconfig.nvim | Integrates nvim-lspconfig and mason.nvim. |
nvim-lspconfig | Quickstart configs for Neovim's LSP client. |
nvim-cmp | Autocompletion engine. |
cmp-buffer | nvim-cmp source. Suggest words in the current buffer. |
cmp-path | nvim-cmp source. Show suggestions based on file system paths. |
cmp_luasnip | nvim-cmp source. Show suggestions based on installed snippets. |
cmp-nvim-lsp | nvim-cmp source. Show suggestions based on LSP servers queries. |
LuaSnip | Snippet engine. |
friendly-snippets | Collection of snippets. |
nvim-ts-context-commentstring | It helps detect comment syntax. |