improve dap mappings

This commit is contained in:
Antoine Vaure 2025-01-04 17:44:46 +01:00
parent 7962bf3c0c
commit 743bfa810e
5 changed files with 127 additions and 241 deletions

View file

@ -18,6 +18,7 @@ opt.fillchars = { eob = " " }
opt.ignorecase = true
opt.smartcase = true
opt.mouse = "a"
opt.mousemoveevent = true
-- Numbers
opt.number = true
@ -62,12 +63,3 @@ else
end
require("mappings")
-- camenu = require("camenu")
-- bind right click to open camenu
-- vim.keymap.set("n", "<RightMouse>", "<LeftMouse>:lua require('camenu').calistener()<CR>")
-- vim.keymap.set(
-- "n",
-- "<RightRelease>",
-- camenu.calistener
-- )

View file

@ -71,12 +71,14 @@ dap.adapters.debugpy = function(cb, config)
end
end
require('dap.ext.vscode').load_launchjs("dap_config.json", {
function launchjs()
require('dap.ext.vscode').load_launchjs("dap_config.json", {
cppdbg = { 'c', 'cpp' },
lldb = { 'c', 'cpp' },
gdb = { 'c', 'cpp' },
debugpy = { 'python' }
})
})
end
dap.set_log_level("TRACE")

View file

