129 lines
3.5 KiB
Lua
129 lines
3.5 KiB
Lua
-- Helper functions
|
|
local function map(mode, lhs, rhs)
|
|
vim.keymap.set(mode, lhs, rhs, { silent = true })
|
|
end
|
|
|
|
local function cmd(str)
|
|
return '<cmd>' .. str .. '<CR>'
|
|
end
|
|
|
|
-- QOL
|
|
map('i', 'jk', '<Esc>')
|
|
map('i', '<C-c>', '<Esc>')
|
|
map('n', '<Esc>', cmd('nohlsearch'))
|
|
map('n', 'q:', '<nop>')
|
|
|
|
vim.keymap.set('n', 'J', 'mzJ`z')
|
|
vim.keymap.set('n', 'n', 'nzzzv')
|
|
vim.keymap.set('n', 'N', 'Nzzzv')
|
|
|
|
vim.keymap.set('x', 'J', ":m '>+1<CR>gv=gv")
|
|
vim.keymap.set('x', 'K', ":m '<-2<CR>gv=gv")
|
|
|
|
vim.keymap.set('n', '<leader>s', [[:%s/\<<C-r><C-w>\>/<C-r><C-w>/g<Left><Left><Left>]])
|
|
|
|
-- Scroll
|
|
local function scroll(cmd)
|
|
local count = vim.v.count
|
|
local height = vim.api.nvim_win_get_height(0)
|
|
vim.opt_local.scroll = math.max(1, math.min(count > 0 and count or 20, height))
|
|
vim.cmd.normal({ vim.api.nvim_replace_termcodes(cmd, true, false, true), bang = true })
|
|
end
|
|
|
|
map('n', '<C-d>', function()
|
|
scroll('<C-d>')
|
|
end)
|
|
|
|
map('n', '<C-u>', function()
|
|
scroll('<C-u>')
|
|
end)
|
|
|
|
-- Easy to use registers
|
|
map('x', '<leader>p', '"_dP')
|
|
map({ 'n', 'x' }, '<leader>y', '"+y')
|
|
map('n', '<leader>Y', '"+y$')
|
|
map({ 'n', 'x' }, '<leader>d', '"_d')
|
|
map({ 'n', 'x' }, 'x', '"_x')
|
|
|
|
-- Window navigation
|
|
map('n', '<C-h>', '<C-w>h')
|
|
map('n', '<C-l>', '<C-w>l')
|
|
map('n', '<C-j>', '<C-w>j')
|
|
map('n', '<C-k>', '<C-w>k')
|
|
map('n', '<A-h>', cmd('vertical resize -2'))
|
|
map('n', '<A-l>', cmd('vertical resize +2'))
|
|
map('n', '<A-j>', cmd('resize +2'))
|
|
map('n', '<A-k>', cmd('resize -2'))
|
|
|
|
-- Tab management
|
|
map('n', ']t', cmd('tabnext'))
|
|
map('n', '[t', cmd('tabprevious'))
|
|
map('n', '<leader>t', '<nop>')
|
|
map('n', '<leader>tt', cmd('tabnew'))
|
|
map('n', '<leader>tn', cmd('tabnew'))
|
|
map('n', '<leader>tc', cmd('tabclose'))
|
|
map('n', '<Leader>tl', cmd('tabmove +1'))
|
|
map('n', '<Leader>th', cmd('tabmove -1'))
|
|
for i = 1, 9 do
|
|
map('n', string.format('<Leader>t%d', i), string.format('%dgt', i))
|
|
end
|
|
|
|
-- Buffer management
|
|
map('n', ']b', cmd('bnext'))
|
|
map('n', '[b', cmd('bprevious'))
|
|
map('n', '<leader>bl', cmd('ls'))
|
|
map('n', '<leader>bd', cmd(':bp | bd #'))
|
|
map('n', '<leader>bo', cmd('%bd|e#')) -- close all except current
|
|
map('n', '<leader>bb', '<C-^>') -- toggle between buffers
|
|
|
|
-- Terminal
|
|
map('n', '<leader>xx', cmd('TermDefault'))
|
|
map('n', '<leader>xr', cmd('TermRelative'))
|
|
map('n', '<leader>xs', cmd('TermSplit'))
|
|
map('n', '<leader>xv', cmd('TermVSplit'))
|
|
map('t', '<Esc>', '<C-\\><C-n>')
|
|
map('t', '<C-w>h', [[<C-\><C-n><C-w>h]])
|
|
map('t', '<C-w>j', [[<C-\><C-n><C-w>j]])
|
|
map('t', '<C-w>k', [[<C-\><C-n><C-w>k]])
|
|
map('t', '<C-w>l', [[<C-\><C-n><C-w>l]])
|
|
map('t', '<C-w>c', [[<C-\><C-n><cmd>bd!<CR>]])
|
|
map('t', '<C-w><C-w>', [[<C-\><C-n><C-w>w]])
|
|
|
|
-- File explorer
|
|
map('n', '<leader>e', cmd('NvimTreeToggle'))
|
|
map('n', '<leader>E', cmd('NvimTreeOpen'))
|
|
|
|
-- Diagnostics
|
|
map('n', ']d', function()
|
|
vim.diagnostic.jump({
|
|
count = 1,
|
|
on_jump = function()
|
|
vim.diagnostic.open_float()
|
|
end,
|
|
})
|
|
end)
|
|
map('n', '[d', function()
|
|
vim.diagnostic.jump({
|
|
count = -1,
|
|
on_jump = function()
|
|
vim.diagnostic.open_float()
|
|
end,
|
|
})
|
|
end)
|
|
map('n', '<leader>q', vim.diagnostic.setloclist)
|
|
map('n', '<leader>d', vim.diagnostic.open_float)
|
|
|
|
map('n', 'K', vim.lsp.buf.hover)
|
|
map('n', 'gd', vim.lsp.buf.definition)
|
|
map('n', 'gr', vim.lsp.buf.references)
|
|
map('n', '<C-s>', vim.lsp.buf.signature_help)
|
|
|
|
-- Git shortcut
|
|
vim.keymap.set('n', '<leader>G', function()
|
|
vim.cmd('Gwrite') -- stage current worktree file
|
|
vim.cmd('Git') -- return to Fugitive status
|
|
vim.cmd('only') -- optional: close old diff panes
|
|
vim.cmd('normal! ]/') -- next file
|
|
vim.cmd('normal! dv') -- open vertical diff
|
|
end, { desc = 'Fugitive stage file and diff next' })
|