Nvim: Difference between revisions
Merged Nvim Neovim pages - comprehensive version |
Added Lazygit section - critical to the workflow |
||
| Line 44: | Line 44: | ||
* Ignores .git/, node_modules/, swap files | * Ignores .git/, node_modules/, swap files | ||
'' | == Lazygit Integration == | ||
* | ''Critical to the workflow.'' Lazygit is the bridge between reviewing Claude's changes and committing them. | ||
* | |||
''Access from anywhere:'' | |||
* <code><leader>gg</code> — Open lazygit in floating tmux popup (snacks.nvim) | |||
* Works from any nvim buffer, any tmux pane | |||
* Full-screen TUI for staging, committing, branching | |||
''Why lazygit matters:'' | |||
* Claude Code makes changes → you review in diffview → stage/commit in lazygit | |||
* Interactive staging: pick exactly which hunks to commit | |||
* Amend commits, rebase, cherry-pick - all without leaving the terminal | |||
* Visual branch management | |||
* Integrates with delta for beautiful diffs | |||
''Flow:'' | |||
# Claude edits files | |||
# <code><leader>gd</code> to review in diffview | |||
# <code><leader>gg</code> to open lazygit | |||
# Stage changes (space), write commit message, commit (c-c) | |||
# Back to coding | |||
== Diffview Integration == | |||
Review all robot changes with one keystroke. | |||
{| class="wikitable" | |||
|- | |||
! Key !! Action | |||
|- | |||
| <code><leader>gd</code> || Open diffview (review all changes) | |||
|- | |||
| <code><leader>gh</code> || File history | |||
|- | |||
| <code><leader>gc</code> || Close diffview | |||
|- | |||
| <code>]c</code> / <code>[c</code> || Jump between changes | |||
|- | |||
| <code>Tab</code> || Cycle through files | |||
|} | |||
''Auto-refresh:'' When Claude Code commits, diffview refreshes automatically. | |||
== Three-Layer AI System == | == Three-Layer AI System == | ||
| Line 77: | Line 113: | ||
| <code>C-]</code> || Dismiss | | <code>C-]</code> || Dismiss | ||
|} | |} | ||
== Inline Git Diff == | == Inline Git Diff == | ||
| Line 116: | Line 132: | ||
== Statusline == | == Statusline == | ||
''File:'' <code>lua/plugins/minimal-statusline.lua</code> | ''File:'' <code>lua/plugins/minimal-statusline.lua</code> | ||
{| class="wikitable" | {| class="wikitable" | ||
| Line 135: | Line 145: | ||
| <code>Δ</code> || Blue || Diffview open | | <code>Δ</code> || Blue || Diffview open | ||
|} | |} | ||
Also shows: file path (last 2 dirs + filename), line count, diagnostics, LSP icons. | |||
== Yank With Context == | == Yank With Context == | ||
| Line 167: | Line 179: | ||
</pre> | </pre> | ||
=== | === Git === | ||
'' | ''Lazygit'' — Full git TUI (see above) | ||
<pre> | <pre> | ||
<leader>gg Open lazygit popup | |||
</pre> | </pre> | ||
''Gitsigns'' — Change indicators in sign column | ''Gitsigns'' — Change indicators in sign column | ||
| Line 200: | Line 196: | ||
</pre> | </pre> | ||
=== | === Editing === | ||
'' | ''nvim-surround'' — Surround text objects | ||
<pre> | <pre> | ||
ysiw" Wrap word in quotes | |||
cs"' Change " to ' | |||
ds" Delete surrounding quotes | |||
</pre> | </pre> | ||
=== Focus === | |||
''Zen-mode'' — Distraction-free writing | |||
''Twilight'' — Dim inactive code blocks | |||
== Training Mode == | == Training Mode == | ||
| Line 225: | Line 228: | ||
</pre> | </pre> | ||
== | == The Complete Flow == | ||
# Write code in nvim (left pane) | |||
# Claude Code refactors in right pane | |||
# Files auto-reload, statusline shows ⟳ | |||
# <code><leader>gd</code> — review changes in diffview | |||
# <code><leader>gg</code> — open lazygit, stage & commit | |||
# Back to coding | |||
No | ''No context switching. No mouse. No leaving the terminal.'' | ||
== See Also == | == See Also == | ||
Revision as of 05:20, 15 January 2026
Neovim
LazyVim + Claude Code workflow for non-Cursor open source coding
Philosophy
Code manually in nvim (left pane) with subtle AI assistance, while Claude Code handles big refactors in a separate tmux pane (right). Robot edits files → nvim auto-reloads → review changes instantly.
┌─────────────────┬─────────────────┐ │ nvim (manual) │ Claude Code │ │ - Ghost text AI │ - Big refactors │ │ - Hot reload │ - File edits │ │ - Diffview │ - Commits │ └─────────────────┴─────────────────┘
Why not Cursor?
- Nvim muscle memory preserved
- Complete control over AI integration
- No vendor lock-in
- tmux + ssh workflow stays intact
- Works on remote servers seamlessly
- OSC52 clipboard works over SSH
Hot Reload System
The killer feature. When Claude Code edits files, nvim reloads them automatically.
Files:
lua/custom/directory-watcher.lua- Native fs_event monitoringlua/custom/hotreload.lua- Smart buffer reload logiclua/custom/git-diff-hotreload.lua- Diffview auto-refresh
How it works:
- Claude Code edits a file in right pane
- Directory watcher detects change (200ms debounce)
- Nvim reloads visible buffers (only if unmodified)
- Statusline shows green ⟳ for 5 seconds
- Notification: "📝 File reloaded (Claude Code edit)"
Safety:
- Never reloads modified buffers (won't lose unsaved work)
- Skips special buffers (neo-tree, diffview, terminals)
- Ignores .git/, node_modules/, swap files
Lazygit Integration
Critical to the workflow. Lazygit is the bridge between reviewing Claude's changes and committing them.
Access from anywhere:
<leader>gg— Open lazygit in floating tmux popup (snacks.nvim)- Works from any nvim buffer, any tmux pane
- Full-screen TUI for staging, committing, branching
Why lazygit matters:
- Claude Code makes changes → you review in diffview → stage/commit in lazygit
- Interactive staging: pick exactly which hunks to commit
- Amend commits, rebase, cherry-pick - all without leaving the terminal
- Visual branch management
- Integrates with delta for beautiful diffs
Flow:
- Claude edits files
<leader>gdto review in diffview<leader>ggto open lazygit- Stage changes (space), write commit message, commit (c-c)
- Back to coding
Diffview Integration
Review all robot changes with one keystroke.
| Key | Action |
|---|---|
<leader>gd |
Open diffview (review all changes) |
<leader>gh |
File history |
<leader>gc |
Close diffview |
]c / [c |
Jump between changes |
Tab |
Cycle through files |
Auto-refresh: When Claude Code commits, diffview refreshes automatically.
Three-Layer AI System
- Copilot — Inline ghost text for line-level suggestions
- Tab to accept, ]s/[s to cycle
- No popup menus, old school ghost text
- Avante — Claude Sonnet 4 chat in sidebar
<leader>aa— Ask about code<leader>ae— Edit/refactor selection
- Claude Code — Full agent in tmux pane
- Hot reload integration
- Diffview for reviewing changes
Copilot Keybindings
| Key | Action |
|---|---|
Tab |
Accept full suggestion |
]s / [s |
Cycle through suggestions |
C-Right |
Accept one word |
C-l |
Accept one line |
C-] |
Dismiss |
Inline Git Diff
Plugin: mini.diff - shows deleted lines inline
| Key | Action |
|---|---|
gh |
Apply hunk |
gH |
Reset hunk |
[h / ]h |
Navigate hunks |
<leader>go |
Toggle diff overlay |
Statusline
File: lua/plugins/minimal-statusline.lua
| Symbol | Color | Meaning |
|---|---|---|
● |
Red | Unsaved changes |
⟳ |
Green | Just reloaded by Claude Code (5 sec) |
AI |
Gray | Copilot attached |
Δ |
Blue | Diffview open |
Also shows: file path (last 2 dirs + filename), line count, diagnostics, LSP icons.
Yank With Context
Share code with Claude Code including file path:
<leader>yr→ Yank with relative path<leader>ya→ Yank with absolute path
Output: src/file.ts:42-55 with fenced code block
Essential Plugins
Navigation
Oil.nvim — Filesystem as a buffer
- Open parent directory <CR> Open file/directory g. Toggle hidden files
Harpoon — Quick access to marked files
<leader>ha Add file to harpoon <leader>hh Toggle harpoon menu <leader>h1-4 Jump to file 1-4
vim-tmux-navigator — Seamless pane navigation
Ctrl-h/j/k/l Move between nvim splits AND tmux panes
Git
Lazygit — Full git TUI (see above)
<leader>gg Open lazygit popup
Gitsigns — Change indicators in sign column
Git-conflict — Visual merge conflict handling
co Choose ours ct Choose theirs cb Choose both [x/]x Jump between conflicts
Editing
nvim-surround — Surround text objects
ysiw" Wrap word in quotes cs"' Change " to ' ds" Delete surrounding quotes
Focus
Zen-mode — Distraction-free writing
Twilight — Dim inactive code blocks
Training Mode
Hardtime — Vim motion coaching:
- Blocks hjkl spam after 1 press
- Arrow keys disabled
- Hints for better motions
CLI Aliases
v # Just nvim n # nvim . (open with oil.nvim) vs # Fuzzy find files with bat preview vg # Grep contents, fuzzy find, open file o # Obsidian vault fuzzy finder r # Recent files across ALL ~/code projects
The Complete Flow
- Write code in nvim (left pane)
- Claude Code refactors in right pane
- Files auto-reload, statusline shows ⟳
<leader>gd— review changes in diffview<leader>gg— open lazygit, stage & commit- Back to coding
No context switching. No mouse. No leaving the terminal.
See Also
| ⚡ Technical | |
|---|---|
| Core | Technical · CLI · Dotfiles · Nvim · SSH · VPS |
| Tools | Sketchybar · ArchiveBox · ThinkPad Linux |
| Systems | Automation · Personal APIs · Quantified Self |
| Reference | Runbooks · New Computer Runbook · Syntax guide |