dots - my configuration files
keymaps.lua (8755B) - raw
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 | local wk = require("which-key") wk.register() -- reset shortmess to default vim.keymap.set("n", "<leader>rs", ":set shortmess=filnxtToOF<cr>", { silent = true }) -- buffer navigation vim.keymap.set("n", "<c-k>", "<plug>(cokeline-focus-next)", { silent = true }) vim.keymap.set("n", "<c-j>", "<plug>(cokeline-focus-prev)", { silent = true }) vim.keymap.set("n", "<c-w>", ":bd!<cr>", { silent = true, nowait = true }) -- new file, save file vim.keymap.set("n", "<c-n>", ":enew<cr>", { silent = true }) vim.keymap.set("n", "<c-s>", ":update<cr>", { silent = false }) -- splits vim.keymap.set("n", "ss", ":split<cr>", { silent = true }) vim.keymap.set("n", "sv", ":vsplit<cr>", { silent = true }) vim.keymap.set("n", "sc", ":close<cr>", { silent = true }) vim.keymap.set("n", "sh", "<c-w>h", { silent = true }) vim.keymap.set("n", "sj", "<c-w>j", { silent = true }) vim.keymap.set("n", "sk", "<c-w>k", { silent = true }) vim.keymap.set("n", "sl", "<c-w>l", { silent = true }) -- don't let fugitive remap our s key so wo maintain our split navigation vim.api.nvim_create_autocmd("FileType", { pattern = "fugitive", callback = function() vim.keymap.set("n", "s", "", { buffer = true, silent = true }) end, }) -- deal w/ word wrap (treat wrapped lines as their own) vim.keymap.set("n", "k", "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) vim.keymap.set("n", "j", "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) -- toggle highlight vim.keymap.set("n", "<Left>", ":set hls!<cr>", { silent = true }) -- toggle file explorer vim.keymap.set("n", "<c-b>", ":NvimTreeToggle<cr>") -- toggle highlight vim.keymap.set("n", "<a-z>", ":set wrap!<cr>", { silent = true }) -- telescope vim.keymap.set("n", "<c-p>", ":Telescope find_files<cr>") vim.keymap.set("n", "<c-f>", ":Telescope live_grep<cr>") vim.keymap.set("n", "<c-h>", ":Telescope buffers<cr>") vim.keymap.set("n", "<leader>s", ":Telescope possession list<cr>") -- markdown preview vim.keymap.set("n", "<leader>mp", ":MarkdownPreview<cr>") -- colorcolumn toggle vim.keymap.set("n", "<a-c>", function() vim.o.colorcolumn = (vim.o.colorcolumn == "") and "80" or (vim.o.colorcolumn == "80") and "120" or "" end) -- format buffer w/ formatter.nvim vim.keymap.set("n", "<leader>ff", ":Format<cr>") -- format selection w/ formatter.nvim vim.keymap.set("v", "<leader>ff", ":Format<cr>") -- place filepath in clipboard vim.keymap.set('n', '<leader>fp', "<cmd>let @+ = expand('%')<cr>", {noremap = true, silent = true}) -- git vim.keymap.set("n", "<leader>gg", ":Git<cr>", { desc = "git: fugitive interface" }) vim.keymap.set("n", "<leader>gb", ":Git blame<cr>", { desc = "git: blame" }) vim.keymap.set("n", "<leader>gaf", ":Gitsigns stage_buffer<cr>", { desc = "git: stage this entire buffer" }) vim.keymap.set("n", "<leader>grf", ":Gitsigns reset_buffer<cr>", { desc = "git: reset buffer" }) vim.keymap.set({ "n", "v" }, "<leader>gah", ":Gitsigns stage_hunk<cr>", { desc = "git: stage this hunk" }) vim.keymap.set({ "n", "v" }, "<leader>guh", ":Gitsigns undo_stage_hunk<cr>", { desc = "git: undo stage this hunk" }) vim.keymap.set({ "n", "v" }, "<leader>grh", ":Gitsigns reset_hunk<cr>", { desc = "git: reset this hunk" }) vim.keymap.set("n", "<leader>gph", ":Gitsigns preview_hunk<cr>", { desc = "git: preview this hunk" }) vim.keymap.set("n", "<leader>gn", ":Gitsigns next_hunk<cr>", { desc = "git: browse to next hunk" }) vim.keymap.set("n", "<leader>gp", ":Gitsigns prev_hunk<cr>", { desc = "git: browse to previous hunk" }) -- vimux vim.keymap.set("n", "<leader>tt", ":VimuxTogglePane<cr>", { silent = true }) -- vimux executors vim.keymap.set("n", "<leader>tr", ':echo "can\'t execute this file"<cr>', { desc = "vimux: run this file" }) vim.api.nvim_create_augroup("vimux", { clear = true }) local vimuxtable = { ["php"] = "php", ["python"] = "python", ["go"] = "go run", ["sh"] = "bash", ["javascript"] = "node", ["typescript"] = "node", ["rust"] = "rust-script", } for ft, exec in pairs(vimuxtable) do vim.api.nvim_create_autocmd("filetype", { group = "vimux", pattern = ft, callback = function() vim.api.nvim_buf_set_keymap( 0, "n", "<leader>tr", ':VimuxRunCommand "' .. exec .. " " .. vim.fn.expand("%:p") .. '"<cr>', { noremap = true } ) end, }) end -- highlight on yank local highlight_group = vim.api.nvim_create_augroup("YankHighlight", { clear = true }) vim.api.nvim_create_autocmd("TextYankPost", { callback = function() vim.highlight.on_yank() end, group = highlight_group, pattern = "*", }) -- send visual selections as commands to execute in tmux pane -- todo: turn this into lua, C-U wouldn't work w/ keymap.set for some reason -- You can add range = true in the options argument of nvim_create_user_command, it will avoid an error if the user leaves the range in the command. -- vim.cmd([[ vn <silent> <leader>ts :<C-U>VimuxRunCommand(VisualSelection())<cr> function! VisualSelection() let [line_start, column_start] = getpos("'<")[1:2] let [line_end, column_end] = getpos("'>")[1:2] let lines = getline(line_start, line_end) if len(lines) == 0 return '' endif let lines[-1] = lines[-1][: column_end - (&selection == 'inclusive' ? 1 : 2)] let lines[0] = lines[0][column_start - 1:] return join(lines, "\n") endfunction]]) -- send entire current line as command to execute in tmux pane, if line ends in \ then send next line too vim.keymap.set("n", "<leader>tl", function() local line = vim.fn.getline(".") vim.cmd("VimuxRunCommand '" .. line .. "'") end, { desc = "vimux: execute visual selection as shell command" }) -- todo vim.keymap.set("n", "]t", function() require("todo-comments").jump_next() end) vim.keymap.set("n", "[t", function() require("todo-comments").jump_prev() end) -- find digit vim.keymap.set("n", "<leader>fd", function() vim.fn.search("\\d\\+") end) -- trouble.nvim vim.keymap.set("n", "<leader>tt", "<cmd>TroubleToggle workspace_diagnostics<cr>") -- bind :W to :write vim.api.nvim_create_user_command("W", "write", {}) vim.keymap.set({ "n", "x", "o" }, "H", "0", { silent = true }) vim.keymap.set({ "n", "x", "o" }, "L", "$", { silent = true }) -- keymap to toggle between relative and absolute line numbers vim.keymap.set("n", "<c-l>", function() if vim.o.relativenumber == true then vim.wo.relativenumber = false else vim.wo.relativenumber = true end end) -- angular file switching vim.api.nvim_create_autocmd("FileType", { pattern = "html", callback = function() vim.keymap.set("n", "<leader>ngc", ":e %<.ts<cr>", { desc = "angular: switch to component", buffer = true, silent = true }) vim.keymap.set("n", "<leader>ngs", ":e %<.scss<cr>", { desc = "angular: switch to stylesheet", buffer = true, silent = true }) end, }) vim.api.nvim_create_autocmd("FileType", { pattern = "typescript", callback = function() vim.keymap.set("n", "<leader>ngt", ":e %<.html<cr>", { desc = "angular: switch to template", buffer = true, silent = true }) vim.keymap.set("n", "<leader>ngs", ":e %<.scss<cr>", { desc = "angular: switch to stylesheet", buffer = true, silent = true }) end, }) -- openai vim.keymap.set("n", "<leader>an", ":GpChatNew<cr>", { desc = "gpt: new chat buffer" }) vim.keymap.set("n", "<leader>ap", ":GpChatToggle<cr>", { desc = "gpt: chat popup" }) vim.keymap.set("n", "<leader>as", ":GpChatRespond<cr>", { desc = "gpt: send message" }) vim.keymap.set("v", "<leader>an", ":<C-u>'<,'>GpChatNew<cr>", { desc = "gpt: new chat buffer" }) vim.keymap.set("v", "<leader>ap", ":<C-u>'<,'>GpChatPaste tabnew<cr>", { desc = "gpt: chat paste" }) vim.keymap.set("v", "<leader>ar", ":<C-u>'<,'>GpRewrite<cr>", { desc = "gpt: rewrite selection" }) -- db vim.keymap.set("n", "<leader>db", ":DBUI<cr>", { desc = "db: open dbui" }) function formatted_list_with_quotes(quotes) local selected_lines = vim.api.nvim_buf_get_lines(0, vim.fn.line("'<")-1, vim.fn.line("'>"), false) local formatted_values = {} for _, line in ipairs(selected_lines) do local trimmed_value = line:match("^%s*(.-)%s*$") -- Trims leading and trailing whitespace if quotes then table.insert(formatted_values, "'" .. trimmed_value .. "'") else table.insert(formatted_values, trimmed_value) end end local formatted_text = table.concat(formatted_values, ', ') vim.api.nvim_buf_set_lines(0, vim.fn.line("'<")-1, vim.fn.line("'>"), false, {formatted_text}) end vim.api.nvim_set_keymap('x', '<leader>fl', ':lua formatted_list_with_quotes(false)<CR>', { desc="turn list into comma separated string", noremap = true, silent = true }) vim.api.nvim_set_keymap('x', '<leader>flq', ':lua formatted_list_with_quotes(true)<CR>', { desc = "turn list into comma separated string (quotes)", noremap = true, silent = true }) |