dotfiles

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

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)