dotfiles

Personal dotfiles
git clone https://git.bracken.jp/dotfiles.git
Log | Files | Refs | LICENSE

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