This guide covers all the plugins, settings, and keybindings in this Neovim configuration.
- Absolute line numbers: Enabled
- Relative line numbers: Enabled (shows distance from current line)
- Tab width: 2 spaces
- Expand tabs to spaces: Yes
- Smart indent: Enabled (auto-indents new lines)
- Highlight search: Enabled (highlights all matches)
- Incremental search: Enabled (shows matches as you type)
- Ignore case: Yes (unless you type uppercase)
- Smart case: Enabled (case-sensitive if you type uppercase)
- Clipboard: Synced with system clipboard (
"+yto copy,"+pto paste) - Persistent undo: Enabled (undo history saved between sessions)
- Swap files: Disabled
- Mouse support: Enabled
- True color: Enabled
- Leader:
Space - Local Leader:
\
Use leader key for custom commands. Example: <Space>ff opens file finder.
Plugin: datsfilipe/vesper.nvim
A beautiful dark theme with transparent background and italic styling.
Features:
- Transparent background (works with terminal transparency)
- Italics for comments, keywords, functions, strings, and variables
Usage: Theme is automatically applied on startup.
Plugin: nvim-lualine/lualine.nvim
Modern statusline showing file info, git branch, diagnostics, and more.
Features:
- Shows current mode (NORMAL, INSERT, VISUAL, etc.)
- File path and modification status
- Git branch and changes
- LSP diagnostics (errors, warnings)
- File encoding and type
- Cursor position
Usage: Always visible at the bottom of the screen.
Plugin: nvim-treesitter/nvim-treesitter
Advanced syntax highlighting and code understanding.
Pre-installed Languages:
- C
- Lua
- Vim
- Markdown
- TypeScript/TSX
- Python
Features:
- Superior syntax highlighting
- Smart indentation
- Auto-tagging (for HTML/JSX)
- Code folding support
Usage: Works automatically. Run :TSUpdate to update parsers.
Installing new languages:
:TSInstall javascript
:TSInstall rustPlugins:
neovim/nvim-lspconfigwilliamboman/mason.nvimwilliamboman/mason-lspconfig.nvim
Provides IDE-like features: autocomplete, go-to-definition, hover docs, etc.
Pre-configured Servers:
lua_ls(Lua) - with Neovim-specific configurationpyright(Python) - configured for Python 3.10/3.11/3.12
Adding More Language Servers:
- Open Mason:
:Mason - Search for your language server (use
/to search) - Press
ito install - Add configuration in
init.lua:
vim.lsp.config("pyright", { capabilities = capabilities })
vim.lsp.enable("pyright")LSP Keybindings:
gd- Go to definitionK- Peek fold or show LSP hover documentation (context-aware)<Space>rn- Rename symbol<Space>ca- Code actions
Common Language Servers:
- Python:
pyright(pre-configured) orpylsp - JavaScript/TypeScript:
ts_ls - Go:
gopls - Rust:
rust_analyzer - C/C++:
clangd
Note: This configuration searches for Python in the following order: python3.12, python3.11, python3.10, then falls back to python3.
Plugin: hrsh7th/nvim-cmp
Intelligent autocompletion with multiple sources.
Completion Sources:
- LSP (context-aware completions)
- LuaSnip (code snippets)
- Buffer (words from open files)
- Path (file system paths)
Keybindings (in insert mode):
Ctrl+Space- Trigger completion manuallyTab- Select next item / expand snippetShift+Tab- Select previous item / jump back in snippetEnter- Confirm selectionCtrl+e- Close completion menuCtrl+f- Scroll docs downCtrl+b- Scroll docs up
Usage: Start typing and suggestions appear automatically.
Plugin: nvim-telescope/telescope.nvim
Powerful fuzzy finder for files, text, buffers, and more.
Keybindings:
<Space>ff- Find files (searches by filename)<Space>fg- Live grep (search text in files)<Space>fb- Find buffers (switch between open files)<Space>fh- Help tags (search Vim help)
Inside Telescope:
Ctrl+j/korDown/Up- Navigate resultsEnter- Open selectionCtrl+x- Open in horizontal splitCtrl+v- Open in vertical splitCtrl+t- Open in new tabEsc- Close Telescope
Tips:
- Fuzzy matching: type parts of filename (e.g., "conit" finds "config/init.lua")
- Use
live_grepto search within file contents - Prefix with
!to exclude (e.g., "foo !bar" finds "foo" but not "bar")
Plugin: nvim-neo-tree/neo-tree.nvim
Modern file explorer with git integration and tree view.
Keybindings:
-- Toggle Neo-tree<Space>e- Focus Neo-tree
Inside Neo-tree:
Enteroro- Open file or toggle directorya- Add new file/directory (end with/for directory)d- Delete file/directoryr- Rename file/directoryy- Copy file/directoryx- Cut file/directoryp- Paste file/directoryc- Copy file to clipboardm- Move fileq- Close Neo-treeR- Refresh treeH- Toggle hidden files?- Show help
Features:
- Tree-style file navigation
- Git status indicators (modified, added, deleted files)
- Automatic file watching (updates when files change)
- Follows current file automatically
- Icons for file types
- Closes automatically if it's the last window
Plugin: numToStr/Comment.nvim
Easy code commenting with smart language detection.
Keybindings:
gcc- Toggle line commentgc- Toggle comment (in visual mode)gbc- Toggle block commentgb- Toggle block comment (in visual mode)
Examples:
gccon a line: toggles single line commentgc3j- Comment current line + 3 lines below- Visual select +
gc- Comment all selected lines
Language-aware: Automatically uses correct comment syntax (e.g., // for JS, # for Python).
Plugin: windwp/nvim-autopairs
Auto-close brackets, quotes, and more.
Features:
- Type
(and get()with cursor in middle - Type
)when next to)moves cursor forward (doesn't insert duplicate) - Works with:
(),[],{},'',"",`` - Press
Enterbetween brackets for formatted expansion:function() {|} // cursor at | // Press Enter: function() { | }
Smart features:
- Deletes pairs together (backspace after
(deletes both(and)) - Integrates with nvim-cmp (pairs work in completion)
Plugin: lewis6991/gitsigns.nvim
Git integration showing changes in the gutter.
Features:
- Added lines: Green
+in gutter - Modified lines: Blue
~in gutter - Removed lines: Red
_in gutter - Git blame information
- Diff preview
Default Keybindings (can be customized):
]c- Next hunk (git change)[c- Previous hunk<leader>hs- Stage hunk<leader>hu- Undo stage hunk<leader>hr- Reset hunk<leader>hp- Preview hunk<leader>hb- Blame line
Usage: Changes appear automatically in the sign column (gutter).
Plugin: folke/trouble.nvim
Beautiful diagnostics panel to view and navigate all errors and warnings.
Keybindings:
<Space>xx- Toggle diagnostics panel (all workspace issues)<Space>xX- Buffer diagnostics (current file only)<Space>cs- Show symbols (functions, variables in current file)<Space>cl- LSP definitions and references<Space>xL- Location list<Space>xQ- Quickfix list
Inside Trouble Panel:
j/korDown/Up- Navigate through issuesEnter- Jump to the issue locationq- Close Trouble panel?- Show help
Features:
- Clean list view of all diagnostics
- Filter by severity (errors, warnings, info, hints)
- Jump directly to each issue
- Shows error messages and locations
- Icons for different diagnostic types
- Auto-updates as you code
Usage: Press <Space>xx to see all diagnostics in your workspace. Navigate with j/k and press Enter to jump to any issue.
Plugin: folke/which-key.nvim
Shows available keybindings in a popup as you type.
Usage:
<Space>?- Show all keymaps<Space><Space>- Show leader keymaps- Press any key prefix (like
<Space>orz) and wait 500ms to see available completions
Features:
- Modern, clean interface
- Organized by groups (Find/Files, Diagnostics, Code/LSP, etc.)
- Shows key descriptions for easy discovery
- Helpful for learning new keybindings
Plugin: stevearc/dressing.nvim
Improves the default Neovim UI for inputs and selections.
Features:
- Better input prompts (like rename dialog)
- Integrates with Telescope for selections
- Rounded borders and cleaner appearance
- Improved visibility and usability
Usage: Works automatically when plugins request user input or selections.
Plugin: lewis6991/satellite.nvim
Displays a scrollbar with decorations showing search matches, diagnostics, git changes, and cursor position.
Features:
- Visual scrollbar on the right side
- Search match indicators
- Diagnostic locations (errors/warnings)
- Git change locations
- Mark positions
- Cursor position indicator
Usage: Always visible on the right side of the window.
Plugins:
kevinhwang91/nvim-ufokevinhwang91/promise-async
Advanced code folding with Treesitter and LSP support.
Features:
- Intelligent folding based on code structure
- Folds functions, classes, objects, arrays, loops, etc.
- Preview folded content on hover
- Works with all Treesitter-supported languages
- Beautiful fold column indicator
Keybindings:
za- Toggle fold under cursorzc- Close fold under cursorzo- Open fold under cursorzR- Open all folds in bufferzM- Close all folds in bufferzr- Open folds except certain kindszm- Close folds with specific criteriazj- Move to next foldzk- Move to previous foldK- Peek folded content (or show LSP hover if not on fold)
Usage:
- Navigate to a function or code block
- Press
zcto close/fold it - Press
zoto open/unfold it - Hover over a fold and press
Kto preview its contents without unfolding - Use
zMto fold everything,zRto unfold everything
Tips:
- Folds are based on syntax, so they work intelligently for each language
- The fold column on the left shows fold indicators
- All folds start open by default (foldlevel=99)
- Preview window appears when you press
Kon a folded line
Plugin: ThePrimeagen/harpoon
Fast file navigation using persistent marks for frequently accessed files.
Features:
- Mark up to 5 frequently used files for instant access
- Quick menu to view and manage all marks
- Navigate between marks with single keystrokes
- Project-specific mark persistence
- Faster than fuzzy finding for files you access repeatedly
Keybindings:
<Space>oa- Add current file to Harpoon marks<Space>oo- Open Harpoon quick menu<Space>o1- Jump to mark 1<Space>o2- Jump to mark 2<Space>o3- Jump to mark 3<Space>o4- Jump to mark 4<Space>o5- Jump to mark 5<Space>on- Navigate to next mark<Space>op- Navigate to previous mark
Inside Harpoon Menu:
j/korDown/Up- Navigate through marksEnter- Jump to selected filedd- Remove mark from listqorEsc- Close menu
Usage:
- Open a file you frequently access
- Press
<Space>oato add it to Harpoon - Repeat for up to 5 important files in your project
- Use
<Space>o1through<Space>o5to instantly jump between them - Press
<Space>ooto see all your marks and manage them
Workflow Tip: Mark your most-edited files (main file, config, types, tests, etc.) and switch between them instantly without fuzzy finding.
Plugin: MeanderingProgrammer/render-markdown.nvim
In-buffer markdown rendering with beautiful syntax and icons.
Features:
- Renders markdown directly in Neovim (no browser needed)
- Code blocks with language-specific styling
- Custom bullet point icons
- Heading colors matching Vesper theme
- Concealment of markdown syntax (shows formatted result)
- Tables, links, and emphasis rendering
- Checkbox rendering for task lists
Keybindings:
<Space>tr- Toggle render markdown on/off
Auto-enabled for:
- All
.mdfiles automatically show rendered markdown - Concealment level set to hide syntax when not editing
- Word wrap enabled for comfortable reading
Usage:
- Open any markdown file - rendering is automatic
- Press
<Space>trto toggle between raw and rendered view - Edit normally - syntax is revealed when cursor is on a line
- See formatted preview without leaving Neovim
Features in Detail:
- Code blocks: Highlighted with custom icons
- Headings: Color-coded (H1-H6) using Vesper theme colors
- Lists: Custom bullet icons for better readability
- Links: Concealed to show just the link text
- Emphasis: Italics and bold rendered properly
Plugin: 3rd/image.nvim
Inline image viewing within Neovim using Kitty graphics protocol.
Features:
- Display images directly in Neovim (Kitty terminal required)
- Automatic image rendering in markdown files
- Download and cache remote images
- Supports PNG, JPG, GIF formats
- Markdown integration (shows
images) - PDF and Office file external opening support
Keybindings:
<Space>io- Open file externally (for PDFs, Office docs, etc.)
Supported External Files:
- PDFs (
.pdf) - Office documents (
.docx,.xlsx,.pptx) - Other binary files
Usage:
- In markdown files, images are automatically displayed inline
- For PDFs or Office files, press
<Space>ioto open in default app - Remote images in markdown are downloaded and cached automatically
- Works seamlessly while editing documentation
Requirements:
- Kitty terminal for inline image display
- ImageMagick for image processing
- Default system apps for external file opening
Tips:
- Great for viewing diagrams while editing documentation
- Automatically handles both local and remote images
- Falls back gracefully if Kitty terminal is not available
Plugin: cameron-wags/rainbow_csv.nvim
Syntax highlighting for CSV and TSV files with column visualization.
Features:
- Auto-detects CSV and TSV files
- Color-codes each column differently
- Makes data structure immediately visible
- Lightweight and fast
- Works with various delimiters
Supported Formats:
- CSV (comma-separated values)
- TSV (tab-separated values)
- Other delimiter-separated files
Usage:
- Open any
.csvor.tsvfile - Columns automatically get different colors
- Navigate and edit data with visual column separation
- No configuration needed
Benefits:
- Easier to read and edit tabular data
- Quickly identify column boundaries
- Reduces errors when working with data files
- Essential for data analysis and manipulation
Language Server Protocol provides IDE features like:
- Autocomplete: Smart suggestions based on code context
- Go to Definition: Jump to where functions/variables are defined
- Hover Documentation: See function signatures and docs
- Diagnostics: Real-time error and warning detection
- Rename: Safely rename symbols across files
- Code Actions: Quick fixes and refactoring
Open Mason:
:MasonMason Interface:
- Use
/to search - Press
ion a server to install - Press
Xon a server to uninstall - Press
Uto update all installed servers - Press
g?for help
Recommended Setup Flow:
- Install server via Mason (
:Mason) - Add to config in
init.lua:
vim.lsp.config("server_name", { capabilities = capabilities })
vim.lsp.enable("server_name")- Restart Neovim
i- Insert modeEscorCtrl+[- Normal modev- Visual modeV- Visual line modeCtrl+v- Visual block mode:w- Save:q- Quit:wqorZZ- Save and quit:q!- Quit without savingu- UndoCtrl+r- Redo
<Space>w- Save file<Space>q- Quit window<Space>cr- Check and reload files<Space>tw- Toggle word wrapgh- Jump back in historygl- Jump forward in historyEsc- Clear search highlights
h/j/k/l- Left/Down/Up/Rightw- Next wordb- Previous word0- Start of line$- End of linegg- Top of fileG- Bottom of file{number}G- Go to line number%- Jump to matching bracketCtrl+d- Scroll half page downCtrl+u- Scroll half page up
dd- Delete lineyy- Yank (copy) linep- Paste after cursorP- Paste before cursorx- Delete characterr- Replace charactercw- Change wordciw- Change inside wordci(- Change inside parentheses.- Repeat last command
:splitor:sp- Horizontal split:vsplitor:vs- Vertical splitCtrl+w h/j/k/l- Navigate between splits<Space>h- Move to left split<Space>j- Move to bottom split<Space>k- Move to top split<Space>l- Move to right splitCtrl+w =- Equal size splitsCtrl+w q- Close current split
gd- Go to definitionK- Peek fold or LSP hover documentation<Space>rn- Rename symbol<Space>ca- Code actions
<Space>ff- Find files<Space>fg- Live grep (search in files)<Space>fb- Find buffers<Space>fh- Help tags
-- Toggle Neo-tree<Space>e- Focus Neo-tree
<Space>?- Show all keymaps<Space><Space>- Show leader keymaps only
gcc- Toggle line commentgc- Toggle comment (visual mode)
Ctrl+Space- Trigger completionTab- Next item / expand snippetShift+Tab- Previous itemEnter- ConfirmCtrl+e- Close menu
za- Toggle fold under cursorzc- Close fold under cursorzo- Open fold under cursorzR- Open all foldszM- Close all foldszr- Open folds except kindszm- Close folds with criteriazj- Next foldzk- Previous fold
<Space>oa- Add file to Harpoon marks<Space>oo- Open Harpoon menu<Space>o1- Jump to mark 1<Space>o2- Jump to mark 2<Space>o3- Jump to mark 3<Space>o4- Jump to mark 4<Space>o5- Jump to mark 5<Space>on- Navigate to next mark<Space>op- Navigate to previous mark
<Space>mp- Open markdown file in browser<Space>tr- Toggle render markdown (in-buffer)
<Space>io- Open file externally (PDFs, Office docs)
*- Search for selected textgc- Toggle comment on selectiongb- Toggle block comment on selection
-
Quick File Switching:
- Use Harpoon for your 5 most-accessed files:
<Space>oato mark,<Space>o1-5to jump <Space>ffto find files by name (for everything else)<Space>fbto switch between recent buffers-to toggle Neo-tree file explorer for project navigation
- Use Harpoon for your 5 most-accessed files:
-
Search Across Project:
<Space>fgthen type search term- Use LSP features:
gdto jump to definitions - Visual select +
*to search for selected text
-
Multiple Cursors Alternative:
- Use
cgnpattern: search with/pattern, thencgnto change next match,.to repeat
- Use
-
Quick Edits:
ciw- change word under cursorci"- change inside quotesci{- change inside bracesdt,- delete until comma
-
Git Workflow:
- View changes in gutter with Gitsigns
- Use
:Gitif you have vim-fugitive installed - See file history with
<Space>fgand search for filename
-
Markdown Editing:
- In-buffer rendering with
<Space>trfor quick previews - Open in browser with
<Space>mpfor final review - Images display automatically in Kitty terminal
- Use
<Space>ioto open PDFs or Office docs externally
- In-buffer rendering with
-
Code Navigation with Folding:
- Open a large file and press
zMto fold everything - Scan the structure, then
zoon sections you need to see - Use
Kto peek inside folds without opening them - Combine with Harpoon: mark files, use folding to understand structure
- Open a large file and press
Telescope:
- Use
Ctrl+/in Telescope to see all keybindings <Space>fgsearches file contents - great for finding TODO comments- Chain with other commands:
<Space>ff, select file,Ctrl+xfor horizontal split
Neo-tree:
- Press
?inside Neo-tree to see all available commands - Use
Hto toggle hidden files (like.gitignore,.env) - Create nested directories with
a: typefolder/subfolder/and press Enter - Git indicators show file status at a glance
LSP:
:LspInfo- Check LSP status for current buffer:LspLog- View LSP logs for debugging- Hover (
K) twice to enter hover window (useful for long docs)
Treesitter:
:InspectTree- See syntax tree (great for debugging highlighting):Inspect- Show highlight groups under cursor
Code Folding (UFO):
- Use
zMto fold all code, thenzoto selectively open sections you're working on - Press
Kon a folded line to preview its contents without opening - Combine with Telescope:
<Space>ffto find file, thenzMto collapse all functions - Great for understanding code structure at a glance
- Folds automatically work for functions, classes, objects, arrays, and more
Harpoon:
- Mark your 5 most-edited files in a project for instant access
- Use numeric marks (
<Space>o1-5) instead of fuzzy finding for core project files - Common pattern: 1=main/index, 2=config, 3=types, 4=tests, 5=utils
- Perfect for switching between related files during feature development
- Much faster than Telescope for files you access constantly
Markdown Workflow:
- Use
<Space>trfor in-buffer preview while editing - Use
<Space>mpto open the file in your default browser - Images render inline automatically in markdown files (Kitty terminal)
- Great for writing documentation, READMEs, or technical blog posts
Rainbow CSV:
- Open any
.csvor.tsvfile to see automatic column highlighting - Each column gets a different color for easy visual separation
- Navigate with standard Vim motions - colors make it easier to track columns
- Essential when editing configuration data or analyzing datasets
- Vim Tutor: Run
vimtutorin terminal - Neovim Docs: Press
<Space>fhand search - Plugin Docs: Visit GitHub repos linked above
- Practice: Try
vim-be-goodplugin for interactive exercises
- Check if server is running:
:LspInfo - Verify server is installed:
:Mason - Check logs:
:LspLog - Restart LSP:
:LspRestart
- Ensure LSP is running (
:LspInfo) - Check if you're in insert mode
- Try
Ctrl+Spaceto trigger manually - Verify cmp sources:
:lua print(vim.inspect(require('cmp').get_config().sources))
- Make sure you're in the right directory (
:pwd) - Check if files are gitignored (Telescope respects
.gitignore) - Use
:Telescope find_files hidden=truefor hidden files
- Check terminal supports true color:
:echo has('termguicolors') - Set terminal to use true color (most modern terminals do)
- Try different terminal (iTerm2, Alacritty, WezTerm recommended)
This configuration uses lazy.nvim as the plugin manager. All config is in nvim/init.lua.
To add a new plugin:
- Add to the
require("lazy").setup({})table ininit.lua - Restart Neovim or run
:Lazy sync
To modify keybindings:
Look for vim.keymap.set() calls in init.lua and modify as needed.
To add LSP servers:
- Install via
:Mason - Add config in the LSP section using the pattern shown for
lua_ls
| Command | Action |
|---|---|
<Space>w |
Save file |
<Space>q |
Quit window |
<Space>ff |
Find files |
<Space>fg |
Search in files |
<Space>fb |
Find buffers |
- |
Toggle file explorer |
<Space>e |
Focus file explorer |
<Space>xx |
Toggle diagnostics panel |
gd |
Go to definition |
K |
Peek fold or hover docs |
<Space>rn |
Rename |
<Space>ca |
Code actions |
gcc |
Toggle comment |
za |
Toggle fold |
zM |
Close all folds |
zR |
Open all folds |
<Space>h/j/k/l |
Window navigation |
<Space>oa |
Add Harpoon mark |
<Space>oo |
Harpoon menu |
<Space>o1-5 |
Jump to mark 1-5 |
<Space>on/op |
Next/previous mark |
<Space>mp |
Open markdown in browser |
<Space>tr |
Toggle markdown render |
<Space>io |
Open file externally |
gh/gl |
Jump history back/forward |
<Space>tw |
Toggle word wrap |
<Space>? |
Show all keymaps |
<Space><Space> |
Show leader keymaps |
:Mason |
Manage LSP servers |
:Lazy |
Manage plugins |
Made with Neovim - Happy coding!