/ΛΙnvi mi:/
A MEticulous nvim distribution, crafted from scratch solely for ME with every features 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
-
Zig Compiler: For compiling treesitter languages in Windows
-
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
π Install Guide (auto backups prev config if any)
If any config is already present, it backups your config and puts NvME in place.
-
Suggested Compiler: GCC
ME=~/.config/nvim; [ -d $ME ] && mv $ME ${ME}_backup/
git clone https://github.com/MidHunterX/NvME $ME --depth 1 && nvim
set ME ~/.config/nvim; test -d $ME; and mv $ME {$ME}_backup
git clone https://github.com/MidHunterX/NvME $ME --depth 1 && nvim
-
Suggested Compiler: Zig Compiler
git clone https://github.com/MidHunterX/NvME $env:localappdata\nvim --depth 1; nvim
git 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
, Installpyright
Language 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-tools
android-sdk-platform-tools provides the adb
command.
yay -S flutter-bin
Now 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
H
andL
-
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>gc
using Lazygit -
Run/Execute files with
F5
,<leader>ru
or:lua Execute_order_69()
-
Run file formatter with
<leader>fm
or: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-XrlGbGurNyyrtrqylBcraShyylPybfrqNVPbzcnalNCVUrer
Supports: 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_inline-image.lua
: Adds image support to Neovim using Kittyβs Graphics Protocol or ueberzugpp. It works great with Kitty and Tmux. -
markdown_UI.lua
: Renders Markdown components like Headings, Tables, Code Blocks, Checkboxes, Blockquotes, Links etc..
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 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-Tab
for jumping around the snippet fields. -
If autocompletion menu is visible, use
TAB
to select LSP pre-selected entry. -
If LSP pre-selected entry is not available in menu,
TAB
will select the first entry. -
If menu and snippet are both not visible,
TAB
will jump over quotes and brackets. -
If quotes and brackets are not available,
TAB
will act as normalTAB
.
π‘ 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-context
instead 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