From b31dcac34e5bf670c13b4bdf76f146245f0642c7 Mon Sep 17 00:00:00 2001 From: Fernando Schauenburg Date: Thu, 11 Nov 2021 15:27:58 +0100 Subject: [PATCH] vim: use API for setting keymaps --- nvim/lua/fs/keymaps.lua | 127 ++++++++++++++++++++-------------------- 1 file changed, 62 insertions(+), 65 deletions(-) diff --git a/nvim/lua/fs/keymaps.lua b/nvim/lua/fs/keymaps.lua index bdf20fe..e148b35 100644 --- a/nvim/lua/fs/keymaps.lua +++ b/nvim/lua/fs/keymaps.lua @@ -1,79 +1,76 @@ +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 + vim.g.mapleader = ' ' --- better navigation for wrapped lines -vim.cmd([[noremap j gj]]) -vim.cmd([[noremap k gk]]) +register { + -- better navigation for wrapped lines + M('n', 'j', 'gj'), + M('n', 'k', 'gk'), --- retain selection when indenting/unindenting in visual mode -vim.cmd([[vnoremap > >gv]]) -vim.cmd([[vnoremap < <gv]]) + -- retain selection when indenting/unindenting in visual mode + M('v', '>', '>gv'), + M('v', '<', '<gv'), --- easier window navigation -vim.cmd([[nnoremap j]]) -vim.cmd([[nnoremap k]]) -vim.cmd([[nnoremap h]]) -vim.cmd([[nnoremap l]]) + -- easier window navigation + M('n', '', 'j'), + M('n', '', 'k'), + M('n', '', 'h'), + M('n', '', 'l'), --- window resizing -vim.cmd([[nnoremap resize +1]]) -vim.cmd([[nnoremap resize -1]]) -vim.cmd([[nnoremap vertical resize -1]]) -vim.cmd([[nnoremap vertical resize +1]]) + -- window resizing + M('n', '', 'resize +1'), + M('n', '', 'resize -1'), + M('n', '', 'vertical resize -1'), + M('n', '', 'vertical resize +1'), --- easier tab navigation -vim.cmd([[nnoremap :tabprevious]]) -vim.cmd([[nnoremap :tabnext]]) + -- easier tab navigation + M('n', '', ':tabprevious').silent(), + M('n', '', ':tabnext' ).silent(), --- move lines up and down -vim.cmd([[nnoremap :move .+1==]]) -vim.cmd([[nnoremap :move .-2==]]) -vim.cmd([[vnoremap :move '>+1gv=gv]]) -vim.cmd([[vnoremap :move '<-2gv=gv]]) -vim.cmd([[inoremap :move .+1==gi]]) -vim.cmd([[inoremap :move .-2==gi]]) + -- move lines up and down + M('n', '', [[:move .+1==]] ).silent(), + M('n', '', [[:move .-2==]] ).silent(), + M('v', '', [[:move '>+1gv=gv]] ).silent(), + M('v', '', [[:move '<-2gv=gv]] ).silent(), + M('i', '', [[:move .+1==gi]] ).silent(), + M('i', '', [[:move .-2==gi]] ).silent(), --- cycle through line numbering modes -vim.cmd([[nnoremap ln :set nonumber norelativenumber]]) -vim.cmd([[nnoremap ll :set number norelativenumber]]) -vim.cmd([[nnoremap lr :set number relativenumber]]) + -- cycle through line numbering modes + M('n', 'ln', ':set nonumber norelativenumber' ).silent(), + M('n', 'll', ':set number norelativenumber' ).silent(), + M('n', 'lr', ':set number relativenumber' ).silent(), --- show list of buffers and prepare to switch -vim.cmd([[nnoremap bf :ls:b]]) + -- show list of buffers and prepare to switch + M('n', 'bf', ':ls:b'), --- quickly change background -vim.cmd([[nnoremap bg :let &background = &background ==? 'light' ? 'dark' : 'light']]) + -- quickly change background + M('n', 'bg', [[:let &background = &background ==? 'light' ? 'dark' : 'light']]), --- toggle search highlight -vim.cmd([[nnoremap h :set hlsearch!]]) + -- toggle search highlight + M('n', 'h', ':set hlsearch!'), --- toggle NERDTree -vim.cmd([[nnoremap n :NERDTreeToggle]]) + -- toggle NERDTree + M('n', 'n', ':NERDTreeToggle'), --- toggle rainbow parens -vim.cmd([[nnoremap p :RainbowParentheses!!]]) - --- fix whitespace -vim.cmd([[nnoremap w :FixWhitespace]]) - - --- " Double leader key for toggling visual-line mode --- nmap V --- xmap - --- " Toggle fold --- nnoremap za - --- nnoremap Q q --- nnoremap gQ @q - --- " Start new line from any cursor position in insert-mode --- inoremap o - --- " Change current word in a repeatable manner --- nnoremap cn *``cgn --- nnoremap cN *``cgN - --- " Change the current word in insertmode. --- " Auto places you into the spot where you can start typing to change it. --- nnoremap :%s///g + -- toggle rainbow parens + M('n', 'p', ':RainbowParentheses!!'), + -- fix whitespace + M('n', 'w', ':FixWhitespace'), +}