284 lines
5.2 KiB
Lua
284 lines
5.2 KiB
Lua
local function map(mode, lhs, rhs, opts)
|
|
local options = {
|
|
noremap = true,
|
|
silent = true,
|
|
}
|
|
if opts then
|
|
options = vim.tbl_extend('force', options, opts)
|
|
end
|
|
vim.keymap.set(mode, lhs, rhs, options)
|
|
end
|
|
|
|
-- Save File
|
|
map(
|
|
{
|
|
'i',
|
|
'v',
|
|
'n',
|
|
's',
|
|
},
|
|
'<C-s>',
|
|
'<cmd>w<cr><esc>',
|
|
{
|
|
desc = 'Save file',
|
|
}
|
|
)
|
|
|
|
map('i', '<C-v>', '<ESC>"+p<ESC>a', {
|
|
desc = 'Paste from clipboard',
|
|
})
|
|
|
|
map('n', '<A-v>', 'm`o<ESC>p``', {
|
|
desc = 'Paste below',
|
|
})
|
|
|
|
map('n', '<A-p>', 'm`O<ESC>p``', {
|
|
desc = 'Paste above',
|
|
})
|
|
|
|
map(
|
|
{
|
|
'n',
|
|
'x',
|
|
},
|
|
'<C-c>',
|
|
'"+y<ESC>',
|
|
{
|
|
desc = 'Copy to clipboard',
|
|
}
|
|
)
|
|
|
|
map(
|
|
{
|
|
'n',
|
|
'x',
|
|
},
|
|
'<C-x>',
|
|
'"+y<ESC>dd',
|
|
{
|
|
desc = 'Cut to clipboard',
|
|
}
|
|
)
|
|
|
|
-- Reselect the text that has just been pasted, see also https://stackoverflow.com/a/4317090/6064933.
|
|
map('n', '<A-r>', "printf('`[%s`]', getregtype()[0])", {
|
|
expr = true,
|
|
desc = 'reselect last pasted area',
|
|
})
|
|
|
|
map(
|
|
{
|
|
'i',
|
|
'v',
|
|
'n',
|
|
's',
|
|
},
|
|
'<C-q>',
|
|
'<cmd>wq!<cr><esc>',
|
|
{
|
|
desc = 'Force Save file and quit',
|
|
}
|
|
)
|
|
|
|
-- Select all text in the current buffer
|
|
map('n', '<C-a>', ':keepjumps normal! ggyG<cr>', {
|
|
desc = 'Select all',
|
|
})
|
|
|
|
-- quit
|
|
map('n', '<A-q>', '<cmd>wqa!<cr>', {
|
|
desc = 'Quit all',
|
|
})
|
|
|
|
-- go to beginning and end in insert mode
|
|
map('i', '<A-b>', '<ESC>^i', {
|
|
desc = 'Go to beginning of line',
|
|
})
|
|
map('i', '<A-e>', '<End>', {
|
|
desc = 'Go to end of line',
|
|
})
|
|
|
|
-- Go to the beginning and end of current line in insert mode quickly
|
|
map('i', '<A-h>', '<HOME>')
|
|
map('i', '<A-l>', '<END>')
|
|
|
|
-- insert semicolon in the end
|
|
map('i', '<A-;>', '<Esc>miA;<Esc>`ii', {
|
|
desc = 'insert semicolon in the end',
|
|
})
|
|
|
|
-- Turn the word under cursor to upper case
|
|
map('i', '<c-u>', '<Esc>viwUea')
|
|
-- Turn the current word into lower case
|
|
map('i', '<c-t>', '<Esc>b~lea')
|
|
|
|
-- Undo
|
|
map('i', '<A-z>', '<C-O>u')
|
|
|
|
-- navigate within insert mode
|
|
map('i', '<C-h>', '<Left>', {
|
|
desc = 'Move Left',
|
|
})
|
|
map('i', '<C-l>', '<Right>', {
|
|
desc = 'Move Right',
|
|
})
|
|
map('i', '<C-j>', '<Down>', {
|
|
desc = 'Move Down',
|
|
})
|
|
map('i', '<C-k>', '<Up>', {
|
|
desc = 'Move Up',
|
|
})
|
|
|
|
-- Copy whole buffer
|
|
map('n', '<C-y>', '<cmd>%y+<CR>', {
|
|
desc = 'Copy whole buffer',
|
|
})
|
|
|
|
-- Go to start or end of line easier
|
|
map(
|
|
{
|
|
'n',
|
|
'x',
|
|
},
|
|
'H',
|
|
'^',
|
|
{
|
|
desc = 'Go to beginning of line',
|
|
}
|
|
)
|
|
map(
|
|
{
|
|
'n',
|
|
'x',
|
|
},
|
|
'L',
|
|
'g_',
|
|
{
|
|
desc = 'Go to end of line',
|
|
}
|
|
)
|
|
|
|
-- Change text without putting it into the vim register,
|
|
map(
|
|
{
|
|
'n',
|
|
'x',
|
|
},
|
|
'c',
|
|
'"_c',
|
|
{
|
|
desc = 'Change without yanking',
|
|
}
|
|
)
|
|
map(
|
|
{
|
|
'n',
|
|
'x',
|
|
},
|
|
'C',
|
|
'"_C',
|
|
{
|
|
desc = 'Change without yanking',
|
|
}
|
|
)
|
|
map(
|
|
{
|
|
'n',
|
|
'x',
|
|
},
|
|
'cc',
|
|
'"_cc',
|
|
{
|
|
desc = 'Change without yanking',
|
|
}
|
|
)
|
|
map(
|
|
{
|
|
'n',
|
|
'x',
|
|
},
|
|
'x',
|
|
'"_x',
|
|
{
|
|
desc = 'delete without yanking',
|
|
}
|
|
)
|
|
|
|
-- Better escape using jk in insert and terminal mode
|
|
map('i', 'jk', '<ESC>')
|
|
map('i', 'kj', '<ESC>')
|
|
map('i', 'jj', '<ESC>')
|
|
|
|
-- Terminal Mappings
|
|
map('t', 'jk', '<C-\\><C-n>')
|
|
map('t', 'kj', '<C-\\><C-n>')
|
|
map('t', '<ESC>', '<C-\\><C-n>')
|
|
|
|
-- Move with shift-arrows
|
|
map('n', '<S-Left>', '<C-w><S-h>', {
|
|
desc = 'Move window to the left',
|
|
})
|
|
map('n', '<S-Down>', '<C-w><S-j>', {
|
|
desc = 'Move window down',
|
|
})
|
|
map('n', '<S-Up>', '<C-w><S-k>', {
|
|
desc = 'Move window up',
|
|
})
|
|
map('n', '<S-Right>', '<C-w><S-l>', {
|
|
desc = 'Move window to the right',
|
|
})
|
|
|
|
-- Search
|
|
map(
|
|
{
|
|
'n',
|
|
'x',
|
|
},
|
|
'gw',
|
|
'*N',
|
|
{
|
|
desc = 'Search word under cursor',
|
|
}
|
|
)
|
|
|
|
-- Some cool remaps
|
|
map('n', 'n', 'nzzzv')
|
|
map('n', 'N', 'Nzzzv')
|
|
map('n', 'J', 'mzJ`z')
|
|
map('n', '}', '}zzzv')
|
|
map('n', '{', '{zzzv')
|
|
map('n', 'g,', 'g,zvzz')
|
|
map('n', 'g;', 'g;zvzz')
|
|
map('n', '<C-d>', '<C-d>zz')
|
|
map('n', '<C-u>', '<C-u>zz')
|
|
map('n', '^', 'g^')
|
|
map('n', '0', 'g0')
|
|
-- Do not include white space characters when using $ in visual mode,
|
|
map('x', '$', 'g_')
|
|
-- Always use very magic mode for searching
|
|
map('n', '/', [[/\v]])
|
|
|
|
-- Add undo break-points
|
|
map('i', '?', '?<c-g>u')
|
|
map('i', '!', '!<c-g>u')
|
|
map('i', ',', ',<c-g>u')
|
|
map('i', '.', '.<c-g>u')
|
|
map('i', ';', ';<c-g>u')
|
|
|
|
-- compromised backward search when comma is being used as localleader
|
|
map('n', '<A-,>', ',')
|
|
|
|
-- Better up/down
|
|
map({ 'n', 'x' }, 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true })
|
|
map({ 'n', 'x' }, '<Down>', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true })
|
|
map({ 'n', 'x' }, 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true })
|
|
map({ 'n', 'x' }, '<Up>', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true })
|
|
|
|
-- Move text up and down
|
|
map('n', '<A-j>', '<cmd>m .+1<cr>==', { desc = 'Move Down' })
|
|
map('n', '<A-k>', '<cmd>m .-2<cr>==', { desc = 'Move Up' })
|
|
map('i', '<A-j>', '<esc><cmd>m .+1<cr>==gi', { desc = 'Move Down' })
|
|
map('i', '<A-k>', '<esc><cmd>m .-2<cr>==gi', { desc = 'Move Up' })
|
|
map('v', '<A-j>', ":m '>+1<cr>gv=gv", { desc = 'Move Down' })
|
|
map('v', '<A-k>', ":m '<-4<cr>gv=gv", { desc = 'Move Up' })
|