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