dotfiles/nvim/.config/nvim/lua/keymappings.lua
Sanchayan Maity 88ed57fb8b nvim: keymappings: Enable escape and arrow keys
Now that we use Planck EZ as our main keyboard with Colemak as the
layout, allow use of escape and arrow keys. HJKL are not usable the
same way as before.
2021-08-06 10:51:22 +05:30

142 lines
6.8 KiB
Lua

local remap = vim.api.nvim_set_keymap
remap('c', '<Esc>', '<C-C>', { noremap = true })
-- Use Q to execute default register.
remap('n', 'Q', '<Nop>', { noremap = true })
-- Save
remap('n', '<Leader>w', '<Esc>:w<CR>', { noremap = true })
-- Copy to clipboard
remap('v', '<Leader>y', '"+y', { noremap = true })
remap('v', '<Leader>Y', '"*y', { noremap = true })
-- Search and Replace
remap('n', 'c.', ':%s//g<Left><Left><CR>', { noremap = true })
remap('n', '<Leader>c.', ':%s/\\<<C-r><C-w>\\>//g<Left><Left>', { noremap = true })
-- Quit
remap('n', '<Leader>x', '<Esc>:x<CR>', { noremap = true })
remap('n', '<Leader>q', '<Esc>:q<CR>', { noremap = true })
remap('n', '<Leader>Q', '<Esc>:qa<CR>', { noremap = true })
-- Navigate buffers
remap('n', '[b', ':bprevious<CR>', { noremap = true })
remap('n', ']b', ':bnext<CR>', { noremap = true })
remap('n', '[B', ':bfirst<CR>', { noremap = true })
remap('n', ']B', ':blast<CR>', { noremap = true })
-- Reload buffer
remap('n', '<Leader>e', ':e<CR>', { noremap = true })
remap('n', '<Leader>E', ':bufdo<CR>', { noremap = true })
-- Tab navigation
remap('n', '<Leader>tp', ':tabprevious<CR>', { noremap = true })
remap('n', '<Leader>tn', ':tabnext<CR>', { noremap = true })
remap('n', '<Leader>tf', ':tabfirst<CR>', { noremap = true })
remap('n', '<Leader>tl', ':tablast<CR>', { noremap = true })
remap('n', '<Leader>tN', ':tabnew<CR>', { noremap = true })
remap('n', '<Leader>tc', ':tabclose<CR>', { noremap = true })
-- Jump to first tab & close all other tabs. Helpful after running Git
-- difftool.
remap('n', '<Leader>T', ':tabfirst<CR>:tabonly<CR>', { noremap = true })
-- For tags
remap('n', '[t', ':tprevious<CR>', { noremap = true })
remap('n', ']t', ':tNext<CR>', { noremap = true })
remap('n', '[T', ':tfirst<CR>', { noremap = true })
remap('n', ']T', ':tlast<CR>', { noremap = true })
remap('n', '<Leader>ts', ':<C-u>tselect <C-r><C-w><CR>', { noremap = true })
-- Quickfix list mappings
remap('n', 'qo', ':copen<CR>', { noremap = true })
remap('n', 'qc', ':cclose<CR>', { noremap = true })
remap('n', '[q', ':cprevious<CR>', { noremap = true })
remap('n', ']q', ':cnext<CR>', { noremap = true })
remap('n', '[Q', ':cfirst<CR>', { noremap = true })
remap('n', ']Q', ':clast<CR>', { noremap = true })
-- Location list mappings
remap('n', 'Lo', ':lopen<CR>', { noremap = true })
remap('n', 'Lc', ':lclose<CR>', { noremap = true })
remap('n', '[l', ':lprevious<CR>', { noremap = true })
remap('n', ']l', ':lnext<CR>', { noremap = true })
remap('n', '[L', ':lfirst<CR>', { noremap = true })
remap('n', ']L', ':lfirst<CR>', { noremap = true })
-- Preview tags
remap('n', 'pt', ':ptag <C-R><C-W><CR>', { noremap = true })
remap('n', '[p', ':ptprevious<CR>', { noremap = true })
remap('n', ']p', ':ptnext<CR>', { noremap = true })
remap('n', 'po', ':ppop<CR>', { noremap = true })
remap('n', 'pc', ':pc<CR>', { noremap = true })
remap('n', 'pi', ':psearch <C-R><C-W><CR>', { noremap = true })
-- Short cuts for setting fold methods
remap('n', 'zmi', ':set foldmethod=indent<CR>', { noremap = true })
remap('n', 'zmm', ':set foldmethod=manual<CR>', { noremap = true })
remap('n', 'zme', ':set foldmethod=expr<CR>', { noremap = true })
remap('n', 'zmk', ':set foldmethod=marker<CR>', { noremap = true })
remap('n', 'zms', ':set foldmethod=syntax<CR>', { noremap = true })
-- Key Bindings to help with terminal mode
remap('t', '<Esc>', '<C-\\><C-n>', { noremap = true })
-- Key bindings to move between window splits
remap('n', '<Space>0', '0<C-w>w', { noremap = true })
remap('n', '<Space>1', '1<C-w>w', { noremap = true })
remap('n', '<Space>2', '2<C-w>w', { noremap = true })
remap('n', '<Space>3', '3<C-w>w', { noremap = true })
remap('n', '<Space>4', '4<C-w>w', { noremap = true })
remap('n', '<Space>5', '5<C-w>w', { noremap = true })
remap('n', '<Space>6', '6<C-w>w', { noremap = true })
remap('n', '<Space>7', '7<C-w>w', { noremap = true })
remap('n', '<Space>8', '8<C-w>w', { noremap = true })
remap('n', '<Space>9', '9<C-w>w', { noremap = true })
-- Tag helpers
remap('n', '<C-\\>', ':vsp <CR>:<C-u>tag <C-r><C-w><CR>', { noremap = true })
remap('n', '<A-]>', ':sp <CR>:<C-u>tag <C-r><C-w><CR>', { noremap = true })
remap('n', '<Leader>n', ':nohlsearch<CR>', { noremap = true, silent = true })
remap('n', '<Leader>h', ':help<SPACE>', { noremap = true })
-- Move across wrapped lines like regular lines
-- Go to the first non-blank character of a line
remap('n', '0', '^', { noremap = true })
-- Just in case you need to go to the very beginning of a line
remap('n', '^', '0', { noremap = true })
-- Make dot work on visually selected lines
remap('v', '.', ':norm.<CR>', { noremap = true })
-- Go to the last file we changed
remap('n', '<BS>', '<C-^>', { noremap = true })
-- Use Tab & S-Tab instead of C-g and C-t for incsearch
remap('c', '<Tab>', 'getcmdtype() =~ \'[?/]\' ? \'<C-g>\' : feedkeys(\'<Tab>\', \'int\')[1]', { noremap = true, expr = true })
remap('c', '<S-Tab>', 'getcmdtype() =~ \'[?/]\' ? \'<C-t>\' : feedkeys(\'<S-Tab>\', \'int\')[1]', { noremap = true, expr = true })
remap('n', '<F1>', ':call SyntaxAttr#SyntaxAttr()<CR>', { noremap = true })
remap('n', '<F2>', ':TSHighlightCapturesUnderCursor<CR>', { noremap = true })
-- After shifting a visual block, select it again
remap('v', '<', '<gv', { noremap = true })
remap('v', '>', '>gv', { noremap = true })
-- Select last pasted/yanked text
remap('n', 'g<C-v>', '`[v`]', { noremap = true })
-- Map ;; to :
remap('n', ';;', ':', { noremap = true })
-- https://vim.fandom.com/wiki/Moving_lines_up_or_down
remap('n', '<A-j>', ':m .+1<CR>==', { noremap = true, silent = true })
remap('n', '<A-k>', ':m .-2<CR>==', { noremap = true, silent = true })
remap('i', '<A-j>', '<ESC>:m .+1<CR>==gi', { noremap = true, silent = true })
remap('i', '<A-k>', '<ESC>:m .-2<CR>==gi', { noremap = true, silent = true })
remap('v', '<A-j>', ':m \'>+1<CR>gv=gv', { noremap = true, silent = true })
remap('v', '<A-k>', ':m \'<-2<CR>gv=gv', { noremap = true, silent = true })
-- Marks
-- '0 - Position of cursor when last exited Vim.
-- '" - Position of cursor when last exited the current buffer.
-- '. - Position of last change.
-- '< & '> - Start/end of visual selection.
-- '[ & '] - Start/end of last change or yank.
-- '^ - Position of cursor when last Vim last left insert mode - This is how gi command works.
-- '' - Position before last jump (Super useful!). See :h ''.
-- Map gm to `. Instead of `a, hit gma. See :help mark-motions as to why we use backtick.
remap('n', 'gm', '`', { noremap = false })
-- Jump using marks to last change, left insert, jump.
remap('n', '<Leader>mc', ':norm `.<CR>', { noremap = true })
remap('n', '<Leader>mi', ':norm `^<CR>', { noremap = true })
remap('n', '<Leader>mj', ':norm `\'<CR>', { noremap = true })