(Neo)vim is usable without plugins
Last modified Jun 17 2025.
Table of Contents
Vim and Neovim are extremely powerful editors, but despite having lots of features built-in, many folk reach for third-party plugins quite easily. Here are a few common features that may be found of use which are built in to the editor.
Completion (Vim) #
Completion functions are all prefixed with C-x
in insert mode. Take this snippet from the ins-completion
help section for reference:
In Insert and Replace mode, there are several commands to complete part of a
keyword or line that has been typed. This is useful if you are using
complicated keywords (e.g., function names with capitals and underscores).
Completion can be done for:
1. Whole lines |i_CTRL-X_CTRL-L|
2. keywords in the current file |i_CTRL-X_CTRL-N|
3. keywords in 'dictionary' |i_CTRL-X_CTRL-K|
4. keywords in 'thesaurus', thesaurus-style |i_CTRL-X_CTRL-T|
5. keywords in the current and included files |i_CTRL-X_CTRL-I|
6. tags |i_CTRL-X_CTRL-]|
7. file names |i_CTRL-X_CTRL-F|
8. definitions or macros |i_CTRL-X_CTRL-D|
9. Vim command-line |i_CTRL-X_CTRL-V|
10. User defined completion |i_CTRL-X_CTRL-U|
11. omni completion |i_CTRL-X_CTRL-O|
12. Spelling suggestions |i_CTRL-X_s|
13. keywords in 'complete' |i_CTRL-N| |i_CTRL-P|
Highlights are omni completion - often tied to LSP, spelling suggestions, and file names.
LSP (Neovim) #
This is easier to set up than ever thanks to Neovim v0.11 adding vim.lsp.Config
.
For starters, a configuration file for each language server must be created. Below is an example of one for gopls
:
return {
cmd = { "gopls" },
root_markers = { ".git", "go.mod", "go.work" },
filetypes = { "go", "gomod", "gotmpl", "gowork" },
}
Then, just enable the server:
if has('nvim-0.11')
if executable('gopls')
lua vim.lsp.enable('gopls')
endif
endif
See the Neovim docs for more information.
Fuzzy Finding (Vim) #
This is self-explanatory. Vim has recursive search support, along with wildcards.
" Include subdirectories in search path
set path+=**
" Add exclusions from recursive searches
set wildignore+=**/.git/**,**/build/**,**/node_modules/**
" Bind a key for searching
nnoremap <C-p> :e **/*
Tree-sitter (Neovim) #
Tree-sitter parsers must be installed with an external package manager, ideally the one your operating system already uses.
Other than that, Neovim should start Tree-sitter with just the below code:
if has('nvim')
augroup StartTreesitter
autocmd!
autocmd FileType * lua pcall(vim.treesitter.start)
augroup END
endif