Neovim plugin for crush integration.
- Edit Highlighting: Flash highlights on AI-generated edits (like yank highlight)
- Auto-focus: Automatically focus and scroll to edited files
- AI Locations Picker: Custom Telescope picker for AI-annotated code locations with 3-pane UI
- Terminal Management: Toggle/focus/restart Crush terminal
- Cursor Sync: Send cursor position to neocrush for context awareness
- Crush Version Manager: Browse and install specific crush versions from GitHub or local repo
- Health Check: Verify setup with
:checkhealth neocrush
- Neovim >= 0.10
- crush CLI for terminal integration
- telescope.nvim for AI locations picker and CVM
- glaze.nvim — manages Go binary installation/updates automatically
-- lazy.nvim
{
'taigrr/neocrush.nvim',
branch = 'v2-bridge'
dependencies = { 'nvim-telescope/telescope.nvim', 'taigrr/glaze.nvim' },
event = 'VeryLazy',
init = function()
-- Register binaries with glaze for auto-install/update
local glaze = require 'glaze'
glaze.register('crush', 'github.com/taigrr/crush', { plugin = 'neocrush.nvim' })
end,
opts = {
-- All options are optional with sensible defaults
highlight_group = 'IncSearch', -- Flash highlight group
highlight_duration = 900, -- Flash duration (ms)
auto_focus = true, -- Auto-focus edited files
terminal_width = 80, -- Terminal width in columns
terminal_side = 'right', -- Side to open the terminal ('right' or 'left')
terminal_cmd = 'crush', -- Command to run in terminal
-- CVM configuration (optional)
cvm = {
upstream = 'taigrr/crush', -- GitHub repo for releases
-- local_repo = '~/code/crush', -- Default path for :CrushCvmLocal
},
-- Optional keybindings (none set by default)
keys = {
toggle = '<leader>cc',
focus = '<leader>cf',
logs = '<leader>cl',
cancel = '<leader>cx',
restart = '<leader>cr',
paste = '<leader>cp', -- Works in normal (clipboard) and visual (selection) mode
cvm_releases = '<leader>cvr',
cvm_local = '<leader>cvl',
},
},
}Note: The plugin starts the LSP on VimEnter, so use event = 'VeryLazy' to load after UI is ready.
BREAKING: Removed :CrushInstall and :CrushUpdate commands.
Binary management is now handled by glaze.nvim.
Use :GlazeInstall and :GlazeUpdate to install/update binaries.
For version-specific installs (pre-releases, testing), use the Crush Version Manager:
:CrushCvmReleases- Browse and install from GitHub releases:CrushCvmLocal- Build from local repository
| Command | Description |
|---|---|
:CrushToggle |
Toggle the Crush terminal window |
:CrushOpen |
Open the Crush terminal |
:CrushClose |
Close the Crush terminal (keeps buffer) |
:CrushFocus |
Focus the Crush terminal |
:CrushWidth <n> |
Set terminal width to n columns |
:CrushLogs |
Show Crush logs in a new buffer |
:CrushCancel |
Cancel current operation (sends <Esc><Esc>) |
:CrushRestart |
Kill and restart the Crush terminal |
:CrushPaste [reg] |
Paste register (default: +) or selection |
:CrushFocusToggle |
Toggle auto-focus behavior |
:CrushFocusOn/Off |
Enable/disable auto-focus |
:CrushCvmReleases |
Browse and install crush releases from GitHub |
:CrushCvmLocal |
Browse and install from local repo commits |
:CrushPaste defaults to system clipboard (+).
Pass a register name to paste from a specific register:
:CrushPaste a " Paste from register a
:CrushPaste " " Paste from unnamed register
:CrushPaste * " Paste from primary selection (X11)In visual mode, :CrushPaste pastes the current selection.
CVM lets you browse and install specific crush versions:
Opens a Telescope picker with all GitHub releases. The currently installed version is highlighted in green.
Requirements: gh CLI (authenticated), go, telescope.nvim
Opens a Telescope picker with commits from a local crush repo. HEAD is highlighted in blue.
Selecting a commit checks it out and runs go install ..
Requirements: git, go, telescope.nvim
If [path] is omitted, uses cvm.local_repo from config.
cvm = {
-- GitHub repo for releases (controls API endpoint and go install path)
upstream = 'taigrr/crush',
-- Default path for :CrushCvmLocal when no argument given
local_repo = '~/code/crush',
}Set upstream to a fork's owner/repo to install from a different source.
local crush = require('neocrush')
crush.toggle() -- Toggle terminal
crush.open() / crush.close() / crush.focus()
crush.set_width(100)
crush.logs() -- Show logs in new buffer
crush.cancel() -- Cancel operation (<Esc><Esc>)
crush.restart() -- Kill and restart terminal
crush.paste() -- Paste clipboard
crush.paste('a') -- Paste register "a"
crush.paste_selection() -- Paste visual selection
crush.toggle_auto_focus() -- Toggle auto-focus
crush.start_lsp() -- Manually start LSP
crush.get_client() -- Get LSP client instance- LSP Integration: Starts
neocrushonVimEnterwith no filetype restrictions - Edit Handler: Overrides
workspace/applyEditto flash highlight edits and scroll them into view - Cursor Sync: Sends
crush/cursorMovednotifications for context awareness - Terminal: Manages a persistent terminal buffer for the Crush CLI
When an AI agent calls the show_locations MCP tool, neocrush displays a custom Telescope picker:
┌─────────────────────┬────────────────────────────┐
│ file.go:42 │ │
│ other.go:15 │ [file preview] │
│ > handler.go:88 ◄──│ │
│ utils.go:23 │ │
├─────────────────────┴────────────────────────────┤
│ This handler validates user input but doesn't │
│ sanitize the email field. Relevant because you │
│ asked about potential security issues. │
└──────────────────────────────────────────────────┘
Keybindings:
<CR>- Jump to selected location<C-q>- Send all locations to quickfix list<M-q>- Send selected location to quickfix list
The bottom pane shows the AI's explanation of why each location is relevant to your query.
You can remove neocrush from your system as it's deprecated and no longer
required, if you use the taigrr fork of crush.
When Crush edits open files, you may see external modification warnings.
Add vim.o.autoread = true to auto-reload unchanged files.
