From 375cb89d5f01fdcdd797e5d3b9f625cbf5e50502 Mon Sep 17 00:00:00 2001 From: Ben Kreeger Date: Tue, 19 Aug 2025 16:11:23 -0500 Subject: [PATCH] Big improvements to Vim keymaps; add swift configs --- nvim/lazy-lock.json | 1 + nvim/lsp/sourcekit.lua | 9 ++++++ nvim/lua/config/autocmds.lua | 1 + nvim/lua/config/keymaps.lua | 8 ------ nvim/lua/plugins/20-which-key.lua | 12 +++++--- nvim/lua/plugins/30-fuzzyfinder.lua | 40 +++++++++++++-------------- nvim/lua/plugins/31-tree.lua | 1 + nvim/lua/plugins/34-commands.lua | 42 ++++++++++++++++++++++++++++ nvim/lua/plugins/40-lsp.lua | 43 +++++++++++++++++------------ nvim/lua/plugins/41-autoformat.lua | 6 ++-- nvim/lua/plugins/45-errors.lua | 37 ------------------------- 11 files changed, 110 insertions(+), 90 deletions(-) create mode 100644 nvim/lsp/sourcekit.lua create mode 100644 nvim/lua/plugins/34-commands.lua delete mode 100644 nvim/lua/plugins/45-errors.lua diff --git a/nvim/lazy-lock.json b/nvim/lazy-lock.json index 8f9f33b..8d67ac4 100644 --- a/nvim/lazy-lock.json +++ b/nvim/lazy-lock.json @@ -24,6 +24,7 @@ "nvim-treesitter-textobjects": { "branch": "master", "commit": "71385f191ec06ffc60e80e6b0c9a9d5daed4824c" }, "nvim-web-devicons": { "branch": "master", "commit": "c2599a81ecabaae07c49ff9b45dcd032a8d90f1a" }, "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, + "project-cli-commands.nvim": { "branch": "main", "commit": "9a2a2fdfd38a3d71cc927e3a398ac0ddfa846b3d" }, "telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" }, "telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" }, "telescope.nvim": { "branch": "master", "commit": "b4da76be54691e854d3e0e02c36b0245f945c2c7" }, diff --git a/nvim/lsp/sourcekit.lua b/nvim/lsp/sourcekit.lua new file mode 100644 index 0000000..76af957 --- /dev/null +++ b/nvim/lsp/sourcekit.lua @@ -0,0 +1,9 @@ +return { + capabilities = { + workspace = { + didChangeWatchedFiles = { + dynamicRegistration = true, + }, + }, + }, +} diff --git a/nvim/lua/config/autocmds.lua b/nvim/lua/config/autocmds.lua index a5697e8..bdf4789 100644 --- a/nvim/lua/config/autocmds.lua +++ b/nvim/lua/config/autocmds.lua @@ -17,6 +17,7 @@ local filetype_maps = { { pattern = "*.tf", ft = "terraform" }, { pattern = "*.pro", ft = "progruard" }, { pattern = "*.mjml", ft = "html" }, + { pattern = ".swift-format", ft = "json" }, } for _, mapping in ipairs(filetype_maps) do diff --git a/nvim/lua/config/keymaps.lua b/nvim/lua/config/keymaps.lua index 58c7c59..abef452 100644 --- a/nvim/lua/config/keymaps.lua +++ b/nvim/lua/config/keymaps.lua @@ -2,21 +2,13 @@ local keymap = vim.keymap.set -- Normal mode keymap("n", "", "nohlsearch") -keymap("n", "fd", vim.diagnostic.setloclist, { desc = "Open quick[f]ix [d]iagnostics" }) keymap("n", "w", "w!", { desc = "[w]rite current file", silent = true }) keymap("n", "q", "q", { desc = "[q]uit current buffer", silent = true }) keymap("n", "Q", "qa", { desc = "[Q]uit completely", silent = true }) -keymap("n", "fb", ":lua vim.lsp.buf.format()", { desc = "[f]ormat [b]uffer", silent = true }) keymap("n", "", "", { desc = "Move focus to the left window" }) keymap("n", "", "", { desc = "Move focus to the right window" }) keymap("n", "", "", { desc = "Move focus to the lower window" }) keymap("n", "", "", { desc = "Move focus to the upper window" }) -keymap( - "n", - "gd", - "lua vim.lsp.buf.definition()", - { desc = "[g]o to [d]efinition", noremap = true, silent = true } -) -- Visual mode keymap("v", "p", '"_dP', { desc = "[p]aste without overwriting default register" }) diff --git a/nvim/lua/plugins/20-which-key.lua b/nvim/lua/plugins/20-which-key.lua index 35ce717..f0a1499 100644 --- a/nvim/lua/plugins/20-which-key.lua +++ b/nvim/lua/plugins/20-which-key.lua @@ -3,6 +3,7 @@ return { event = "VimEnter", opts = { delay = 0, + preset = "helix", icons = { mappings = vim.g.have_nerd_font, keys = vim.g.have_nerd_font, @@ -10,10 +11,13 @@ return { -- Document existing key chains spec = { - { "s", group = "[S]earch" }, - { "e", group = "[E]xplorer/Tree" }, - { "t", group = "[T]oggle" }, - { "g", group = "[G]oto/Actions" }, + { "a", group = "[a]vante" }, + { "g", group = "[g]it" }, + { "l", group = "[l]sp" }, + { "lg", group = "[l]sp [g]oto" }, + { "ls", group = "[l]sp [s]ymbols" }, + { "s", group = "[s]earch" }, + { "t", group = "[t]oggle" }, }, }, } diff --git a/nvim/lua/plugins/30-fuzzyfinder.lua b/nvim/lua/plugins/30-fuzzyfinder.lua index 4fe7572..ad0554f 100644 --- a/nvim/lua/plugins/30-fuzzyfinder.lua +++ b/nvim/lua/plugins/30-fuzzyfinder.lua @@ -34,33 +34,33 @@ return { -- Define these keys here since they require access to runtime values local builtin = require("telescope.builtin") - keymap("n", "sh", builtin.help_tags, { desc = "[S]earch [H]elp" }) - keymap("n", "sk", builtin.keymaps, { desc = "[S]earch [K]eymaps" }) - keymap("n", "sf", builtin.find_files, { desc = "[S]earch [F]iles" }) - keymap("n", "ss", builtin.builtin, { desc = "[S]earch [S]elect Telescope" }) - keymap("n", "sw", builtin.grep_string, { desc = "[S]earch current [W]ord" }) - keymap("n", "sg", builtin.live_grep, { desc = "[S]earch by [G]rep" }) - keymap("n", "sd", builtin.diagnostics, { desc = "[S]earch [D]iagnostics" }) - keymap("n", "sr", builtin.resume, { desc = "[S]earch [R]esume" }) - keymap("n", "s.", builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' }) - keymap("n", "", builtin.buffers, { desc = "[ ] Find existing buffers" }) - - keymap("n", "/", function() + local map = function(keys, func, desc) + vim.keymap.set("n", "" .. keys, func, { desc = "[s]earch " .. desc }) + end + map("", builtin.find_files, "all files ([ ])") + map("sb", builtin.buffers, "[b]uffers") + map("sd", builtin.diagnostics, "[d]iagnostics") + map("sg", builtin.live_grep, "[g]rep") + map("sh", builtin.help_tags, "[h]elp") + map("sk", builtin.keymaps, "[k]eymaps") + map("sn", function() + builtin.find_files({ cwd = vim.fn.stdpath("config") }) + end, "[n]eovim files") + map("sr", builtin.resume, "[r]esume") + map("st", builtin.builtin, "[t]elescope") + map("sw", builtin.grep_string, "current [w]ord") + map("s.", builtin.oldfiles, "recent files ([.] for repeat)") + map("/", function() builtin.current_buffer_fuzzy_find(require("telescope.themes").get_dropdown({ winblend = 10, previewer = false, })) - end, { desc = "[/] Fuzzily search in current buffer" }) - - keymap("n", "s/", function() + end, "current buffer fuzzy ([/])") + map("s/", function() builtin.live_grep({ grep_open_files = true, prompt_title = "Live Grep in Open Files", }) - end, { desc = "[S]earch [/] in Open Files" }) - - keymap("n", "sn", function() - builtin.find_files({ cwd = vim.fn.stdpath("config") }) - end, { desc = "[S]earch [N]eovim files" }) + end, "in open files ([/])") end, } diff --git a/nvim/lua/plugins/31-tree.lua b/nvim/lua/plugins/31-tree.lua index 7cce50e..c6c9252 100644 --- a/nvim/lua/plugins/31-tree.lua +++ b/nvim/lua/plugins/31-tree.lua @@ -18,6 +18,7 @@ return { hide_gitignore = false, never_show = { "node_modules", + ".build", ".DS_Store", "thumbs.db", ".git", diff --git a/nvim/lua/plugins/34-commands.lua b/nvim/lua/plugins/34-commands.lua new file mode 100644 index 0000000..986cd1c --- /dev/null +++ b/nvim/lua/plugins/34-commands.lua @@ -0,0 +1,42 @@ +return { + "dimaportenko/project-cli-commands.nvim", + dependencies = { + "akinsho/toggleterm.nvim", + "nvim-telescope/telescope.nvim", + }, + keys = { + { + "sc", + "Telescope project_cli_commands open", + desc = "[s]earch [c]ommands", + }, + }, + config = function() + local OpenActions = require("project_cli_commands.open_actions") + local RunActions = require("project_cli_commands.actions") + + require("project_cli_commands").setup({ + -- Key mappings bound inside the telescope window + running_telescope_mapping = { + [""] = RunActions.exit_terminal, + [""] = RunActions.open_float, + [""] = RunActions.open_vertical, + [""] = RunActions.open_horizontal, + }, + open_telescope_mapping = { + { mode = "i", key = "", action = OpenActions.execute_script_vertical }, + { mode = "n", key = "", action = OpenActions.execute_script_vertical }, + { mode = "i", key = "", action = OpenActions.execute_script }, + { mode = "n", key = "", action = OpenActions.execute_script }, + { mode = "i", key = "", action = OpenActions.execute_script_with_input }, + { mode = "n", key = "", action = OpenActions.execute_script_with_input }, + { mode = "i", key = "", action = OpenActions.copy_command_clipboard }, + { mode = "n", key = "", action = OpenActions.copy_command_clipboard }, + { mode = "i", key = "", action = OpenActions.execute_script_float }, + { mode = "n", key = "", action = OpenActions.execute_script_float }, + { mode = "i", key = "", action = OpenActions.execute_script_vertical }, + { mode = "n", key = "", action = OpenActions.execute_script_vertical }, + }, + }) + end, +} diff --git a/nvim/lua/plugins/40-lsp.lua b/nvim/lua/plugins/40-lsp.lua index 6eea129..158279f 100644 --- a/nvim/lua/plugins/40-lsp.lua +++ b/nvim/lua/plugins/40-lsp.lua @@ -1,4 +1,4 @@ -local servers = { +local mason_lsps = { -- LSPs "json-lsp", "lua_ls", @@ -14,8 +14,10 @@ local servers = { "shellharden", "stylua", "yamlfix", - --- Linters - "swiftlint", +} + +local non_mason_lsps = { + "sourcekit", } return { @@ -25,7 +27,7 @@ return { "mason-org/mason-lspconfig.nvim", }, opts = { - ensure_installed = servers, + ensure_installed = mason_lsps, }, }, { @@ -50,26 +52,31 @@ return { "saghen/blink.cmp", }, config = function() + for _, server in ipairs(non_mason_lsps) do + vim.lsp.enable(server) + end + vim.api.nvim_create_autocmd("LspAttach", { group = vim.api.nvim_create_augroup("kickstart-lsp-attach", { clear = true }), callback = function(event) local map = function(keys, func, desc, mode) - vim.keymap.set(mode or "n", keys, func, { buffer = event.buf, desc = "LSP: " .. desc }) + vim.keymap.set( + mode or "n", + "" .. keys, + func, + { buffer = event.buf, desc = "[l]sp: " .. desc } + ) end - map("grn", vim.lsp.buf.rename, "[R]e[n]ame") - map("ga", vim.lsp.buf.code_action, "[g]oto [a]ction", { "n", "x" }) - map("gtr", require("telescope.builtin").lsp_references, "[g]o[t]o [r]eferences") - map("gti", require("telescope.builtin").lsp_implementations, "[g]o[t]o [i]mplementation") - map("gtd", require("telescope.builtin").lsp_definitions, "[g]o[t]o [d]efinition") - map("gtD", vim.lsp.buf.declaration, "[g]o[t]o [D]eclaration") - map("gtt", require("telescope.builtin").lsp_type_definitions, "[g]o[t]o [t]ype Definition") - map("gsb", require("telescope.builtin").lsp_document_symbols, "[g]oto [s]ymbols in [b]uffer") - map( - "gsw", - require("telescope.builtin").lsp_dynamic_workspace_symbols, - "[g]oto [s]ymbols in [w]orkspace" - ) + map("la", vim.lsp.buf.code_action, "[a]ctions", { "n", "x" }) + map("lgr", require("telescope.builtin").lsp_references, "[g]oto [r]eferences") + map("lgi", require("telescope.builtin").lsp_implementations, "[g]oto [i]mplementation") + map("lgf", require("telescope.builtin").lsp_definitions, "[g]oto de[f]inition") + map("lgd", vim.lsp.buf.declaration, "[g]oto [d]eclaration") + map("lgt", require("telescope.builtin").lsp_type_definitions, "[g]oto [t]ype definition") + map("lr", vim.lsp.buf.rename, "[r]ename") + map("lsb", require("telescope.builtin").lsp_document_symbols, "[s]ymbols in [b]uffer") + map("lsw", require("telescope.builtin").lsp_dynamic_workspace_symbols, "[s]ymbols in [w]orkspace") local client = vim.lsp.get_client_by_id(event.data.client_id) local augroup = vim.api.nvim_create_augroup diff --git a/nvim/lua/plugins/41-autoformat.lua b/nvim/lua/plugins/41-autoformat.lua index 3ff64a2..5597710 100644 --- a/nvim/lua/plugins/41-autoformat.lua +++ b/nvim/lua/plugins/41-autoformat.lua @@ -4,12 +4,12 @@ return { cmd = { "ConformInfo" }, keys = { { - "f", + "lf", function() require("conform").format({ async = true, lsp_format = "fallback" }) end, mode = "", - desc = "[F]ormat buffer", + desc = "[l]sp: [f]ormat buffer", }, }, opts = { @@ -36,7 +36,7 @@ return { ruby = { "rubocop" }, rust = { "rustfmt" }, sh = { "shellharden" }, - swift = { "swiftlint" }, + swift = { "swiftformat" }, terraform = { "terraform_fmt" }, xml = { "xmllint" }, yaml = { "yamlfix" }, diff --git a/nvim/lua/plugins/45-errors.lua b/nvim/lua/plugins/45-errors.lua deleted file mode 100644 index fc29597..0000000 --- a/nvim/lua/plugins/45-errors.lua +++ /dev/null @@ -1,37 +0,0 @@ -return { - "folke/trouble.nvim", - opts = {}, -- for default options, refer to the configuration section for custom setup. - cmd = "Trouble", - keys = { - { - "xx", - "Trouble diagnostics toggle", - desc = "Diagnostics (Trouble)", - }, - { - "xX", - "Trouble diagnostics toggle filter.buf=0", - desc = "Buffer Diagnostics (Trouble)", - }, - { - "cs", - "Trouble symbols toggle focus=false", - desc = "Symbols (Trouble)", - }, - { - "cl", - "Trouble lsp toggle focus=false win.position=right", - desc = "LSP Definitions / references / ... (Trouble)", - }, - { - "xL", - "Trouble loclist toggle", - desc = "Location List (Trouble)", - }, - { - "xQ", - "Trouble qflist toggle", - desc = "Quickfix List (Trouble)", - }, - }, -}