Table of contents
[!IMPORTANT] I’m currently trying to switch to using leanpack.nvim instead of lazy.nvim. This is a Neovim plugin manager built on top of vim.pack (Neovim ≥ 0.12.0). You can try it out on the branch feat/leanpack.nvim; until leanpack.nvim is fully mature, lazy.nvim will continue to be used as the main plugin manager.
Neovim is a pretty cool successor to Vim, focusing on compatibility while adding asynchronous plugin functionality and trying to clean up the code base. Having been fed up at various times with both Sublime Text (2 and 3) and Atom, and after realizing how much development I do over SSH, it seemed reasonable to check out using vim (or nvim, in this case) as my IDE. The advantages essentially boil down to:
Therefore, I decided to create this repository.
[!NOTE]
- There are several versions, checkout CHANGELOG.
- This configuration is meant as a starting point, and it fits my needs only. If you want to customize it, jump to 6. Customization.
mv ~/.config/nvim ~/.config/nvim.bak
| OS | PATH |
|---|---|
| Linux, MacOS | $XDG_CONFIG_HOME/nvim, ~/.config/nvim |
| Windows (cmd) | %localappdata%\nvim\ |
| Windows (powershell) | $env:LOCALAPPDATA\nvim\ |
[!NOTE] Your fork's url will be something like this:
https://github.com/<your_github_username>/neovim-config.git
[!NOTE] If following the recommended step above (i.e., forking the repo), replace
ntk148vwith<your_github_username>in the commands below
git clone https://github.com/ntk148v/neovim-config.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim
If you're using cmd.exe:
git clone https://github.com/ntk148v/neovim-config.git "%localappdata%\nvim"
If you're using powershell.exe
git clone https://github.com/ntk148v/neovim-config.git "${env:LOCALAPPDATA}\nvim"
nvim
git pull.The files under config will be automatically loaded at the appropriate time, so you don't need to require those files manually.
tree ~/.config/nvim
├── init.lua
├── lazy-lock.json
└── lua
├── autocmds.lua
├── custom.lua
├── mappings.lua
├── options.lua
├── plugins
│ ├── configs
│ │ ├── cmp.lua
│ │ ├── gitsigns.lua
│ │ ├── lspconfig.lua
│ │ ├── lualine.lua
│ │ ├── luasnip.lua
│ │ ├── mason.lua
│ │ ├── mini-files.lua
│ │ ├── null-ls.lua
│ │ └── treesitter.lua
│ └── init.lua
└── sample_custom.lua
| Plugin | Description |
|---|---|
| lazy.nvim | A modern plugin manager for Neovim |
| mason.nvim | Portable package manager for Neovim that runs everywhere Neovim runs. Easily install and manage LSP servers, DAP servers, linters, and formatters. |
| nvim-lspconfig | A collection of common configurations for Neovim's built-in language server client |
| gitsigns | Super fast git decorations implemented purely in lua/teal |
| nvim-treesitter | Nvim Treesitter configurations and abstraction layer |
| nvim-cmp | Auto completion plugin |
| LuaSnip | Snippet Engine for Neovim written in Lua |
| nvim-autopairs | A super powerful autopairs for Neovim |
| nvim-web-devicons | Lua fork of vim-web-devicons for neovim |
| lualine.nvim | A blazing fast and easy to configure neovim statusline plugin written in pure lua. |
| norcalli/nvim-colorizer.lua | The fastest Neovim colorizer. |
| nvim-mini/mini.pick | Fast and minimal fuzzy picker. |
| nvim-mini/mini.extra | Extra pickers for mini.pick. |
| rosé-pine | Soho vibes for Neovim |
| nvimtools/none-ls.nvim | null-ls.nvim reloaded / Use Neovim as a language server to inject LSP diagnostics, code actions, and more via Lua. |
| folke/which-key.nvim | Create key bindings that stick. WhichKey helps you remember your Neovim keymaps, by showing available keybindings in a popup as you type. |
| nvim-mini/mini.files | Navigate and manipulate file system. Part of 'mini.nvim' library. |
| nvim-mini/mini.misc | About Neovim Lua plugin with miscellaneous useful functions. Part of 'mini.nvim' library. |
By default, the follow LSP servers are installed and configured:
Furthermore, it integrates with nvim-treesitter to provide rich syntax highlighting and other language parsing magic.
If your language is not supported, please follow this:
:LspInstall `<your_language_server>`
:TSInstall `<language_to_install>`
You can add more LSP servers and language syntax highlighting by editing the custom file.
These are the default keymaps, in the following shortcuts, the <leader>+` key is set up to `` (space) character, check: keymaps.lua.
| Shortcut | Mode | Description |
|---|---|---|
| kk | Insert | Esc with kk |
| rr | Normal | Reload configuration file |
| tt | Normal | Create terminal |
<leader>+fm |
Normal | Open mini.files (Directory of the current files) |
<leader>+fM |
Normal | Open mini.files (cwd) |
<leader>+sh |
Normal | Open mini.pick to search help |
<leader>+sk |
Normal | Open mini.pick to search keymaps |
<leader>+sf |
Normal | Open mini.pick to search files |
<leader>+sg |
Normal | Open mini.pick to search by live grep |
<leader>+sd |
Normal | Open mini.pick to search diagnostics |
<leader>+sr |
Normal | Open mini.pick to resume last picker |
<leader>+s. |
Normal | Open mini.pick to search recent files |
<leader>+<leader> |
Normal | Open mini.pick to search existing buffers |
<leader>+sc |
Normal | Open mini.pick to list git commits |
<leader>+/ |
Normal | Fuzzily search in current buffer |
<leader>+sn |
Normal | Search Neovim config files |
<leader>+wh/j/k/l |
Normal | Move around splits |
| mm | Normal | Comment/Uncomment line |
There are many default keymaps, you can check it using :map command. There are also other variants:
:nmap for normal mode mappings:vmap for visual mode mappings:imap for insert mode mappingsThe above list is not complete. Typing :help map in Vim will give you more info.
You can customize this configuration by creating the custom module. You can choose either two ways:
${XDG_CONFIG_HOME:-$HOME/.config}/nvim/lua/custom.lua file.${XDG_CONFIG_HOME:-$HOME/.config}/nvim/lua/custom/ if your custom configuration is too long, and you want to separate it into multiple files.Checkout the sample custom file for the starting point. The logic is taken from CyberNvim. There are a number of defined sections in the config:
M.setup_sources is used to add extra sources to connect to Null-ls - you can find a list of sources here. The parameter b is just short for null_ls.builtins.M.ensure_installed is used to add extra Treesitter highlighter.M.plugins is where you will add your own plugin definitions.M.configs is the most important section of your own configuration. This is where you can define any autocommands, require any files, or otherwise completely port your current configuration.M.formatting_servers is used to setup auto formatting rules. You need to select the language server that will provide autoformatting capabilitiesFeel free to file an issue or open a pull request. You're welcome!