/nvim-starter

Neovim example configuration. To help you start in your journey

Primary LanguageLuaMIT LicenseMIT

Neovim Starter

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:

Requirements

  • Neovim v0.8 or greater.
  • git.
  • A C compiler. Can be gcc, tcc or zig.
  • 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.

Installation

  • 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.

Keybindings

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.

Autocomplete keybindings

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.

Plugin list

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.