Neovim KISS configuration with Lua
Table of Contents
- Plugins
- Directory Tree
- Files and Settings
- Installation
- LSP Configuration
- Appearance
- Keymaps
- Configuration Check
- Screenshots
Plugins
packer.nvim - A use-package inspired plugin manager for Neovim
feline.nvim - A minimal, stylish and customizable statusline for Neovim written in Lua
nvim-lspconfig - A collection of common configurations for Neovim's built-in language server client
nvim-cmp - Auto completion plugin
LuaSnip - Snippet Engine for Neovim written in Lua
nvim-tree.lua - A File Explorer written In Lua
indentBlankline - Adds indentation guides to all lines (including empty lines)
nvim-autopairs - A super powerful autopairs for Neovim
Tagbar - A class outline viewer for Vim
gitsigns - Super fast git decorations implemented purely in lua/teal
nvim-treesitter - Nvim Treesitter configurations and abstraction layer
alpha-nvim - A fast and highly customizable greeter for neovim.
nvim-web-devicons - A Lua fork of vim-devicons
Directory Tree
${HOME}/.config/nvim
├── lua
│ ├── core
│ │ ├── autocmds.lua
│ │ ├── colors.lua
│ │ ├── keymaps.lua
│ │ ├── options.lua
│ │ └── statusline.lua
│ ├── plugins
│ │ ├── alpha-nvim.lua
│ │ ├── indent-blankline.lua
│ │ ├── nvim-cmp.lua
│ │ ├── nvim-lspconfig.lua
│ │ ├── nvim-tree.lua
│ │ └── nvim-treesitter.lua
│ └── packer_init.lua
├── plugin
│ └── packer_compiled.lua
└── init.lua
Files and Settings
/nvim
-
init.lua: Main configuration file that call
lua
modules -
lua: Folder of
lua
modules, here reside all the Lua modules that needed. These modules are called frominit.lua
file (see below).
See: https://github.com/nanotee/nvim-lua-guide#where-to-put-lua-files
/nvim/lua
- packer_init.lua: Load plugins
/nvim/lua/core
-
autocmds.lua: Define autocommands with Lua APIs
-
colors.lua: Define Neovim and plugins color scheme
-
keymaps.lua: Keymaps configuration file, vim/neovim and plugins keymaps
-
options.lua: General Neovim settings
-
statusline.lua: Statusline configuration file
/nvim/lua/plugins
-
packer.lua: Plugin manager settings
-
alpha-nvim.lua: Dashboard
-
indent-blankline.lua: Indent line
-
nvim-cmp.lua: Autocompletion settings
-
nvim-lspconfig.lua: LSP configuration (language servers, keybinding)
-
nvim-tree.lua: File manager settings
-
nvim-treesitter: Treesitter interface configuration
Installation
-
Install Neovim v0.7.x.
-
Install Nerd Fonts, (for the font of the screenshots install Cozette Font).
-
Install npm for download packages of LSP language servers, see: LSP Configuration.
-
Make a backup of your current
nvim
folder if necessary:
mv ~/.config/nvim ~/.config/nvim.backup
- Download neovim-lua with
git
and copy thenvim
folder in the${HOME}/.config
directory:
git clone https://github.com/brainfucksec/neovim-lua.git
cd neovim-lua/
cp -Rv nvim ~/.config/
- Install packer.nvim for install and manage the plugins:
git clone --depth 1 https://github.com/wbthomason/packer.nvim\
~/.local/share/nvim/site/pack/packer/start/packer.nvim
- Run Neovim with
PackerSync
command:
nvim +PackerSync
LSP Configuration
- Install LSP language servers with
npm
sudo npm install -g bash-language-server pyright vscode-langservers-extracted typescript typescript-language-server
- Install additional packages for plugins support:
C, C++:
Python:
- Open a source file of one of the supported languages with Neovim, and run command :LspInfo for testing the LSP support.
Languages Currently Supported
Lua - builtin
Bash - bashls
Python - pyright
C, C++ - clangd
HTML, CSS, JSON - vscode-html
JavaScript, TypeScript - tsserver
See: nvim-lspconfig #doc/server_configurations.md
Appearance
Available Colorschemes
Fonts: Cozette
Icons: nvim-web-devicons
The color scheme is defined in the following files (default: OneDark):
- Neovim UI - nvim/lua/core/colors.lua:
-- Load nvim color scheme:
...color_scheme = pcall(require, 'onedark')
require('onedark').setup {
style = 'darker'
}
require('onedark').load()
- Statusline - nvim/lua/core/statusline.lua:
-- Set colorscheme (from core/colors.lua/colorscheme_name)
local colors = require('core/colors').onedark_dark
Keymaps
These are the default keymaps, in the following shortcuts, the <leader>
key is set up to ,
(comma) character, see: keymaps.lua.
Shortcut | Mode | Description |
---|---|---|
kk |
Insert | Esc with kk |
<leader>c |
Normal | Clear search highlights |
<F2> |
Normal | Toggle Paste mode |
<leader>tk/th |
Normal | Change split orientation (vertical/horizontal) |
<Ctrl> + {h,j,k,l} |
Normal | Move around splits windows |
<leader>r |
Normal | Reload configuration file |
<leader>s |
Normal/Insert | Save file |
<leader>q |
Normal | Save (close all windows) and exit from Neovim |
<Ctrl> + t |
Normal | Open terminal (:Term ) |
<Esc> |
Terminal | Exit terminal |
<Ctrl> + n |
Normal | Open NvimTree |
<leader>z |
Normal | Open Tagbar |
Configuration check
- Open nvim and run command
checkhealth
, you should not see any error in the output (except for the one related to the Python 2 interpreter if don't have it):
:checkhealth
- You can also use the
startuptime
option to read the nvim startup logs:
nvim --startuptime > /tmp/nvim-start.log
nvim /tmp/nvim-start.log
See: :help startuptime
Screenshots
Guides and resources
Other Neovim Lua projects and examples
Lua resources
-
Lua in Y minutes - https://learnxinyminutes.com/docs/lua/
-
Lua Quick Guide - https://github.com/medwatt/Notes/blob/main/Lua/Lua_Quick_Guide.ipynb
-
Lua 5.4 Reference Manual - https://www.lua.org/manual/5.4/
Disclaimer
This setup is based on KISS principle, probably some concepts may not be valid for everyone. Then feel free to take what you need but don't install anything without checking first!
Thanks to:
-
All the contributors who helped improve this setup with their reports and advices.
-
All the authors of the sources mentioned above.
-
The users of /r/Neovim subreddit for the support of the configuration.