@ -1,4 +1,3 @@
local hydra = require("hydra.statusline")
local opts = {
options = {
icons_enabled = true,
@ -19,10 +18,23 @@ local opts = {
}
},
sections = {
lualine_a = { 'mode', { hydra.get_name, cond = hydra.is_active } },
lualine_a = { 'mode' },
lualine_b = { 'branch', 'diff' },
lualine_c = {
'filename',
{
function()
return require("dap").status()
end,
icon = "",
cond = function()
if not package.loaded.dap then
return false
end
local session = require("dap").session()
return session ~= nil
end,
},
-- {
-- require("noice").api.status.mode.get,
-- cond = require("noice").api.status.mode.has,

View file

@ -1,183 +1,121 @@
local s = vim.keymap.set
local telescope = require("telescope.builtin")
local dap = require('dap')
local dapui = require("dapui")
vim.keymap.set("i", "<C-h>", "<Left>", { desc = "Move left" })
vim.keymap.set("i", "<C-l>", "<Right>", { desc = "Move right" })
vim.keymap.set("i", "<C-j>", "<Down>", { desc = "Move down" })
vim.keymap.set("i", "<C-k>", "<Up>", { desc = "Move up" })
vim.keymap.set("n", "<Esc>", ":noh<CR>", { desc = "Clear highlights" })
vim.keymap.set("n", "<leader>b", "<cmd> enew <CR>", { desc = "New buffer" })
vim.keymap.set("n", "<leader>x", "<cmd> bdelete <CR>", { desc = "Delete buffer" })
vim.keymap.set("n", "<leader>!x", "<cmd> bdelete! <CR>", { desc = "Delete buffer !" })
vim.keymap.set("n", "<Tab>", "<cmd> bn <CR>", { desc = "Next buffer" })
vim.keymap.set("n", "<S-Tab>", "<cmd> bp <CR>", { desc = "Previous buffer" })
vim.keymap.set("n", "ZZ", "<cmd> q! <CR>", { desc = "Quit without saving" })
vim.keymap.set("n", "q:", "<nop>")
vim.keymap.set('n', 'H', require('treesj').toggle)
vim.keymap.set(
'n',
'<leader>ff',
"<cmd> Telescope find_files follow=true <CR>"
)
vim.keymap.set(
'n',
'<leader>fg',
"<cmd> Telescope live_grep <CR>"
)
vim.keymap.set(
'n',
'<leader>fF',
"<cmd> Telescope find_files follow=true no_ignore=true hidden=true <CR>"
)
vim.keymap.set('n', '<leader>ft', MiniFiles.open, { desc = "Open file tree" })
-- vim.api.nvim_set_keymap('v', 'f', '<Plug>SnipRun', {silent = true})
-- vim.api.nvim_set_keymap('n', '<leader>f', '<Plug>SnipRunOperator', {silent = true})
-- vim.api.nvim_set_keymap('n', '<leader>ff', '<Plug>SnipRun', {silent = true})
vim.keymap.set('n', '<leader>rr', ":SnipRun<cr>", { desc = "Run line" })
vim.keymap.set('v', '<leader>r', ":SnipRun<cr>", { desc = "Run selection" })
vim.keymap.set('n', '<leader>N', "<cmd> Neogit <cr>", { desc = "Open Neogit" })
vim.keymap.set('n', '<a-f1>', "<cmd> Copilot <cr>", { desc = "Start Copilot" })
-- vim.keymap.set('x', 'p', 'p:let @+=@0<CR>:let @"=@0<CR>')
vim.keymap.set('x', 'p', 'P')
s("i", "<C-h>", "<Left>", { desc = "Move left" })
s("i", "<C-l>", "<Right>", { desc = "Move right" })
s("i", "<C-j>", "<Down>", { desc = "Move down" })
s("i", "<C-k>", "<Up>", { desc = "Move up" })
s("n", "<Esc>", ":noh<CR>", { desc = "Clear highlights" })
s("n", "<leader>b", "<cmd> enew <CR>", { desc = "New buffer" })
s("n", "<leader>x", "<cmd> bdelete <CR>", { desc = "Delete buffer" })
s("n", "<leader>!x", "<cmd> bdelete! <CR>", { desc = "Delete buffer !" })
s("n", "<Tab>", "<cmd> bn <CR>", { desc = "Next buffer" })
s("n", "<S-Tab>", "<cmd> bp <CR>", { desc = "Previous buffer" })
s("n", "ZZ", "<cmd> q! <CR>", { desc = "Quit without saving" })
s("n", "q:", "<nop>")
s('n', 'H', require('treesj').toggle)
s('n', '<leader>ff', "<cmd> Telescope find_files follow=true <CR>")
s('n', '<leader>fg', "<cmd> Telescope live_grep <CR>")
s('n', '<leader>fF', "<cmd> Telescope find_files follow=true no_ignore=true hidden=true <CR>")
s('n', '<leader>ft', MiniFiles.open, { desc = "Open file tree" })
s('n', '<leader>N', "<cmd> Neogit <cr>", { desc = "Open Neogit" })
-- s('x', 'p', 'p:let @+=@0<CR>:let @"=@0<CR>')
s('x', 'p', 'P')
-- Luasnip
local ls = require("luasnip")
vim.keymap.set({ "i", "s" }, "<A-j>", function() ls.jump(1) end, { silent = true })
vim.keymap.set({ "i", "s" }, "<A-k>", function() ls.jump(-1) end, { silent = true })
s({ "i", "s" }, "<A-j>", function() ls.jump(1) end, { silent = true })
s({ "i", "s" }, "<A-k>", function() ls.jump(-1) end, { silent = true })
-- Hop
vim.keymap.set({ 'n', 'v' }, 'f', "<cmd> HopWord <cr>", { desc = "HopWord" })
s({ 'n', 'v' }, 'f', "<cmd> HopWord <cr>", { desc = "HopWord" })
-- marks
vim.keymap.set({ 'n' }, "<A-A>", "mA", { desc = "Set mark A", remap = true })
vim.keymap.set({ 'n' }, "<A-a>", "g'A", { desc = "Jump to mark A", remap = true })
vim.keymap.set({ 'n' }, "<A-Z>", "mZ", { desc = "Set mark Z" })
vim.keymap.set({ 'n' }, "<A-z>", "g'Z", { desc = "Jump to mark Z" })
vim.keymap.set({ 'n' }, "<A-E>", "mE", { desc = "Set mark E" })
vim.keymap.set({ 'n' }, "<A-e>", "g'E", { desc = "Jump to mark E" })
vim.keymap.set({ 'n' } ,"<A-q>", "gqip", { desc = "format paragraph" })
vim.keymap.set({ 'v' } ,"<A-q>", "gq", { desc = "format vidsual selection" })
s({ 'n' }, "<A-A>", "mA", { desc = "Set mark A", remap = true })
s({ 'n' }, "<A-a>", "g'A", { desc = "Jump to mark A", remap = true })
s({ 'n' }, "<A-Z>", "mZ", { desc = "Set mark Z" })
s({ 'n' }, "<A-z>", "g'Z", { desc = "Jump to mark Z" })
s({ 'n' }, "<A-E>", "mE", { desc = "Set mark E" })
s({ 'n' }, "<A-e>", "g'E", { desc = "Jump to mark E" })
s({ 'n' }, "<A-q>", "gqip", { desc = "format paragraph" })
s({ 'v' }, "<A-q>", "gq", { desc = "format vidsual selection" })
function moveCursorToMouse()
local mousePos = vim.fn.getmousepos()
vim.fn.setpos(".", { 0, mousePos.line, mousePos.column, 0 })
end
function hover()
if dap.session() then
dapui.eval()
else
vim.lsp.buf.hover()
end
end
-- Global mappings.
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
-- Use LspAttach autocommand to only map the following keys
-- after the language server attaches to the current buffer
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('UserLspConfig', {}),
callback = function(ev)
-- Enable completion triggered by <c-x><c-o>
vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc'
-- Buffer local mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions
local opts = { buffer = ev.buf }
vim.keymap.set('n', '<leader>e', vim.diagnostic.open_float, opts)
vim.keymap.set('n', '[[', vim.diagnostic.goto_prev, opts)
vim.keymap.set('n', ']]', vim.diagnostic.goto_next, opts)
vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, opts)
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts)
vim.keymap.set('n', 'gd', telescope.lsp_definitions, opts)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
vim.keymap.set('n', 'gi', telescope.lsp_implementations, opts)
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, opts)
vim.keymap.set('n', '<leader>D', vim.lsp.buf.type_definition, opts)
vim.keymap.set('n', '<leader>ra', vim.lsp.buf.rename, opts)
vim.keymap.set({ 'n', 'v' }, '<leader>ca', vim.lsp.buf.code_action, opts)
vim.keymap.set('n', 'gr', telescope.lsp_references, opts)
vim.keymap.set({ 'n', 'v' }, '<leader>fm', ":Format<cr>", opts)
vim.keymap.set('n', '<MiddleMouse>', '<LeftMouse> :lua vim.lsp.buf.definition()<cr>', opts)
vim.keymap.set('n', '<RightMouse>', '<LeftMouse> :lua vim.lsp.buf.hover()<cr>', opts)
s('n', '<leader>e', vim.diagnostic.open_float, { buffer = ev.buf, desc = "Show diagnostics" })
s('n', '[[', vim.diagnostic.goto_prev, { buffer = ev.buf, desc = "Previous diagnostic" })
s('n', ']]', vim.diagnostic.goto_next, { buffer = ev.buf, desc = "Next diagnostic" })
s('n', '<leader>q', vim.diagnostic.setloclist, { buffer = ev.buf, desc = "Set location list" })
s('n', 'gD', vim.lsp.buf.declaration, { buffer = ev.buf, desc = "Goto declaration" })
s('n', 'gd', telescope.lsp_definitions, { buffer = ev.buf, desc = "Goto definition" })
s( {'n', 'v'}, 'K', hover, { buffer = ev.buf, desc = "Hover" })
s(
{'n', 'v'}, '<RightMouse>',
function() moveCursorToMouse() hover() end,
{ buffer = ev.buf, desc = "Hover" }
)
s('n', 'gi', telescope.lsp_implementations, { buffer = ev.buf, desc = "Goto implementation" })
s('n', '<C-k>', vim.lsp.buf.signature_help, { buffer = ev.buf, desc = "Signature help" })
s('n', '<leader>D', vim.lsp.buf.type_definition, { buffer = ev.buf, desc = "Goto type definition" })
s('n', '<leader>ra', vim.lsp.buf.rename, { buffer = ev.buf, desc = "Rename" })
s({ 'n', 'v' }, '<leader>ca', vim.lsp.buf.code_action, { buffer = ev.buf, desc = "Code action" })
s('n', 'gr', telescope.lsp_references, { buffer = ev.buf, desc = "Goto references" })
s({ 'n', 'v' }, '<leader>fm', ":Format<cr>", { buffer = ev.buf, desc = "Format" })
s('n', '<MiddleMouse>', '<LeftMouse> :lua vim.lsp.buf.definition()<cr>',
{ buffer = ev.buf, desc = "Goto definition" })
end,
})
-- Descriptions for lspconfig mappings
local wk = require("which-key")
wk.add({
{ "<leader>e", vim.diagnostic.open_float, desc = "Show diagnostics" },
{ "[[", vim.diagnostic.goto_prev, desc = "Previous diagnostic" },
{ "]]", vim.diagnostic.goto_next, desc = "Next diagnostic" },
{ "<leader>q", vim.diagnostic.setloclist, desc = "Set location list" },
{ "gD", vim.lsp.buf.declaration, desc = "Goto declaration" },
{ "gd", vim.lsp.buf.definition, desc = "Goto definition" },
{ "K", vim.lsp.buf.hover, desc = "Hover" },
{ "gi", vim.lsp.buf.implementation, desc = "Goto implementation" },
{ "<C-k>", vim.lsp.buf.signature_help, desc = "Signature help" },
{ "<leader>D", vim.lsp.buf.type_definition, desc = "Goto type definition" },
{ "<leader>ra", vim.lsp.buf.rename, desc = "Rename" },
{ "<leader>ca", vim.lsp.buf.code_action, desc = "Code action" },
{ "gr", vim.lsp.buf.references, desc = "Goto references" },
{
"<leader>fm",
function()
vim.lsp.buf.format { async = true }
end,
desc = "Format"
},
})
-- DAP
local dap = require('dap')
local dap_widgets = require('dap.ui.widgets')
local dap_sb_frames = dap_widgets.sidebar(dap_widgets.frames)
local dap_sb_scopes = dap_widgets.sidebar(dap_widgets.scopes)
local dap_sb_session = dap_widgets.sidebar(dap_widgets.sessions)
local dap_sb_threads = dap_widgets.sidebar(dap_widgets.threads)
vim.keymap.set('n', '<leader>b', dap.toggle_breakpoint, { desc = "Toggle breakpoint" })
vim.keymap.set('n', '<leader>B',
function ()
local condition = vim.fn.input("Condition: ", "")
dap.set_breakpoint(condition)
end
, { desc = "Add conditional breakpoint" })
local dapui = require("dapui")
local Hydra = require("hydra")
Hydra({
name = 'Debugger',
config = {
buffer = bufnr,
color = "pink",
invoke_on_body = true,
on_enter = function()
dapui.open()
function continue()
if dap.session() then
if dap.status() == "stopped" then
dap.continue()
-- dap.repl.open()
end,
on_exit = function()
end
dap.continue()
else
launchjs()
dap.continue()
end
end
s('n', '<leader>b', dap.toggle_breakpoint, { desc = "Toggle breakpoint" })
s('n', '<leader>B', function()
local condition = vim.fn.input("Condition: ", "", "customlist,Complete")
dap.set_breakpoint(condition)
end, { desc = "Add conditional breakpoint" })
s('n', '<f2>', dapui.toggle, { desc = "Toggle debygger UI" })
s('n', '<f5>', continue, { desc = "Continue" })
s('n', '<f4>', dap.restart, { desc = "Restart" })
s('n', '<f6>', dap.step_into, { desc = "Step into" })
s('n', '<f7>', dap.step_over, { desc = "Step over" })
s('n', '<f8>', dap.step_out, { desc = "Step out" })
s('n', '<f9>', dap.run_to_cursor, { desc = "Run to cursor" })
s('n', '<f10>', dap.step_back, { desc = "Step back" })
s('n', '<A-j>', dap.up, { desc = "Up" })
s('n', '<A-k>', dap.down, { desc = "Down" })
-- s('n', '<rightmouse>', dapui.eval, { desc = "Eval" })
-- s('n', '<rightmouse>', '<LeftMouse> :lua require("dapui").eval()<cr>', { desc = "Eval" })
s('n', '<f12>', function()
dapui.close()
dap.terminate()
dap_sb_frames.close()
dap_sb_scopes.close()
dap_sb_session.close()
dap_sb_threads.close()
dap.repl.close()
end,
hint = {
type = "statusline",
},
},
mode = { 'n', 'v' },
body = '<leader>gg',
heads = {
{ '<f5>', dap.continue, { desc = "Continue" } },
{ '<f4>', dap.restart, { desc = "Restart" } },
{ '<f6>', dap.step_into, { desc = "Step into" } },
{ '<f7>', dap.step_over, { desc = "Step over" } },
{ '<f8>', dap.step_out, { desc = "Step out" } },
{ '<f9>', dap.run_to_cursor, { desc = "Run to cursor" } },
{ '<f10>', dap.step_back, { desc = "Step back" } },
{ 'K', require("dapui").eval, { desc = "Hover" } },
{ '<A-j>', dap.up, { desc = "Up" } },
{ '<A-k>', dap.down, { desc = "Down" } },
-- right click to eval
{ '<rightmouse>', dapui.eval, { desc = "Eval", mode = "v" } },
{ '<rightmouse>', '<LeftMouse> :lua require("dapui").eval()<cr>', {
desc = "Eval",
} },
{ 'q', nil, { exit = true, nowait = true, desc = 'Exit' } },
}
})
end, { desc = "Close debugger" })

