A Neovim plugin that brings VSCode-like Run/Debug functionality to your editor. Reads .vscode/launch.json files and provides a unified menu for running and debugging your code.
+-------------------------------+
| Run |
|-------------------------------|
| Run Ctrl+F5 |
| Start Debugging F6 |
|-------------------------------|
| Run Last Ctrl+F6 |
| Debug Last |
|-------------------------------|
| Toggle Breakpoint F9 |
| Conditional Breakpoint |
| Clear All Breakpoints |
|-------------------------------|
| Continue F5 |
| Step Over |
| Step Into F11 |
| Step Out Shift+F11 |
| Stop Shift+F5 |
|-------------------------------|
| Toggle Debug UI |
| Open launch.json |
+-------------------------------+
- Reads
.vscode/launch.jsonwith full JSONC support (comments, trailing commas) - Run Without Debugging -- sends commands to a tmux terminal pane (ideal for the tmux-ide layout)
- Start Debugging -- delegates to nvim-dap for full DAP debugging
- VSCode variable resolution --
${file},${workspaceFolder},${env:NAME}, etc. - Platform-specific configs -- respects
linux,osx,windowsoverrides - Vim-quickui integration -- adds a "Run" menu to the menu bar
- Auto-creates launch.json -- with sensible defaults for Python and Go
- Neovim >= 0.9
- nvim-dap (for debugging)
- nvim-dap-ui (optional, for debug panels)
- tmux (for "Run Without Debugging" to terminal pane)
- vim-quickui (optional, for menu bar integration)
With lazy.nvim
{
"guysoft/vscodium.nvim",
lazy = false,
dependencies = {
"mfussenegger/nvim-dap",
"rcarriga/nvim-dap-ui",
},
config = function()
require("nvim-launch").setup({
-- tmux pane to send "run without debugging" commands to
-- In tmux-ide layout: 0=editor, 1=terminal, 2=agent
tmux_pane = 1,
tmux_clear = true,
})
end,
}Install debug adapters via Mason:
{
"jay-babu/mason-nvim-dap.nvim",
dependencies = { "williamboman/mason.nvim", "mfussenegger/nvim-dap" },
config = function()
require("mason-nvim-dap").setup({
ensure_installed = { "debugpy", "delve" },
})
end,
}Press F10 or <leader>m to open the menu bar, then select "Run".
| Command | Description |
|---|---|
:LaunchRun |
Pick a config and run without debugging |
:LaunchDebug |
Pick a config and start debugging |
:LaunchRunLast |
Re-run last config without debugging |
:LaunchDebugLast |
Re-run last debug session |
:LaunchOpen |
Open or create .vscode/launch.json |
When you select "Run", the plugin:
- Reads
.vscode/launch.jsonfrom your project - Shows a picker with all configurations
- Builds a shell command from the selected config:
- Maps the
typefield to a command (e.g.,debugpy->python3) - Resolves VSCode variables (
${file},${workspaceFolder}, etc.) - Applies
args,env, andcwdfrom the config
- Maps the
- Sends the command to the tmux terminal pane (bottom-left in IDE layout)
When you select "Start Debugging":
- nvim-dap automatically loads
.vscode/launch.json - Shows a picker with all configurations (from both launch.json and dap.configurations)
- Starts a full DAP debug session with breakpoints, stepping, variable inspection, etc.
- nvim-dap-ui auto-opens panels for scopes, watches, stacks, and console
require("nvim-launch").setup({
-- Tmux pane index for "run without debugging" output
tmux_pane = 1,
-- Clear tmux pane before running
tmux_clear = true,
-- Path to launch.json relative to workspace root
launch_json_path = ".vscode/launch.json",
-- Type-to-command mapping for "run without debugging"
type_to_command = {
debugpy = "python3",
python = "python3",
go = "go run",
node = "node",
["pwa-node"] = "node",
},
-- Register vim-quickui menu
quickui_menu = false, -- Set true if not using quickui_config.vim
-- Register keybindings
keymaps = true,
-- Keymap definitions (only used if keymaps = true)
keys = {
run = "<F5>",
debug = "<F6>",
run_last = "<C-F5>",
debug_last = "<C-F6>",
stop = "<S-F5>",
toggle_breakpoint = "<F9>",
step_over = "<leader>do",
step_into = "<F11>",
step_out = "<S-F11>",
toggle_ui = "<leader>du",
open_launch_json = "<leader>dl",
},
})| Feature | Status |
|---|---|
configurations array |
Supported |
type, request, name |
Supported |
program, args, cwd, env |
Supported |
python (custom interpreter) |
Supported |
JSONC comments (//, /* */) |
Supported |
| Trailing commas | Supported |
${file}, ${workspaceFolder}, etc. |
Supported |
${env:NAME} |
Supported |
${workspaceFolder:name} |
Supported (falls back to cwd) |
Platform-specific (linux/osx/windows) |
Supported |
inputs (promptString/pickString) |
Via nvim-dap |
compounds |
Not yet |
preLaunchTask / postDebugTask |
Not yet (use overseer.nvim) |
This plugin is designed to work with tmux-ide, which creates a 3-pane IDE layout:
+---------------------------+--------------+
| | |
| nvim (editor) | opencode |
| | (agent) |
| | |
|---------------------------| |
| terminal (pane 1) <--- | |
| run output goes here | |
+---------------------------+--------------+
When you "Run Without Debugging", the command is sent to pane 1 (the terminal), so you can see output without leaving your editor.
- tmux-ide -- 3-pane tmux IDE layout
- tmux-resurrect-opencode-sessions -- Preserve OpenCode sessions across tmux restarts
- nvim-dap -- Debug Adapter Protocol client
- nvim-dap-ui -- Debug UI panels