diff options
Diffstat (limited to 'content/posts/neovim-is-usable-without-plugins.md')
-rw-r--r-- | content/posts/neovim-is-usable-without-plugins.md | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/content/posts/neovim-is-usable-without-plugins.md b/content/posts/neovim-is-usable-without-plugins.md new file mode 100644 index 0000000..0fadb18 --- /dev/null +++ b/content/posts/neovim-is-usable-without-plugins.md @@ -0,0 +1,90 @@ +--- +title: "(Neo)vim is usable without plugins" +date: "2025-06-17" +--- + +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: + +```txt {tabWidth=0} +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`: + +```lua +return { + cmd = { "gopls" }, + root_markers = { ".git", "go.mod", "go.work" }, + filetypes = { "go", "gomod", "gotmpl", "gowork" }, +} +``` + +Then, just enable the server: + +```vim +if has('nvim-0.11') + if executable('gopls') + lua vim.lsp.enable('gopls') + endif +endif +``` + +See the [Neovim docs](https://neovim.io/doc/user/lsp.html#vim.lsp.Config) for more information. + +## Fuzzy Finding (Vim) + +This is self-explanatory. Vim has recursive search support, along with wildcards. + +```vim +" 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: + +```vim +if has('nvim') + augroup StartTreesitter + autocmd! + autocmd FileType * lua pcall(vim.treesitter.start) + augroup END +endif +``` |