View file

@ -389,13 +389,6 @@ local plugins = {
},
},
},
{
'michaelb/sniprun',
-- run = 'sh ./install.sh',
config = function()
require('sniprun').setup()
end,
},
{
"kylechui/nvim-surround",
version = "*", -- Use for stability; omit to use `main` branch for the latest features
@ -436,56 +429,6 @@ local plugins = {
end
},
{ "ofseed/lualine-copilot" },
-- {
-- "folke/noice.nvim",
-- event = "VeryLazy",
-- opts = {
-- messages = {
-- view = "mini", -- default view for messages
-- view_error = "notify", -- view for errors
-- view_warn = "notify", -- view for warnings
-- view_history = "messages", -- view for :messages
-- view_search = "mini", -- view for search count messages. Set to `false` to disable
-- },
-- cmdline = {
-- view = "cmdline",
-- },
-- views = {
-- lsp = {
-- -- override markdown rendering so that **cmp** and other plugins use **Treesitter**
-- override = {
-- ["vim.lsp.util.convert_input_to_markdown_lines"] = true,
-- ["vim.lsp.util.stylize_markdown"] = true,
-- ["cmp.entry.get_documentation"] = true,
-- },
-- },
-- },
-- presets = {
-- -- you can enable a preset by setting it to true, or a table that will override the preset config
-- -- you can also add custom presets that you can enable/disable with enabled=true
-- bottom_search = true, -- use a classic bottom cmdline for search
-- },
-- },
-- dependencies = {
-- -- if you lazy-load any plugin below, make sure to add proper `module="..."` entries
-- "MunifTanjim/nui.nvim",
-- -- OPTIONAL:
-- -- `nvim-notify` is only needed, if you want to use the notification view.
-- -- If not available, we use `mini` as the fallback
-- "rcarriga/nvim-notify",
-- }
-- },
-- {
-- "rcarriga/nvim-notify",
-- opts = {
-- render = "minimal",
-- stages = "static",
-- }
-- },
-- {
-- "ray-x/lsp_signature.nvim",
-- event = "VeryLazy",
-- },
{
'smoka7/hop.nvim',
version = "*",
@ -586,9 +529,6 @@ local plugins = {
vim.fn["firenvim#install"](0)
end
},
{
'nvimtools/hydra.nvim',
},
{
'stevearc/conform.nvim',
config = function()
@ -629,7 +569,9 @@ local plugins = {
{
'nvim-treesitter/nvim-treesitter-context',
config = function()
require 'treesitter-context'.setup {}
require 'treesitter-context'.setup {
multiline_threshold = 1,
}
end
},
{
@ -639,7 +581,7 @@ local plugins = {
load_breakpoints_event = { "BufReadPost" }
}
end
}
},
}
return plugins