local function map(mode, lhs, rhs, opts) local options = { noremap = true } if opts then options = vim.tbl_extend('force', options, opts) end vim.keymap.set(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 vim.keymap.set("n", "ga", "(EasyAlign)") vim.keymap.set("x", "ga", "(EasyAlign)") -- nvim-tree.lua 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', function() os.execute("tmux send-keys -t '{down-of}' './bin/rspec '" .. vim.fn.expand("%") .. " Enter") end) nmap('R', function() os.execute("tmux send-keys -t '{down-of}' './bin/rspec .' Enter") end) -- CtrlSF nmap('', 'CtrlSFPrompt') -- trim whitespace nmap('W', ':TrimWhitespace') -- EXPERIMENTAL: -- nmap('x', ':!rm %') nmap('x', ":call delete(expand('%')) | bdelete!") nmap('q', ':copen')