dotfiles/nvim/.config/nvim/lua/keymappings.lua
Sanchayan Maity 068dfcd4b9 nvim: lsp/keymappings: Move the diagnostic key mappings outside of LSP
vim.diagnostic framework is now available and can be used outside of
LSP. This means the same functions can now work for plugins providing
diagnostics via this framework like nvim-lint and null-ls.
2021-10-02 18:29:57 +05:30

149 lines
6.2 KiB
Lua

local remap = vim.api.nvim_set_keymap
local expr_opts = { noremap=true, silent=true, unique=true, expr=true }
local opts = { noremap=true, silent=true, unique=true }
remap('c', '<Esc>', '<C-C>', opts)
-- Use Q to execute default register.
remap('n', 'Q', '<Nop>', opts)
-- Copy to clipboard
remap('v', '<Leader>y', '"+y' , opts)
remap('v', '<Leader>Y', '"*y' , opts)
remap('n', '<Leader>p', '<ESC>"+p', opts)
remap('n', '<Leader>P', '<ESC>"*p', opts)
-- Search and Replace
remap('n', 'c.' , ':%s//g<Left><Left><CR>' , opts)
remap('n', '<Leader>c.', ':%s/\\<<C-r><C-w>\\>//g<Left><Left>', opts)
-- Quit
remap('n', '<Leader>x', '<Esc>:x<CR>' , opts)
remap('n', '<Leader>q', '<Esc>:q<CR>' , opts)
remap('n', '<Leader>Q', '<Esc>:qa<CR>', opts)
-- Navigate buffers
remap('n', '[b', ':bprevious<CR>', opts)
remap('n', ']b', ':bnext<CR>' , opts)
remap('n', '[B', ':bfirst<CR>' , opts)
remap('n', ']B', ':blast<CR>' , opts)
-- Reload buffer
remap('n', '<Leader>e', ':e<CR>' , opts)
remap('n', '<Leader>E', ':bufdo<CR>', opts)
-- Tab navigation
remap('n', '<Leader>tp', ':tabprevious<CR>', opts)
remap('n', '<Leader>tn', ':tabnext<CR>' , opts)
remap('n', '<Leader>tf', ':tabfirst<CR>' , opts)
remap('n', '<Leader>tl', ':tablast<CR>' , opts)
remap('n', '<Leader>tN', ':tabnew<CR>' , opts)
remap('n', '<Leader>tc', ':tabclose<CR>' , opts)
-- Jump to first tab & close all other tabs. Helpful after running Git
-- difftool.
remap('n', '<Leader>T', ':tabfirst<CR>:tabonly<CR>', opts)
-- For tags
remap('n', '[t', ':tprevious<CR>', opts)
remap('n', ']t', ':tNext<CR>' , opts)
remap('n', '[T', ':tfirst<CR>' , opts)
remap('n', ']T', ':tlast<CR>' , opts)
remap('n', '<Leader>ts', ':<C-u>tselect <C-r><C-w><CR>', opts)
-- Quickfix list mappings
remap('n', 'qo', ':copen<CR>' , opts)
remap('n', 'qc', ':cclose<CR>' , opts)
remap('n', '[q', ':cprevious<CR>', opts)
remap('n', ']q', ':cnext<CR>' , opts)
remap('n', '[Q', ':cfirst<CR>' , opts)
remap('n', ']Q', ':clast<CR>' , opts)
-- Location list mappings
remap('n', 'Lo', ':lopen<CR>' , opts)
remap('n', 'Lc', ':lclose<CR>' , opts)
remap('n', '[l', ':lprevious<CR>', opts)
remap('n', ']l', ':lnext<CR>' , opts)
remap('n', '[L', ':lfirst<CR>' , opts)
remap('n', ']L', ':lfirst<CR>' , opts)
-- Preview tags
remap('n', 'pt', ':ptag <C-R><C-W><CR>' , opts)
remap('n', '[p', ':ptprevious<CR>' , opts)
remap('n', ']p', ':ptnext<CR>' , opts)
remap('n', 'po', ':ppop<CR>' , opts)
remap('n', 'pc', ':pc<CR>' , opts)
remap('n', 'pi', ':psearch <C-R><C-W><CR>', opts)
-- Short cuts for setting fold methods
remap('n', 'zmi', ':set foldmethod=indent<CR>', opts)
remap('n', 'zmm', ':set foldmethod=manual<CR>', opts)
remap('n', 'zme', ':set foldmethod=expr<CR>' , opts)
remap('n', 'zmk', ':set foldmethod=marker<CR>', opts)
remap('n', 'zms', ':set foldmethod=syntax<CR>', opts)
-- Key Bindings to help with terminal mode
remap('t', '<Esc>', '<C-\\><C-n>', opts)
-- Key bindings to move between window splits
remap('n', '<Space>0', '0<C-w>w', opts)
remap('n', '<Space>1', '1<C-w>w', opts)
remap('n', '<Space>2', '2<C-w>w', opts)
remap('n', '<Space>3', '3<C-w>w', opts)
remap('n', '<Space>4', '4<C-w>w', opts)
remap('n', '<Space>5', '5<C-w>w', opts)
remap('n', '<Space>6', '6<C-w>w', opts)
remap('n', '<Space>7', '7<C-w>w', opts)
remap('n', '<Space>8', '8<C-w>w', opts)
remap('n', '<Space>9', '9<C-w>w', opts)
-- Tag helpers
remap('n', '<C-\\>', ':vsp <CR>:<C-u>tag <C-r><C-w><CR>', opts)
remap('n', '<A-]>' , ':sp <CR>:<C-u>tag <C-r><C-w><CR>' , opts)
-- Move across wrapped lines like regular lines
-- Go to the first non-blank character of a line
remap('n', '0', '^', opts)
-- Just in case you need to go to the very beginning of a line
remap('n', '^', '0', opts)
-- Make dot work on visually selected lines
remap('v', '.', ':norm.<CR>', opts)
-- Go to the last file we changed
remap('n', '<BS>', '<C-^>', opts)
-- Use Tab & S-Tab instead of C-g and C-t for incsearch
remap('c', '<Tab>' , 'getcmdtype() =~ \'[?/]\' ? \'<C-g>\' : feedkeys(\'<Tab>\' , \'int\')[1]', expr_opts)
remap('c', '<S-Tab>', 'getcmdtype() =~ \'[?/]\' ? \'<C-t>\' : feedkeys(\'<S-Tab>\', \'int\')[1]', expr_opts)
remap('n', '<F2>', ':TSHighlightCapturesUnderCursor<CR>', opts)
-- After shifting a visual block, select it again
remap('v', '<', '<gv', opts)
remap('v', '>', '>gv', opts)
-- Select last pasted/yanked text
remap('n', 'g<C-v>', '`[v`]', opts)
-- Map ;; to :
remap('n', ';;', ':', opts)
-- https://vim.fandom.com/wiki/Moving_lines_up_or_down
remap('n', '<A-j>', ':m .+1<CR>==' , opts)
remap('n', '<A-k>', ':m .-2<CR>==' , opts)
remap('i', '<A-j>', '<ESC>:m .+1<CR>==gi', opts)
remap('i', '<A-k>', '<ESC>:m .-2<CR>==gi', opts)
remap('v', '<A-j>', ':m \'>+1<CR>gv=gv' , opts)
remap('v', '<A-k>', ':m \'<-2<CR>gv=gv' , opts)
-- 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>' , opts)
remap('n', '<Leader>mi', ':norm `^<CR>' , opts)
remap('n', '<Leader>mj', ':norm `\'<CR>', opts)
remap('n', '[d', '<cmd>lua vim.diagnostic.goto_prev { wrap = false }<CR>' , opts)
remap('n', ']d', '<cmd>lua vim.diagnostic.goto_next { wrap = false }<CR>' , opts)
remap('n', '[D', '<cmd>lua vim.diagnostic.goto_prev()<CR>' , opts)
remap('n', ']D', '<cmd>lua vim.diagnostic.goto_next()<CR>' , opts)
remap('n', 'dl', '<cmd>lua vim.diagnostic.setloclist()<CR>' , opts)
remap('n', 'dq', '<cmd>lua vim.diagnostic.setqflist()<CR>' , opts)
remap('n', ',D', '<cmd>lua vim.diagnostic.show_line_diagnostics()<CR>' , opts)
remap('n', ',d', '<cmd>lua vim.diagnostic.show_position_diagnostics()<CR>', opts)