My Neovim configuration
- Lua 87.6%
- TeX 11.9%
- Shell 0.5%
| lua/weeheavy | ||
| init.lua | ||
| lazy-lock.json | ||
| README.md | ||
| sample.png | ||
My Neovim configuration
Motivation
After doing my first steps with https://github.com/nvim-lua/kickstart.nvim, I decided to roll my own, custom, "lightweight" Neovim configuration in order to better understand Neovim and its configuration/customization, package managers, plugins etc. and have "my own" config that only includes things I really need.
Installation
- Install Neovim 0.9.x
- Install OS dependencies documented in
init.lua - Clone this Git repository to
~/.config/nvim
Finishing touches
- Install Treesitter comment parser (to highlight
FIXME:/NOTE:/TODO:/XXX:) with:TSInstall comment - Create a
$HOME/.ignorefile and add big, useless directories to it, so Telescope/ripgrep/fd can ignore those. My current list of files/directories is available inlua/weeheavy/plugins/telescope-fzf-native.lua
Speed
Output from lazy.nvim profiling (:Lazy, then P):
Start and open init.lua
Startuptime: 71.69ms
Based on the actual CPU time of the Neovim process till UIEnter.
This is more accurate than `nvim --startuptime`.
LazyStart 10.92ms
LazyDone 40.71ms (+29.78ms)
UIEnter 71.69ms (+30.99ms)
Starting with empty file
Around 50% of the plugins are lazy-loaded.
Startuptime: 46.94ms
Based on the actual CPU time of the Neovim process till UIEnter.
This is more accurate than `nvim --startuptime`.
LazyStart 10.59ms
LazyDone 40.6ms (+30.02ms)
UIEnter 46.94ms (+6.34ms)
Plugins
| Name | Purpose | URL |
|---|---|---|
| lazy.nvim | Package manager | https://github.com/folke/lazy.nvim |
| telescope.nvim | Find, Filter, Preview, Pick | https://github.com/nvim-telescope/telescope.nvim |
| telescope-fzf-native.nvim | Fuzzy finder for Telescope | https://github.com/nvim-telescope/telescope-fzf-native.nvim |
| nvim-treesitter | Parser/syntax highlighting | https://github.com/nvim-treesitter/nvim-treesitter |
| nvim-treesitter-context | Shows current line context | https://github.com/nvim-treesitter/nvim-treesitter-context |
| nvim-treesitter-textobjects | ? | https://github.com/nvim-treesitter/nvim-treesitter-textobjects |
| nightfox.nvim | Theme with treesitter/lsp support | https://github.com/EdenEast/nightfox.nvim |
| tokyonight.nvim | Theme with treesitter/lsp support | https://github.com/folke/tokyonight.nvim |
| lualine.nvim | Status line | https://github.com/nvim-lualine/lualine.nvim |
| nvim-web-devicons | filetype glyphs (icons) for plugins | https://github.com/nvim-tree/nvim-web-devicons |
| gitsigns.nvim | Git change indicator | https://github.com/lewis6991/gitsigns.nvim |
| which-key.nvim | Shows contextual key bindings | https://github.com/folke/which-key.nvim |
| indent-blankline.nvim | Visual indentation guide | https://github.com/lukas-reineke/indent-blankline.nvim |
| vim-illuminate | Highlight word under the cursor (w/ LSP, Treesitter, regex) | https://github.com/RRethy/vim-illuminate |
| lsp-zero.nvim | LSP for mere mortals | https://github.com/VonHeikemen/lsp-zero.nvim |
| conform.nvim | Black magic wizardry, replacement for null-ls |
https://github.com/stevearc/conform.nvim |
Looks
This is how it looks like:
Command cheat sheet
Vim/Neovim
Basics
Spaceis set as the leader key
Plugin things and debugging
:soSource file:checkhealth <pluginname>check for problems of a plugin. Use:checkhealthto check base and all plugins:Lazyto bring up package manager UI:verbose set expandtab?check whereexpandtabhas been set last
Navigation
Code navigation
wmove to start of next word (ignores punctuation due to remap)emove to end of next word (ignores punctuation due to remap)bmove to start of previous word (ignores punctuation due to remap)
Code editing
leader+ire-indent whole fileleader+ore-format whole file or visual withconform.nvimiinsert mode at cursor positionIinsert mode at the beginning of the lineainsert mode one character after the current oneAinsert mode at the end of the lineoinsert mode a line below the cursorOinsert mode a line above the cursor
Visual mode
vvisual mode at cursor positionVvisual mode line modeCtrl+vvisual block mode
Tab navigation
(Don't use tabs by default, but use buffers instead).
Ctrl+tto open a file in e.g. a Telescope finder in a new tabgtorgTto switch between open tabs
Window navigation
Ctrl+wqclose windowCtrl+wssplit window horizontallyCtrl+wvsplit window verticallyCtrl+<h/j/k/l>switch between split windows
Buffer navigation
Space+Spaceshows open buffers (viaTelescope buffers):bdclose current buffer
Telescope
Navigation in live_grep, find_files, git_status and file_browser
↓orCtrl+nscroll down (next) file list↑orCtrl+pscroll up (previous) file listCtrl+dscroll down in previewCtrl+uscroll up in previewCtrl+/help
Treesitter
:TSUpdateupdate all parsers:TSModuleInfoshow installed parsers
Open issues/TODOs
- ollama integration https://github.com/nomnivore/ollama.nvim
- Solution to run file_browser when doing a vertical/horizontal split?
- https://github.com/folke/trouble.nvim
- Implement linting, see https://www.josean.com/posts/neovim-linting-and-formatting
