local function map(mode, lhs, rhs, opts) local options = { noremap = true } if opts then options = vim.tbl_extend('force', options, opts) end vim.api.nvim_set_keymap(mode, lhs, rhs, options) end local function nmap(lhs, rhs, opts) map('n', lhs, rhs, opts) end --- Mappings -- Essentials vim.g.mapleader = ' ' nmap(';', ':') nmap(',,', '') nmap('w', ':w') -- TODO: stop this madness, :h autowrite nmap('Q', ':q!') nmap('', ':nohlsearch', { silent = true }) -- Convenience nmap('yy', 'Y') nmap('Y', 'y$') nmap('N', 'Nzz') nmap('n', 'nzz') nmap('j', 'gj') nmap('k', 'gk') nmap('H', '^') nmap('L', '$') nmap('J', 'mzJ`z') nmap('K', '') nmap('gQ', '') nmap('vv', ':vs') -- Tabs nmap('t', ':tabnew') nmap('', ':tabnext') nmap('', ':tabprevious') nmap('1', '1gt') nmap('2', '2gt') nmap('3', '3gt') nmap('4', '4gt') nmap('5', '5gt') -- Visual mode map('v', '.', ':normal .') map('v', 'J', ':m \'>+1gv=gv') map('v', 'K', ':m \'<-2gv=gv') map('v', '<', '', '>gv') -- vim-easy-align map('x', 'ga', ':EasyAlign') -- TODO: this should allow for gaip, but does not map('v', 'ga', ':EasyAlign') -- nvim-tree.lua -- nmap('n', ':NERDTreeToggle') -- nmap('N', ':NERDTreeFind') nmap('n', ':NvimTreeToggle') nmap('N', ':NvimTreeFindFile') -- glow.vim nmap('p', ':Glow') -- fugitive.vim nmap('ga',':Gwrite') nmap('gs',':Git') nmap('gb',':Git blame') -- rails-vim nmap('a', ':A') -- test nmap('r', ':TestFile') nmap('R', ':TestSuite') -- CtrlSF nmap('', 'CtrlSFPrompt') -- trim whitespace nmap('W', ':TrimWhitespace')