From 020e6b2097bd47a948de8d75e5a61e380d5df285 Mon Sep 17 00:00:00 2001 From: tsorabel-pc Date: Thu, 7 Mar 2024 23:18:24 +0100 Subject: [PATCH] feat: add harpoon --- init.lua | 14 ++--- lua/custom/plugins/init.lua | 62 ++++++++++++++++++- lua/kickstart/plugins/debug.lua | 103 +++++++++++++++++++++++++++++++- 3 files changed, 166 insertions(+), 13 deletions(-) diff --git a/init.lua b/init.lua index 6c7a3267..0ff44c66 100644 --- a/init.lua +++ b/init.lua @@ -1,5 +1,6 @@ --[[ + alias nvi='NVIM_APPNAME="kickstart-tsorabel" nvim' ===================================================================== @@ -840,7 +841,7 @@ require('lazy').setup({ -- Uncomment any of the lines below to enable them (you will need to restart nvim). -- -- require 'kickstart.plugins.debug', - -- require 'kickstart.plugins.indent_line', + require 'kickstart.plugins.indent_line', -- require 'kickstart.plugins.lint', -- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua` @@ -848,7 +849,7 @@ require('lazy').setup({ -- -- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going. -- For additional information, see `:help lazy.nvim-lazy.nvim-structuring-your-plugins` - -- { import = 'custom.plugins' }, + { import = 'custom.plugins' }, }, { ui = { -- If you are using a Nerd Font: set icons to an empty table which will use the @@ -873,7 +874,6 @@ require('lazy').setup({ -- The line beneath this is called `modeline`. See `:help modeline` -- vim: ts=2 sts=2 sw=2 et --- local map = vim.keymap.set -- Set current wordl @@ -882,13 +882,9 @@ map({ 'n' }, 'cw', ':%s/\\<\\>//gI -- Close buffer map({ 'n' }, 'x', 'bd', { desc = 'Close buffer' }) --- misc mappings -map('n', 'n', 'nzzzv') -map('n', 'N', 'Nzzzv') - -- Create new vertical buffer map({ 'n' }, 'wb', 'vs', { desc = 'New [W]orkspace [B]uffer' }) -- Resize buffer (width) -map({ 'n' }, '', 'vertical res -5^M', { desc = 'Buffer - width' }) -map({ 'n' }, '', 'vertical res +5^M', { desc = 'Buffer + width' }) +-- map({ 'n' }, '', 'vertical res -5^M', { desc = 'Buffer - width' }) +map({ 'n' }, '', 'vertical res +5^M', { desc = 'Buffer + width' }) diff --git a/lua/custom/plugins/init.lua b/lua/custom/plugins/init.lua index be0eb9d8..78d42288 100644 --- a/lua/custom/plugins/init.lua +++ b/lua/custom/plugins/init.lua @@ -2,4 +2,64 @@ -- I promise not to create any merge conflicts in this directory :) -- -- See the kickstart.nvim README for more information -return {} +return { + { + 'ThePrimeagen/harpoon', + branch = 'harpoon2', + + dependencies = { 'nvim-lua/plenary.nvim' }, + config = function() + local harpoon = require 'harpoon' + harpoon:setup() + vim.keymap.set({ 'n' }, 'a', function() + harpoon:list():append() + end, { desc = '[A]ppend File to harpoon' }) + vim.keymap.set('n', 'h', function() + harpoon.ui:toggle_quick_menu(harpoon:list()) + end, { desc = '[H]arpoon quick menu' }) + + vim.keymap.set('n', '', function() + harpoon:list():select(1) + end) + vim.keymap.set('n', '', function() + harpoon:list():select(2) + end) + vim.keymap.set('n', '', function() + harpoon:list():select(3) + end) + vim.keymap.set('n', '', function() + harpoon:list():select(4) + end) + + -- Toggle previous & next buffers stored within Harpoon list + vim.keymap.set('n', '', function() + harpoon:list():next() + end) + vim.keymap.set('n', '', function() + harpoon:list():prev() + end) + local conf = require('telescope.config').values + local function toggle_telescope(harpoon_files) + local file_paths = {} + for _, item in ipairs(harpoon_files.items) do + table.insert(file_paths, item.value) + end + + require('telescope.pickers') + .new({}, { + prompt_title = 'Harpoon', + finder = require('telescope.finders').new_table { + results = file_paths, + }, + previewer = conf.file_previewer {}, + sorter = conf.generic_sorter {}, + }) + :find() + end + + vim.keymap.set('n', '', function() + toggle_telescope(harpoon:list()) + end, { desc = 'Open harpoon window' }) + end, + }, +} diff --git a/lua/kickstart/plugins/debug.lua b/lua/kickstart/plugins/debug.lua index 53c83810..7eb9e501 100644 --- a/lua/kickstart/plugins/debug.lua +++ b/lua/kickstart/plugins/debug.lua @@ -5,6 +5,15 @@ -- Primarily focused on configuring the debugger for Go, but can -- be extended to other languages as well. That's why it's called -- kickstart.nvim and not kitchen-sink.nvim ;) +-- +-- +local js_based_languages = { + 'typescript', + 'javascript', + 'typescriptreact', + 'javascriptreact', + 'vue', +} return { -- NOTE: Yes, you can install new plugins here! @@ -20,11 +29,17 @@ return { -- Installs the debug adapters for you 'williamboman/mason.nvim', 'jay-babu/mason-nvim-dap.nvim', - -- 'microsoft/vscode-js-debug', + 'microsoft/vscode-js-debug', -- Add your own debuggers here 'leoluz/nvim-dap-go', - -- 'mxsdev/nvim-dap-vscode-js', + 'mxsdev/nvim-dap-vscode-js', + }, + { + 'microsoft/vscode-js-debug', + -- After install, build it and rename the dist directory to out + build = 'npm install --legacy-peer-deps --no-save && npx gulp vsDebugServerBundle && rm -rf out && mv dist out', + version = '1.*', }, config = function() local dap = require 'dap' @@ -49,7 +64,7 @@ return { -- Basic debugging keymaps, feel free to change to your liking! vim.keymap.set('n', '', dap.continue, { desc = 'Debug: Start/Continue' }) - vim.keymap.set('n', '', dap.step_into, { desc = 'Debug: Step Into' }) + vim.keymap.set('n', '', dap.step_into, { desc = 'Debug: Step Into' }) vim.keymap.set('n', '', dap.step_over, { desc = 'Debug: Step Over' }) vim.keymap.set('n', '', dap.step_out, { desc = 'Debug: Step Out' }) vim.keymap.set('n', 'b', dap.toggle_breakpoint, { desc = 'Debug: Toggle Breakpoint' }) @@ -79,6 +94,59 @@ return { }, } + for _, language in ipairs(js_based_languages) do + dap.configurations[language] = { + -- Debug single nodejs files + { + type = 'pwa-node', + request = 'launch', + name = 'Launch file', + program = '${file}', + cwd = vim.fn.getcwd(), + sourceMaps = true, + }, + -- Debug nodejs processes (make sure to add --inspect when you run the process) + { + type = 'pwa-node', + request = 'attach', + name = 'Attach', + processId = require('dap.utils').pick_process, + cwd = vim.fn.getcwd(), + sourceMaps = true, + }, + -- Debug web applications (client side) + { + type = 'pwa-chrome', + request = 'launch', + name = 'Launch & Debug Chrome', + url = function() + local co = coroutine.running() + return coroutine.create(function() + vim.ui.input({ + prompt = 'Enter URL: ', + default = 'http://localhost:3000', + }, function(url) + if url == nil or url == '' then + return + else + coroutine.resume(co, url) + end + end) + end) + end, + webRoot = vim.fn.getcwd(), + protocol = 'inspector', + sourceMaps = true, + userDataDir = false, + }, + -- Divider for the launch.json derived configs + { + name = '----- ↓ launch.json configs ↓ -----', + type = '', + request = 'launch', + }, + } + end -- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception. vim.keymap.set('n', '', dapui.toggle, { desc = 'Debug: See last session result.' }) @@ -89,5 +157,34 @@ return { -- Install golang specific config require('dap-go').setup() -- require('nvim-dap-vscode-js').setup() + require('dap-vscode-js').setup { + -- Path of node executable. Defaults to $NODE_PATH, and then "node" + -- node_path = "node", + + -- Path to vscode-js-debug installation. + debugger_path = vim.fn.resolve(vim.fn.stdpath 'data' .. '/lazy/vscode-js-debug'), + + -- Command to use to launch the debug server. Takes precedence over "node_path" and "debugger_path" + -- debugger_cmd = { "js-debug-adapter" }, + + -- which adapters to register in nvim-dap + adapters = { + 'chrome', + 'pwa-node', + 'pwa-chrome', + 'pwa-msedge', + 'pwa-extensionHost', + 'node-terminal', + }, + + -- Path for file logging + -- log_file_path = "(stdpath cache)/dap_vscode_js.log", + + -- Logging level for output to file. Set to false to disable logging. + -- log_file_level = false, + + -- Logging level for output to console. Set to false to disable console output. + -- log_console_level = vim.log.levels.ERROR, + } end, }