keymaps.lua (4983B)
1 local utils = require('custom.utils') 2 3 -- Globals. 4 vim.g.mapleader=' ' -- Set <leader> key. 5 6 -- Kill arrow keys, for great justice. 7 vim.keymap.set('n', '<Up>', '<NOP>') 8 vim.keymap.set('n', '<Down>', '<NOP>') 9 vim.keymap.set('n', '<Left>', '<NOP>') 10 vim.keymap.set('n', '<Right>', '<NOP>') 11 12 -- Tab creation and switching. 13 vim.keymap.set('n', '<leader>0', ':tabnew<CR>', { desc = 'New tab', silent = true }) 14 for i = 1, 9 do 15 vim.keymap.set('n', '<leader>' .. i, i .. 'gt', { desc = 'Go to tab ' .. i, silent = true }) 16 end 17 18 -- In terminal, C-[ (ESC) is passed through to the terminal by default. 19 -- Remap C-] to return to normal mode like C-[ does by default. 20 vim.keymap.set('t', '<Esc><Esc>', [[<C-\><C-n>]], { desc = 'Exit terminal mode' }) 21 22 -- Launch a terminal in a new vertical split, focus it and enter insert mode. 23 vim.keymap.set('n', '<leader>t', 24 '<cmd>vsplit | wincmd l | set nonumber | terminal<CR><cmd>startinsert<CR>', 25 { noremap = true, silent = true, desc = "Launch terminal in vertical split" }) 26 27 -- Launch a terminal in a new horizontal split, focus it and enter insert mode. 28 vim.keymap.set('n', '<leader>T', 29 '<cmd>split | wincmd j | set nonumber | terminal<CR><cmd>startinsert<CR>', 30 { noremap = true, silent = true, desc = "Launch terminal in horizontal split" }) 31 32 -- Retain selection on <,>. 33 vim.keymap.set('v', '<', '<gv') 34 vim.keymap.set('v', '>', '>gv') 35 36 -- Configure netrw. 37 vim.g.netrw_banner=0 38 vim.g.netrw_liststyle=3 39 vim.keymap.set('n', '<leader>ee', '<cmd>35Lexplore<CR>') 40 vim.keymap.set('n', '<leader>ef', '<cmd>35Lexplore %:p:h<CR>') 41 42 -- Make Lazy even lazier. 43 vim.keymap.set('n', '<leader>l', '<cmd>Lazy<CR>') 44 45 -- Configure fzf-lua. 46 vim.keymap.set('n', '<leader>b', '<cmd>FzfLua buffers<CR>') 47 vim.keymap.set('n', '<leader>fg', '<cmd>FzfLua grep<CR>') 48 vim.keymap.set('n', '<leader>fl', '<cmd>FzfLua live_grep<CR>') 49 vim.keymap.set('n', '<leader>fc', '<cmd>FzfLua builtin commands<CR>') 50 vim.keymap.set('n', '<leader>ff', '<cmd>FzfLua files<CR>') 51 vim.keymap.set('n', '<leader>fr', '<cmd>FzfLua lsp_references<CR>') 52 vim.keymap.set('n', '<leader>fs', '<cmd>FzfLua lsp_document_symbols<CR>') 53 vim.keymap.set('n', '<leader>fS', '<cmd>FzfLua lsp_live_workspace_symbols<CR>') 54 55 -- Copy the current file path (relative to pwd) to the clipboard 56 vim.keymap.set('n', '<leader>cf', function() 57 vim.fn.setreg('+', vim.fn.expand('%')) 58 print('Copied full file path to clipboard') 59 end, { noremap = true, silent = true, desc = 'Copy file path to clipboard' }) 60 61 -- Searches user-specified directories and pastes selected path relative to pwd. 62 -- vim.g.fzf_search_base: the directory relative to which fzf-lua results are presented. 63 -- vim.g.fzf_search_paths: the paths to search relative to fzf_search_base. 64 vim.keymap.set('i', '<C-x>@', function() 65 local opts = {} 66 local search_base = vim.g.fzf_search_base 67 local search_paths = vim.g.fzf_search_paths 68 if search_base and search_paths and #search_paths > 0 then 69 opts.cwd = search_base 70 71 local paths = table.concat(search_paths, " ") 72 if vim.fn.executable('fd') == 1 then 73 opts.cmd = "fd --type f . " .. paths 74 else 75 opts.cmd = "find " .. paths .. " -type f" 76 end 77 end 78 79 opts.actions = { 80 ['default'] = function(selected) 81 local file_path = selected[1] 82 if file_path then 83 if vim.startswith(file_path, "./") then 84 file_path = file_path:sub(3) 85 end 86 vim.api.nvim_put({'@' .. search_base .. '/' .. file_path .. ' ' }, 'c', false, true) 87 vim.api.nvim_feedkeys('a', 'n', false) 88 end 89 end, 90 } 91 require('fzf-lua').files(opts) 92 end, { silent = true }) 93 94 -- Toggle diagnostics. 95 vim.keymap.set('n', '<leader>D', function() 96 vim.diagnostic.enable(not vim.diagnostic.is_enabled()) 97 end, { silent = true, desc = "Toggle diagnostics" }) 98 vim.keymap.set("n", "<leader>qf", vim.diagnostic.setqflist, {silent = true}) 99 100 -- Key mapping to toggle absolute/relative numbering. 101 vim.keymap.set('n', '<leader>n', function() 102 local opt = vim.opt 103 if opt.number:get() == false then 104 opt.number = true 105 elseif opt.relativenumber:get() == false then 106 opt.relativenumber = true 107 else 108 opt.relativenumber = false 109 opt.number = false 110 end 111 end) 112 113 -- Open today's daily note. 114 vim.keymap.set('n', '<leader>dd', function() 115 utils.jump_daily(0) 116 end, { desc = "Open today's daily note", noremap = true, silent = true }) 117 118 -- Go to previous day's note relative to current note (or today). 119 vim.keymap.set('n', '<leader>dp', function() 120 utils.jump_daily(-1) 121 end, { desc = "Go to previous daily note", noremap = true, silent = true }) 122 123 -- Go to next day's note relative to current note (or today). 124 vim.keymap.set('n', '<leader>dn', function() 125 utils.jump_daily(1) 126 end, { desc = "Go to next daily note", noremap = true, silent = true }) 127 128 -- Open tasks 129 vim.keymap.set('n', '<leader>dt', function() 130 utils.jump_tasks() 131 end, { desc = "Open tasks note", noremap = true, silent = true }) 132