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. The following language servers are configured:
- tsserver
- eslint
- cssls
- html
Most of the code in this configuration is explained in this series:
- Build your first Neovim configuration in lua
- Neovim: Plugins to get started
- Setup nvim-lspconfig + nvim-cmp
- Neovim v0.8 or greater.
- git.
- A
C
compiler. Can begcc
,tcc
orzig
. - make, the build tool.
- npm cli. Javascript package manager.
- nodejs. Javascript runtime. Required by the language servers listed above.
- (optional) ripgrep. Improves project wide search speed.
- (optional) fd. Improves file search speed.
- (optional) A patched font to display icons. I hear nerdfonts has a good collection.
Here's the config compatible with v0.7.
-
Backup your existing configuration if you have one.
-
If you don't know the path of the Neovim configuration folder use this command.
nvim --headless -c 'echo stdpath("config") | quit'
- Now clone this repository in that location.
git clone https://github.com/VonHeikemen/nvim-starter /tmp/nvim-config-path
Do not execute this command as is. Replace
/tmp/nvim-config-path
with the correct path from the previous step.
- Move to the configuration folder where you clone the repository. Change branch to
05-modular
.
git checkout 05-modular
- Next time you start Neovim all plugins will be downloaded automatically. After this process is done
nvim-treesitter
will install language parsers for treesitter. And,mason.nvim
will download language servers listed in the configuration. Use the command:Mason
to check the download process of language servers.
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. |
Visual | <F4> |
Selects a code action available in the selected text. |
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. |
onedark.vim | Colorscheme based on Atom's default theme. |
monokai.nvim | Colorscheme based on Sublime text's default theme. |
darkplus.nvim | Colorscheme based on VS Code's default theme. |
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. |
nvim-tree.lua | File explorer. |
telescope.nvim | Fuzzy finder. |
telescope-fzf-native.nvim | Extension for telescope. Allows fzf-like syntax in searches. |
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. |
Comment.nvim | Toggle comments. |
vim-surround | Add, remove, change "surroundings". |
targets.vim | Creates new textobjects. |
vim-repeat | Add "repeat" support for plugins. |
vim-bbye | Close buffers without closing the current window. |
plenary.nvim | Collection of modules. Used internaly by other plugins. |
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. |
######################################################################################## ######################################################################################## ######################################################################################## ########################################################################################
Warning Current issues.
- Prettier extension has issue itchyny/lightline.vim#657
- changed ~/.config/coc/extensions/node_modules/coc-prettier/lib/index.js
- neoclide/coc-prettier#165 (comment)
- auto-pairs not working as expected
Note Apprentice. A autocmd on colorscheme matching pattern "apprentice" makes the background transparent.
Note Using
Lightline
. Overloading colorscheme with local custompowerline_transparent
.
Warning Lightline is currently patch locally to allow the config to call lua functions. itchyny/lightline.vim#657
Note Using coc.nvim for now. Planning to move to neovim native lsp handling in the future.
Note leap.vim for quick jumping to anywhere on the visible page.
Note Not happy with jiangmiao/auto-pairs as yet, but it may be that I need to configure it.
Note I've always done this with snippets, but currently using vim-illuminate
Note HighlightYank
Note hlchunk is nice. Have some custom colors in place to make it unobstrusive.
- nvim-treesitter
- suda
- vim-numbertoggle
- gitgutter
- gitbranch