From 743bfa810e931896f25cdb3d5b1b92acb54ab5ed Mon Sep 17 00:00:00 2001 From: Antoine Vaure Date: Sat, 4 Jan 2025 17:44:46 +0100 Subject: [PATCH] improve dap mappings --- init.lua | 10 +- lua/configs/dap.lua | 14 ++- lua/configs/lualine.lua | 16 ++- lua/mappings.lua | 262 +++++++++++++++------------------------- lua/plugins.lua | 66 +--------- 5 files changed, 127 insertions(+), 241 deletions(-) diff --git a/init.lua b/init.lua index 752168b..b6e3721 100644 --- a/init.lua +++ b/init.lua @@ -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", "", ":lua require('camenu').calistener()") --- vim.keymap.set( --- "n", --- "", --- camenu.calistener --- ) diff --git a/lua/configs/dap.lua b/lua/configs/dap.lua index 271eb6e..9f770c8 100644 --- a/lua/configs/dap.lua +++ b/lua/configs/dap.lua @@ -71,12 +71,14 @@ dap.adapters.debugpy = function(cb, config) end end -require('dap.ext.vscode').load_launchjs("dap_config.json", { - cppdbg = { 'c', 'cpp' }, - lldb = { 'c', 'cpp' }, - gdb = { 'c', 'cpp' }, - debugpy = { 'python' } -}) +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") diff --git a/lua/configs/lualine.lua b/lua/configs/lualine.lua index 919f421..3325085 100644 --- a/lua/configs/lualine.lua +++ b/lua/configs/lualine.lua @@ -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, diff --git a/lua/mappings.lua b/lua/mappings.lua index 030c444..e228948 100644 --- a/lua/mappings.lua +++ b/lua/mappings.lua @@ -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", "", "", { desc = "Move left" }) -vim.keymap.set("i", "", "", { desc = "Move right" }) -vim.keymap.set("i", "", "", { desc = "Move down" }) -vim.keymap.set("i", "", "", { desc = "Move up" }) -vim.keymap.set("n", "", ":noh", { desc = "Clear highlights" }) -vim.keymap.set("n", "b", " enew ", { desc = "New buffer" }) -vim.keymap.set("n", "x", " bdelete ", { desc = "Delete buffer" }) -vim.keymap.set("n", "!x", " bdelete! ", { desc = "Delete buffer !" }) -vim.keymap.set("n", "", " bn ", { desc = "Next buffer" }) -vim.keymap.set("n", "", " bp ", { desc = "Previous buffer" }) -vim.keymap.set("n", "ZZ", " q! ", { desc = "Quit without saving" }) -vim.keymap.set("n", "q:", "") -vim.keymap.set('n', 'H', require('treesj').toggle) -vim.keymap.set( - 'n', - 'ff', - " Telescope find_files follow=true " -) -vim.keymap.set( - 'n', - 'fg', - " Telescope live_grep " -) -vim.keymap.set( - 'n', - 'fF', - " Telescope find_files follow=true no_ignore=true hidden=true " -) -vim.keymap.set('n', 'ft', MiniFiles.open, { desc = "Open file tree" }) --- vim.api.nvim_set_keymap('v', 'f', 'SnipRun', {silent = true}) --- vim.api.nvim_set_keymap('n', 'f', 'SnipRunOperator', {silent = true}) --- vim.api.nvim_set_keymap('n', 'ff', 'SnipRun', {silent = true}) -vim.keymap.set('n', 'rr', ":SnipRun", { desc = "Run line" }) -vim.keymap.set('v', 'r', ":SnipRun", { desc = "Run selection" }) - -vim.keymap.set('n', 'N', " Neogit ", { desc = "Open Neogit" }) -vim.keymap.set('n', '', " Copilot ", { desc = "Start Copilot" }) --- vim.keymap.set('x', 'p', 'p:let @+=@0:let @"=@0') -vim.keymap.set('x', 'p', 'P') +s("i", "", "", { desc = "Move left" }) +s("i", "", "", { desc = "Move right" }) +s("i", "", "", { desc = "Move down" }) +s("i", "", "", { desc = "Move up" }) +s("n", "", ":noh", { desc = "Clear highlights" }) +s("n", "b", " enew ", { desc = "New buffer" }) +s("n", "x", " bdelete ", { desc = "Delete buffer" }) +s("n", "!x", " bdelete! ", { desc = "Delete buffer !" }) +s("n", "", " bn ", { desc = "Next buffer" }) +s("n", "", " bp ", { desc = "Previous buffer" }) +s("n", "ZZ", " q! ", { desc = "Quit without saving" }) +s("n", "q:", "") +s('n', 'H', require('treesj').toggle) +s('n', 'ff', " Telescope find_files follow=true ") +s('n', 'fg', " Telescope live_grep ") +s('n', 'fF', " Telescope find_files follow=true no_ignore=true hidden=true ") +s('n', 'ft', MiniFiles.open, { desc = "Open file tree" }) +s('n', 'N', " Neogit ", { desc = "Open Neogit" }) +-- s('x', 'p', 'p:let @+=@0:let @"=@0') +s('x', 'p', 'P') -- Luasnip local ls = require("luasnip") -vim.keymap.set({ "i", "s" }, "", function() ls.jump(1) end, { silent = true }) -vim.keymap.set({ "i", "s" }, "", function() ls.jump(-1) end, { silent = true }) +s({ "i", "s" }, "", function() ls.jump(1) end, { silent = true }) +s({ "i", "s" }, "", function() ls.jump(-1) end, { silent = true }) -- Hop -vim.keymap.set({ 'n', 'v' }, 'f', " HopWord ", { desc = "HopWord" }) +s({ 'n', 'v' }, 'f', " HopWord ", { desc = "HopWord" }) -- marks -vim.keymap.set({ 'n' }, "", "mA", { desc = "Set mark A", remap = true }) -vim.keymap.set({ 'n' }, "", "g'A", { desc = "Jump to mark A", remap = true }) -vim.keymap.set({ 'n' }, "", "mZ", { desc = "Set mark Z" }) -vim.keymap.set({ 'n' }, "", "g'Z", { desc = "Jump to mark Z" }) -vim.keymap.set({ 'n' }, "", "mE", { desc = "Set mark E" }) -vim.keymap.set({ 'n' }, "", "g'E", { desc = "Jump to mark E" }) -vim.keymap.set({ 'n' } ,"", "gqip", { desc = "format paragraph" }) -vim.keymap.set({ 'v' } ,"", "gq", { desc = "format vidsual selection" }) +s({ 'n' }, "", "mA", { desc = "Set mark A", remap = true }) +s({ 'n' }, "", "g'A", { desc = "Jump to mark A", remap = true }) +s({ 'n' }, "", "mZ", { desc = "Set mark Z" }) +s({ 'n' }, "", "g'Z", { desc = "Jump to mark Z" }) +s({ 'n' }, "", "mE", { desc = "Set mark E" }) +s({ 'n' }, "", "g'E", { desc = "Jump to mark E" }) +s({ 'n' }, "", "gqip", { desc = "format paragraph" }) +s({ 'v' }, "", "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 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', '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', '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', '', vim.lsp.buf.signature_help, opts) - vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, opts) - vim.keymap.set('n', 'ra', vim.lsp.buf.rename, opts) - vim.keymap.set({ 'n', 'v' }, 'ca', vim.lsp.buf.code_action, opts) - vim.keymap.set('n', 'gr', telescope.lsp_references, opts) - vim.keymap.set({ 'n', 'v' }, 'fm', ":Format", opts) - vim.keymap.set('n', '', ' :lua vim.lsp.buf.definition()', opts) - vim.keymap.set('n', '', ' :lua vim.lsp.buf.hover()', opts) + s('n', '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', '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'}, '', + function() moveCursorToMouse() hover() end, + { buffer = ev.buf, desc = "Hover" } + ) + s('n', 'gi', telescope.lsp_implementations, { buffer = ev.buf, desc = "Goto implementation" }) + s('n', '', vim.lsp.buf.signature_help, { buffer = ev.buf, desc = "Signature help" }) + s('n', 'D', vim.lsp.buf.type_definition, { buffer = ev.buf, desc = "Goto type definition" }) + s('n', 'ra', vim.lsp.buf.rename, { buffer = ev.buf, desc = "Rename" }) + s({ 'n', 'v' }, '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' }, 'fm', ":Format", { buffer = ev.buf, desc = "Format" }) + s('n', '', ' :lua vim.lsp.buf.definition()', + { buffer = ev.buf, desc = "Goto definition" }) end, }) --- Descriptions for lspconfig mappings -local wk = require("which-key") -wk.add({ - { "e", vim.diagnostic.open_float, desc = "Show diagnostics" }, - { "[[", vim.diagnostic.goto_prev, desc = "Previous diagnostic" }, - { "]]", vim.diagnostic.goto_next, desc = "Next diagnostic" }, - { "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" }, - { "", vim.lsp.buf.signature_help, desc = "Signature help" }, - { "D", vim.lsp.buf.type_definition, desc = "Goto type definition" }, - { "ra", vim.lsp.buf.rename, desc = "Rename" }, - { "ca", vim.lsp.buf.code_action, desc = "Code action" }, - { "gr", vim.lsp.buf.references, desc = "Goto references" }, - { - "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', 'b', dap.toggle_breakpoint, { desc = "Toggle breakpoint" }) -vim.keymap.set('n', '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() - 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 = 'gg', - heads = { - { '', dap.continue, { desc = "Continue" } }, - { '', dap.restart, { desc = "Restart" } }, - { '', dap.step_into, { desc = "Step into" } }, - { '', dap.step_over, { desc = "Step over" } }, - { '', dap.step_out, { desc = "Step out" } }, - { '', dap.run_to_cursor, { desc = "Run to cursor" } }, - { '', dap.step_back, { desc = "Step back" } }, - { 'K', require("dapui").eval, { desc = "Hover" } }, - { '', dap.up, { desc = "Up" } }, - { '', dap.down, { desc = "Down" } }, - -- right click to eval - { '', dapui.eval, { desc = "Eval", mode = "v" } }, - { '', ' :lua require("dapui").eval()', { - desc = "Eval", - } }, - { 'q', nil, { exit = true, nowait = true, desc = 'Exit' } }, - } -}) + end + dap.continue() + else + launchjs() + dap.continue() + end +end + +s('n', 'b', dap.toggle_breakpoint, { desc = "Toggle breakpoint" }) +s('n', 'B', function() + local condition = vim.fn.input("Condition: ", "", "customlist,Complete") + dap.set_breakpoint(condition) +end, { desc = "Add conditional breakpoint" }) +s('n', '', dapui.toggle, { desc = "Toggle debygger UI" }) +s('n', '', continue, { desc = "Continue" }) +s('n', '', dap.restart, { desc = "Restart" }) +s('n', '', dap.step_into, { desc = "Step into" }) +s('n', '', dap.step_over, { desc = "Step over" }) +s('n', '', dap.step_out, { desc = "Step out" }) +s('n', '', dap.run_to_cursor, { desc = "Run to cursor" }) +s('n', '', dap.step_back, { desc = "Step back" }) +s('n', '', dap.up, { desc = "Up" }) +s('n', '', dap.down, { desc = "Down" }) +-- s('n', '', dapui.eval, { desc = "Eval" }) +-- s('n', '', ' :lua require("dapui").eval()', { desc = "Eval" }) +s('n', '', function() + dapui.close() + dap.terminate() +end, { desc = "Close debugger" }) diff --git a/lua/plugins.lua b/lua/plugins.lua index 7454ab3..836cc16 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -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