return { "mfussenegger/nvim-dap", dependencies = { { "igorlfs/nvim-dap-view", opts = { switchbuf = "useopen,uselast,newtab", -- 开启控制栏按钮 winbar = { controls = { enabled = true, }, }, }, }, }, config = function() vim.keymap.set("n", "", function() require("dap").continue() end) vim.keymap.set("n", "", function() require("dap").step_over() end) vim.keymap.set("n", "", function() require("dap").step_into() end) vim.keymap.set("n", "", function() require("dap").step_out() end) vim.keymap.set("n", "b", function() require("dap").toggle_breakpoint() end) vim.keymap.set("n", "B", function() require("dap").set_breakpoint() end) vim.keymap.set("n", "lp", function() require("dap").set_breakpoint(nil, nil, vim.fn.input("Log point message: ")) end) vim.keymap.set("n", "dr", function() require("dap").repl.open() end) vim.keymap.set("n", "dl", function() require("dap").run_last() end) vim.keymap.set({ "n", "v" }, "dh", function() require("dap.ui.widgets").hover() end) vim.keymap.set({ "n", "v" }, "dp", function() require("dap.ui.widgets").preview() end) vim.keymap.set("n", "df", function() local widgets = require("dap.ui.widgets") widgets.centered_float(widgets.frames) end) vim.keymap.set("n", "ds", function() local widgets = require("dap.ui.widgets") widgets.centered_float(widgets.scopes) end) -- 自动切换和关闭 local dap, dv = require("dap"), require("dap-view") dap.listeners.before.attach["dap-view-config"] = function() dv.open() end dap.listeners.before.launch["dap-view-config"] = function() dv.open() end dap.listeners.before.event_terminated["dap-view-config"] = function() dv.close() end dap.listeners.before.event_exited["dap-view-config"] = function() dv.close() end -- 在 nvim-dap-view 文件类型中将 q 映射为 quit 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", "q", { buffer = evt.buf }) end, }) -- 如果没有窗口包含缓冲区,请创建一个新选项卡 dap.defaults.fallback.switchbuf = "usevisible,usetab,newtab" dap.adapters.gdb = { type = "executable", command = "gdb", args = { "--interpreter=dap", "--eval-command", "set print pretty on" }, } dap.configurations.c = { { name = "Launch", type = "gdb", request = "launch", program = function() return vim.fn.input("Path to executable: ", vim.fn.getcwd() .. "/", "file") end, cwd = "${workspaceFolder}", stopAtBeginningOfMainSubprogram = false, }, { name = "Select and attach to process", type = "gdb", request = "attach", program = function() return vim.fn.input("Path to executable: ", vim.fn.getcwd() .. "/", "file") end, pid = function() local name = vim.fn.input("Executable name (filter): ") return require("dap.utils").pick_process({ filter = name }) end, cwd = "${workspaceFolder}", }, { name = "Attach to gdbserver :1234", type = "gdb", request = "attach", target = "localhost:1234", program = function() return vim.fn.input("Path to executable: ", vim.fn.getcwd() .. "/", "file") end, cwd = "${workspaceFolder}", }, } dap.configurations.cpp = dap.configurations.c dap.configurations.rust = dap.configurations.c end, }