Neovim plugin for crush integration.

:checkhealth neocrush-- 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:
:CrushCvmReleasesOpens a Telescope picker with all GitHub releases. The currently installed version is highlighted in green.
Requirements: gh CLI (authenticated), go, telescope.nvim
:CrushCvmLocal [path]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
neocrush on VimEnter with no filetype restrictionsworkspace/applyEdit to flash highlight edits and scroll them into viewcrush/cursorMoved notifications for context awarenessWhen 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 listThe 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.