(Neo)vim is usable without plugins

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

Thank you for your interest in my website. The content is licensed under CC BY-SA, and the code is licensed under GPLv3.