/ΛΙnvi mi:/
A MEticulous nvim distribution, crafted from scratch solely for ME with every feature and keybindings configured to offer supreME comfort and compleMEnt ME workflow imMEnsely.
-
Neovim (Needs to be built with LuaJIT)
-
GCC: For compiling treesitter languages in Linux
-
git: For git integration, cloning plugin repos etc.
-
ripgrep: For live grep
-
fd: For Find Files
-
vifm: File Manager
-
lazygit: Git UI
-
nodejs: For Language Servers and Formatters
-
live-server: For local HTML Server
-
kitty: Kittyβs Graphics Protocol for inline image/diagram rendering
-
mermaid-cli: For rendering inline Mermaid Diagrams
π Install Guide (auto backups prev config if any)
If any config is already present, it backups your config and puts NvME in place.
ME=~/.config/nvim; [ -d $ME ] && mv $ME ${ME}_backup/
git clone https://github.com/MidHunterX/NvME $ME --depth 1 && nvimset ME ~/.config/nvim; test -d $ME; and mv $ME {$ME}_backup
git clone https://github.com/MidHunterX/NvME $ME --depth 1 && nvim|
Warning
|
Many core components are Linux centric. Features like image preview wonβt work and other features 100% will break on Windows currently. And itβs super hard to set up all the requirements on Windows. So, proceed only if you are highly determined. |
-
Suggested Compiler for Tree-sitter: Zig Compiler
git clone https://github.com/MidHunterX/NvME $env:localappdata\nvim --depth 1; nvimgit clone https://github.com/MidHunterX/NvME %localappdata%\nvim --depth 1 && nvimπΆ Uninstall Guide (go back to previous config if exists)
π± Programming Frameworks Integration Guide
-
Insert completion using
<C-f>just like how it is done in fish shell
-
From
:Mason, InstallpyrightLanguage Server -
Django uses some Python "magic" that makes having precise types for some code patterns problematic. To provide more precise static types and type inference for Django framework and be recognizable to pyright LSP, install:
pip install django-stubs
sudo pacman -S jdk21-openjdk sudo archlinux-java set java-21-openjdk
yay -Sy android-sdk \
android-sdk-build-tools \
android-sdk-cmdline-tools-latest \
android-platform \
android-sdk-platform-toolsandroid-sdk-platform-tools provides the adb command.
yay -S flutter-binNow flutter command is available in $PATH. Create a new project using flutter create myapp and open it with flutter run.
- Important Stuff on Top Left Side
-
Left side is where your eyes linger most of the time when coding. Therefore the most important stuff happens directly near your line of sight. Macro Record Status possess high importance until recording is stopped. Therefore it stays on left side only for the time being recorded for a macro.
- Less Important Stuff on Top Right Side
-
Buffer list is not needed at all times, therefore it doesnβt have that much importance to interfere with the code in buffer.
- Yank into System Clipboard by Default
-
Text is copied to system clipboard almost on every other apps; why should there be an exception here. Less hassle when copy pasting between windows frequently.
- Scroll past EOF in buffer with
j -
Personal preference for EOF to not be stuck at the bottom of the screen. Keys should always do something.
- Jump to line ends and paragraphs with
HandL -
H and L should be the extreme counterparts of h and l. No exceptions. After that, it jumps paragraphs (which is disabled in macro mode).
π‘ Learn More
If A means βinsert further rightβ and I means βinsert further leftβ, then
H should mean βmove further leftβ (line-wise), and L should mean βmove
further rightβ. Thus H and L is corrected semantically by following vim
conventions.
Now, what should happen when Iβm already at the edge? It does nothing? No. Pop it off into the next gap so, I can use one key for multiple things in a controlled manner.
-
When at the beginning of a line, H jumps to the previous paragraph
{. -
When at the end of a line, L jumps to the next paragraph
}.
|
Note
|
Paragraph jumping is intended for general navigational purposes only. Therefore it is disabled in macro mode. |
-
Convert text to Hit Font with
:HitFont -
Trim trailing lines and Write Buffer with
<leader>w -
Git Commit with
<leader>gcusing Lazygit -
Run/Execute files with
F5,<leader>ruor:lua Execute_order_69() -
Run file formatter with
<leader>fmor:lua Run_formatter() -
Custom made CMP auto-completion for git commit messages and regular expression matching
treesitter_walker.lua
Navigate through nodes with <C-hjkl>. On a well formatted code, think of this as moving through the indent lines vertically and jumping between the indent lines horizontally.
Swap those nodes around with <C-HJKL>.
indent_lines.lua
Code indentation lines which highlights the current scope. The scope is not the current indentation level! Instead, it is the indentation level where variables or functions are accessible. This depends on the language you are writing. The highlight colors are matched with the colors of brackets for a more visually cohesive experience.
flash.lua
Leap to any text with s (Search) and select any Treesitter node with S (Select TS). These are also available as an adverb in vim motion grammar using r (Remotely) and R (Remotely TS) instead (e.g. yr<search_text>iw).
βΉοΈ Other DX Related Features
-
comment.lua: Toggle comment withgcc(// line-wise) andgbb(/* block-wise */). Works with<motion>as well (gbip, gc2k, β¦β).
bracket_surround.lua
<bracket> = [a]ngle bracket > | [b]racket ) | [B]race } | [r]ectangle bracket ] | [q]uote " '
| Keybinding | Description |
|---|---|
|
Delete Surrounding <bracket> |
|
Change Surrounding <bracket> to <new-bracket> |
|
Change Surrounding <bracket> to <new-bracket> (line-wise) |
|
Surround this <motions> with <bracket> |
|
Surround this <motions> with <bracket> (line-wise) |
|
Surround this Line with <bracket> |
|
Surround this Line with <bracket> (line-wise) |
βΉοΈ Other Bracket Related Features
-
bracket_rainbow.lua: Colorizes bracket pairs based on their nesting level. The colors are inspired from "Bracket Pair Colorizer" VSCode extension; which was then adopted as VSCode core feature. -
bracket_matchparen.lua: Highlights matching bracket pair when cursor is anywhere inside the block. An improved version of inbuilt matchparen. -
bracket_autopairs.lua: Autoclose brackets, quotes, etc. when typing them. Disabled in macro mode.
ai_lsp_diagnostics.lua
Helps you work out WTF that code error means and how to fix it!
| Keybinding | Description |
|---|---|
|
WTF Debug: Give me the simplified explanation of this error |
|
WTF Fix: Just make this error disappear automatically |
|
WTF Search: Google this error |
|
WTF Provider: List and choose an LLM provider |
|
Note
|
Since this keybind conflicts with <leader>w (save file), this mode can only be activated by pressing <leader> and waiting for 1 second.
|
π‘ How to set up?
To install, just export the LLM API key of your choice as an environment variable. For example:
# Gemini
export GEMINI_API_KEY=NznytnzngvbaBsPungTCGnaqTbbtyrFrnepu-NcvUrer
# OpenAI
export OPENAI_API_KEY=sk-XrlGbGurNyyrtrqylBcraShyylPybfrqNVPbzcnalNCVUrerSupports: ANTHROPIC, COPILOT, DEEPSEEK, GEMINI, GROK, OLLAMA, OPENAI.
Then just select your provider using <leader>wp and you are good to go.
ai_windsurf.lua
| Keybinding | Description |
|---|---|
|
Accept Full completion (like in fish shell) |
|
Cycle through completions |
This feature is enabled by default. But you can toggle AI Code Completion with
:Codeium Toggle
π‘ How to set up?
-
Create a Windsurf account and get an API key.
-
Authorize Windsurf (Codeium) using:
:Codeium Auth-
Follow the rest of the instructions to get started.
After that, auto-completion will be available for use in the current buffer as you type.
tool_colorpicker.lua
Pick colors with :CccPick. Then use i to change input mode, o to change output format and q to quit selection.
visible_colorcodes.lua
Visualize color codes in buffer. Supported formats are Hex #RGBA, Termcode colorname, CSS rgba(), CSS hsla(), Tailwind Colors
βΉοΈ Other UI Related Features
-
markdown_UI.lua: Renders Markdown components like Headings, Tables, Code Blocks, Checkboxes, Blockquotes, Links etc.. -
markdown_inline-image.lua: Renders image under cursor using Kittyβs Graphics Protocol or ueberzugpp. It works great with Kitty and Tmux. -
markdown_inline-diagram.lua: Renders diagrams using Mermaid CLI and Kittyβs Graphics Protocol.
column_line.lua
Thin virtual vertical line at 80th column. Much nicer and visually less intrusive than the default color column. Punchcards typically used to have 80 column width. Early terminals screens also had a fixed display width of 80 characters. Keeping code within this limit prevented unsightly line wrapping and made it more readable. Even now, when doing multi window workflow, keeping it under 80 columns will make everything look nice and readable as well.
autocompletion.lua
-
Autocompletion suggestions keep popping while typing
-
If the suggestion box is visible, you can do the following:
-
Select Next entries with:
C-n,Down -
Select Previous entries with:
C-p,Up -
Accept an entry with
CR,i,C-i -
Cancel Completion with
C-e,o,C-o
Note: TAB does multiple things here
-
If accepted entry is a snippet and snippet is expanded, use
TAB&S-Tabfor jumping around the snippet fields. -
If autocompletion menu is visible, use
TABto select LSP pre-selected entry. -
If LSP pre-selected entry is not available in menu,
TABwill select the first entry. -
If menu and snippet are both not visible,
TABwill jump over quotes and brackets. -
If quotes and brackets are not available,
TABwill act as normalTAB.
autocompletion_colorful-menu.lua: Treesitter parsed syntax highlighting for autocompletion entries
π‘ Show Completion Workflows
Sentence = Verb [Adverb [<location>]] Preposition Noun
βΉοΈ See full structure
| Key | Description |
|---|---|
|
Undo |
|
Redo |
|
Smart Motion to Line Start ( |
|
Smart Motion to Line End ( |
|
Scroll Half Page Up (Cursor Centered) |
|
Scroll Half Page Down (Cursor Centered) |
|
Jump to Matching Bracket |
|
Go to Previous Buffer |
|
Go to Next Buffer |
|
Go to Previous Tab |
|
Go to Next Tab |
|
Execute Current Buffer ( |
|
ROT13 Cipher (default, with description) |
| Key | Description |
|---|---|
|
Move Line Down with Autoindent |
|
Move Line Up with Autoindent |
|
Indent Line/Selection Left (stay in Visual mode) |
|
Indent Line/Selection Right (stay in Visual mode) |
|
Smart Motion to Line Start ( |
|
Smart Motion to Line End ( |
| Key | Description |
|---|---|
|
Return to Normal Mode |
|
Return to Normal Mode |
|
Return to Normal Mode |
| Key | Description |
|---|---|
|
Leader |
|
Write File |
|
Erase Search Highlight |
|
Highlight & Replace Word |
|
Yank Entire Buffer |
|
Toggle Spell Check |
|
Delete Without Yanking |
|
Paste Without Yanking |
buffer_selector.lua
View all open buffers and switch between buffers with <leader>b. Then open buffer with tag letters or <CR>, V to vsplit, H to hsplit, D to close and q or esc to cancel selection.
Use <M-hl> (Alt+H / Alt+L) to move through buffers.
| Key | Description |
|---|---|
|
Tab: New |
|
Tab: Create |
|
Tab: Exit |
|
Tab: Quit |
|
Tab: Exit Other Tabs |
|
Tab: Quit Other Tabs |
|
Tab: Previous |
|
Tab: Next |
|
Tab: Previous |
|
Tab: Next |
-
Lazy Loading Plugin Manager
lazy.nvim -
Autoclosing Braces and Tags with
nvim-autopairs -
Default Colorscheme:
catppuccin -
Fancy Dashboard with
dashboard-nvim -
Gitsigns on Signcolumn with
gitsigns.nvim -
Install LSP servers, DAP servers, Linters and Formatters with
mason.nvim -
NeoVim LSP Configuration with
nvim-lspconfig -
Code Autocompletion with
nvim-cmp -
Code Snippets with
luasnip+friendly-snippets -
Tab out of Brackets and Quotes with
neotab.nvim -
Scope based Indentation Lines with
indent-blankline.nvim -
Lazygit Integration with
lazygit.nvim -
Bracket pair highlighting with
rainbow-delimiters.nvim -
Status Line and Buffer Line with
lualine.nvim -
Change, Delete surrounding brackets or quotes quickly with
nvim-surround -
Fuzzy search project files, Grep text search etc. with
telescope.nvim -
Navigate through undo history tree with
telescope-undo.nvim -
ToDo, Bug, Hack comments highlighting with
todo-comments.nvim -
Convert, Manipulate and Pick Colors with
ccc.nvim -
Semantic based Syntax Highlighting with
nvim-treesitter -
See code context on top with
nvim-treesitter-contextinstead of breadcrumbs -
View live Treesitter parsing tree with
nvim-treesitter/playground -
Added more text objects with
nvim-treesitter-textobjects -
Manage and Explore files and folders with
vifm.vim




