minimalistic nvim-dap-ui alternative
https://github.com/user-attachments/assets/01c461f7-b77b-4232-bed5-4630f3e7c039
[!WARNING]
Currently requires a neovim nightly (0.11+)
return {
{
"igorlfs/nvim-dap-view",
opts = {},
},
}
For a better experience, consider adding nvim-dap-view
as a dependency for
nvim-dap
(instead of declaring it as a standalone plugin)
By default, when launching a session, nvim-dap
's terminal window takes half
the screen. As a saner default, nvim-dap-view
hijacks the terminal window
(even if not invoked), making the split take only 12 (configurable) lines.
-- Your nvim-dap config
return {
{
"mfussenegger/nvim-dap",
dependencies = {
{ "igorlfs/nvim-dap-view", opts = {} },
...,
},
...,
},
}
The plugin provides 4 "views" that share the same window (so there's clutter)
<CR>
<CR>
You can also interact with the console provided by nvim-dap
(though, arguably, that's not a feature from nvim-dap-view
). The console has its own window. However, its default size (height) is resized to match you nvim-dap-view
configuration.
return {
winbar = {
show = true,
sections = { "watches", "exceptions", "breakpoints", "repl" },
-- Must be one of the sections declared above
default_section = "watches",
},
windows = {
height = 12,
},
}
Start a regular debugging session. When desired, you can use :DapViewOpen
to
start the plugin. You can switch to a view (section) using the letter outlined
in the 'winbar'
(e.g., B
for the breakpoints view).
Both the breakpoints view and the exceptions view have only 1 mapping: <CR>
.
It jumps to a breakpoint and toggles an exception filter, respectively. The
watches view comes with 3 mappings:
i
to insert a new expressione
to edit an expressiond
to delete an expressionThough, the preferred way of adding a new expression is using the
:DapViewWatch
command. In normal mode, it adds the variable under the cursor
to the watch list.
When you finish your session, you can use :DapViewClose
to close the
nvim-dap-view
window.
In total, there are 4 commands:
DapViewOpen
DapViewClose
DapViewToggle
DapViewWatch
If you prefer using lua functions, I got you covered! The following provide the same functionality as above:
require("dap-view").open()
require("dap-view").close()
require("dap-view").toggle()
require("dap-view").add_expr()
nvim-dap-view
doesn't define any keybindings (outside its own buffer, of
course). An example for the toggle functionality, using the lua API:
vim.keymap.set("n", "<leader>v", function()
require("dap-view").toggle()
end, { desc = "Toggle nvim-dap-view" })
nvim-dap-view
defines 8 highlight groups:
NvimDapViewMissingData
NvimDapViewWatchText
NvimDapViewWatchTextChanged
NvimDapViewExceptionFilterEnabled
NvimDapViewExceptionFilterDisabled
NvimDapViewBreakpointFileName
NvimDapViewBreakpointLineNumber
NvimDapViewBreakpointSeparator
They are linked to (somewhat) reasonable defaults, but they may look odd with your colorscheme. Consider contributing to your colorscheme by sending a PR to add support to nvim-dap-view
.
nvim-dap-view
sets buffer filetypes for the following Views
Window | Filetype |
---|---|
watches, exceptions, breakpoints | dap-view |
terminal | dap-view-term |
These filetypes can be used to override buffer and window options set by nvim-dap-view
Map q to quit in nvim-dap-view
filetypes:
vim.api.nvim_create_autocmd({ "FileType" }, {
pattern = { "dap-view", "dap-view-term", "dap-repl" }, -- dap-repl is set by `nvim-dap`
callback = function(evt)
vim.keymap.set("n", "q", "<C-w>q", { silent = true, buffer = evt.buf })
end,
})
Missing something? Create an issue with a feature request!
nvim-dap
. We
could use a workaround, but a new API is
plannedquicker.nvim
;nvim-dap
:nvim-dap
.'winbar'
to handle multiple views.[^1]: Filters depend on the debug adapter's capabilities [^2]: From treesitter and extmarks (e.g., semantic highlighting from LSP)