vim: more readable key mappings

This commit is contained in:
Fernando Schauenburg 2022-02-02 01:37:05 +01:00
parent 08a5953fc6
commit bdbc1c35d5
2 changed files with 55 additions and 68 deletions

View file

@ -1,24 +1,25 @@
local M = {}
local nvim_set_keymap = vim.api.nvim_set_keymap
local nvim_buf_set_keymap = vim.api.nvim_buf_set_keymap
local extend = function(opts)
return vim.tbl_extend('keep', opts or {}, { noremap = true })
end
M.nmap = function(tbl)
vim.api.nvim_set_keymap('n', tbl[1], tbl[2], extend(tbl[3]))
local map = function(mode, lhs, rhs, opts)
nvim_set_keymap(mode, lhs, rhs, extend(opts))
end
M.imap = function(tbl)
vim.api.nvim_set_keymap('n', tbl[1], tbl[2], extend(tbl[3]))
local buf_map = function(mode, lhs, rhs, opts)
nvim_buf_set_keymap(0, mode, lhs, rhs, extend(opts))
end
M.buffer_nmap = function(tbl)
vim.api.nvim_buf_set_keymap(0, 'n', tbl[1], tbl[2], extend(tbl[3]))
end
M.buffer_imap = function(tbl)
vim.api.nvim_buf_set_keymap(0, 'i', tbl[1], tbl[2], extend(tbl[3]))
end
M.nmap = function(tbl) map('n', tbl[1], tbl[2], tbl[3]) end
M.imap = function(tbl) map('i', tbl[1], tbl[2], tbl[3]) end
M.vmap = function(tbl) map('v', tbl[1], tbl[2], tbl[3]) end
M.buffer_nmap = function(tbl) buf_map('n', tbl[1], tbl[2], tbl[3]) end
M.buffer_imap = function(tbl) buf_map('i', tbl[1], tbl[2], tbl[3]) end
return M

View file

@ -1,70 +1,56 @@
local M = function(mode, lhs, rhs, opts)
local merged_opts = vim.tbl_extend('keep', opts or {}, { noremap = true })
local map = { mode = mode, lhs = lhs, rhs = rhs, opts = merged_opts }
map.remap = function() map.opts.noremap = false; return map end
map.silent = function() map.opts.silent = true; return map end
map.expr = function() map.opts.expr = true; return map end
map.unique = function() map.opts.unique = true; return map end
map.nowait = function() map.opts.nowait = true; return map end
map.script = function() map.opts.script = true; return map end
return map
end
local register = function(maps)
for _, m in ipairs(maps) do
vim.api.nvim_set_keymap(m.mode, m.lhs, m.rhs, m.opts)
end
end
local keymap = require 'fs.keymap'
local nmap = keymap.nmap
local imap = keymap.imap
local vmap = keymap.vmap
vim.g.mapleader = ' '
register {
-- better navigation for wrapped lines
M('n', 'j', 'gj'),
M('n', 'k', 'gk'),
-- better navigation for wrapped lines
nmap { 'j', 'gj' }
nmap { 'k', 'gk' }
-- retain selection when indenting/unindenting in visual mode
M('v', '>', '><cr>gv'),
M('v', '<', '<<cr>gv'),
-- retain selection when indenting/unindenting in visual mode
vmap { '>', '><cr>gv' }
vmap { '<', '<<cr>gv' }
-- easier window navigation
M('n', '<c-j>', '<c-w>j'),
M('n', '<c-k>', '<c-w>k'),
M('n', '<c-h>', '<c-w>h'),
M('n', '<c-l>', '<c-w>l'),
-- easier window navigation
nmap { '<c-j>', '<c-w>j' }
nmap { '<c-k>', '<c-w>k' }
nmap { '<c-h>', '<c-w>h' }
nmap { '<c-l>', '<c-w>l' }
-- window resizing
M('n', '<Up>', '<cmd>resize +1<cr>'),
M('n', '<Down>', '<cmd>resize -1<cr>'),
M('n', '<Left>', '<cmd>vertical resize -1<cr>'),
M('n', '<Right>', '<cmd>vertical resize +1<cr>'),
-- window resizing
nmap { '<Up>', '<cmd>resize +1<cr>' }
nmap { '<Down>', '<cmd>resize -1<cr>' }
nmap { '<Left>', '<cmd>vertical resize -1<cr>' }
nmap { '<Right>', '<cmd>vertical resize +1<cr>' }
-- easier tab navigation
M('n', '<c-n>', ':tabprevious<cr>').silent(),
M('n', '<c-m>', ':tabnext<cr>' ).silent(),
-- easier tab navigation
nmap { '<c-n>', '<cmd>tabprevious<cr>', { silent = true } }
nmap { '<c-m>', '<cmd>tabnext<cr>' , { silent = true } }
-- move lines up and down
M('n', '<A-j>', [[:move .+1<cr>==]] ).silent(),
M('n', '<A-k>', [[:move .-2<cr>==]] ).silent(),
M('v', '<A-j>', [[:move '>+1<cr>gv=gv]] ).silent(),
M('v', '<A-k>', [[:move '<-2<cr>gv=gv]] ).silent(),
M('i', '<A-j>', [[<esc>:move .+1<cr>==gi]] ).silent(),
M('i', '<A-k>', [[<esc>:move .-2<cr>==gi]] ).silent(),
-- move lines up and down
nmap { '<A-j>', [[:move .+1<cr>==]] , { silent = true } }
nmap { '<A-k>', [[:move .-2<cr>==]] , { silent = true } }
vmap { '<A-j>', [[:move '>+1<cr>gv=gv]], { silent = true } }
vmap { '<A-k>', [[:move '<-2<cr>gv=gv]], { silent = true } }
imap { '<A-j>', [[<esc>:move .+1<cr>==gi]] , { silent = true } }
imap { '<A-k>', [[<esc>:move .-2<cr>==gi]] , { silent = true } }
-- cycle through line numbering modes
M('n', '<leader>ln', ':set nonumber norelativenumber<CR>' ).silent(),
M('n', '<leader>ll', ':set number norelativenumber<CR>' ).silent(),
M('n', '<leader>lr', ':set number relativenumber<CR>' ).silent(),
-- cycle through line numbering modes
nmap { '<leader>ln', '<cmd>set nonumber norelativenumber<CR>' , { silent = true } }
nmap { '<leader>ll', '<cmd>set number norelativenumber<CR>' , { silent = true } }
nmap { '<leader>lr', '<cmd>set number relativenumber<CR>' , { silent = true } }
-- show list of buffers and prepare to switch
M('n', '<leader>bf', ':ls<CR>:b<Space>'),
-- show list of buffers and prepare to switch
nmap { '<leader>bf', '<cmd>ls<CR>:b<Space>' }
-- quickly change background
M('n', '<leader>bg', [[:let &background = &background ==? 'light' ? 'dark' : 'light'<cr>]]),
-- quickly change background
nmap { '<leader>bg', [[<cmd>let &background = &background ==? 'light' ? 'dark' : 'light'<cr>]] }
-- disable highlight until next search
M('n', '<leader>h', ':nohlsearch<cr>'),
-- disable highlight until next search
nmap { '<leader>h', '<cmd>nohlsearch<cr>' }
-- edit init.lua
nmap { '<leader>v', '<cmd>e $MYVIMRC<cr>' }
-- edit init.lua
M('n', '<leader>v', ':e $MYVIMRC<cr>'),
}