# My Neovim configuration ## Motivation After doing my first steps with , 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 1. Install Neovim 0.9.x 1. Install OS dependencies documented in `init.lua` 1. 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/.ignore` file and add big, useless directories to it, so Telescope/ripgrep/fd can ignore those. My current list of files/directories is available in `lua/weeheavy/plugins/telescope-fzf-native.lua` ## Speed Output from lazy.nvim profiling (`:Lazy`, then `P`): ```bash Startuptime: 52.04ms Based on the actual CPU time of the Neovim process till UIEnter. This is more accurate than `nvim --startuptime`. LazyStart 10.78ms LazyDone 48.72ms (+37.94ms) UIEnter 52.04ms (+3.32ms) ``` ## Plugins | Name | Purpose | URL | | --- | --- | --- | | **lazy.nvim** | Package manager | | | **telescope.nvim** | Find, Filter, Preview, Pick | | | **telescope-fzf-native.nvim** | Fuzzy finder for Telescope | | | **nvim-treesitter** | Parser/syntax highlighting | | | **nvim-treesitter-context** | Shows current line context | | | **nvim-treesitter-textobjects** | ? | | | **vim-sleuth** | Heuristically set tab/shift mode | | | **nightfox.nvim** | Theme with treesitter/lsp support | | | **lualine.nvim** | Status line | | | **nvim-web-devicons** | filetype glyphs (icons) for plugins | | | **gitsigns.nvim** | Git change indicator | | | **which-key.nvim** | Shows contextual key bindings | | ## Command cheat sheet ### Vim/Neovim #### Basics - `Space` is set as the leader key #### Plugin things - `:so` Source file - `:checkhealth ` check for problems of a plugin. Use `:checkhealth` to check base and all plugins - `:Lazy` to bring up package manager UI #### Navigation ##### Code navigation - `w` move to start of next word (ignores punctuation due to remap) - `e` move to end of next word (ignores punctuation due to remap) - `b` move to start of previous word (ignores punctuation due to remap) ##### Code editing - `leader+i` re-indent whole file - `i` insert mode at cursor position - `I` insert mode at the **beginning of the line** - `a` insert mode **one character after the current** one - `A` insert mode at the **end of the line** - `o` insert mode a line **below** the cursor - `O` insert mode a line **above** the cursor ##### Visual mode - `v` visual mode at cursor position - `V` visual mode line mode - `Ctrl+v` visual block mode ##### Tab navigation (Don't use tabs by default, but use buffers instead). - `Ctrl+t` to open a file in e.g. a Telescope finder in a new tab - `gt` or `gT` to switch between open tabs ##### Window navigation - `Ctrl+wq` close window - `Ctrl+ws` split window horizontally - `Ctrl+wv` split window vertically - `Ctrl+` switch between split windows ##### Buffer navigation - `Space+Space` shows open buffers (via `Telescope buffers`) ### Telescope #### Navigation in live_grep, find_files, git_status and file_browser - `↓` or `Ctrl+n` scroll down (**n**ext) file list - `↑` or `Ctrl+p` scroll up (**p**revious) file list - `Ctrl+d` scroll **d**own in preview - `Ctrl+u` scroll **u**p in preview - `Ctrl+/` help ### Treesitter - `:TSUpdate` update all parsers - `:TSModuleInfo` show installed parsers ## Open issues/TODOs - Hinting for trailing spaces (EOL) and blank space on line - LSP setup/config (mason?), consume - ollama integration - Solution to run file_browser when doing a vertical/horizontal split?