65 lines
2.0 KiB
Lua
65 lines
2.0 KiB
Lua
-- base
|
||
G.map({
|
||
{ 'n', '<leader>nh', ':nohlsearch<CR>' },
|
||
{ 'n', '<leader>rp', ':%s/' },
|
||
|
||
{ 'v', 'L', '$' },
|
||
{ 'v', 'H', '^' },
|
||
{ 'n', 'L', '$' },
|
||
{ 'n', 'H', '^' },
|
||
{ 'v', '>', '>gv' },
|
||
{ 'v', '<', '<gv' },
|
||
|
||
{ 'n', '>', '>>' },
|
||
{ 'n', '<', '<<' },
|
||
{ 'n', '?', ':set hlsearch<CR>?' },
|
||
{ 'n', '/', ':set hlsearch<CR>/' },
|
||
|
||
{ 'n', '<A-l>', ':tabn<CR>' },
|
||
{ 'n', '<A-h>', ':tabp<CR>' },
|
||
|
||
{ 'n', '<c-j>', '<c-w>j' },
|
||
{ 'n', '<c-h>', '<c-w>h' },
|
||
{ 'n', '<c-k>', '<c-w>k' },
|
||
{ 'n', '<c-l>', '<c-w>l' },
|
||
|
||
{ 'n', '<c-c>', ':q<CR>' },
|
||
{ 'n', '<c-S>', ':w !sudo tee %<CR>' },
|
||
{ 'n', '<c-q>', ':q!<CR>' },
|
||
{ 'v', '<cs-y>', '"+y' },
|
||
|
||
{ 'n', '<leader>y', 'ggyG' },
|
||
{ 'n', '<leader>p', 'ggpG' },
|
||
{ 'n', '<leader>v', 'ggVG' },
|
||
|
||
{ 'n', '<up>', ':res -5<CR>' },
|
||
{ 'n', '<down>', ':res +5<CR>' },
|
||
{ 'n', '<left>', ':vertical resize -5<CR>' },
|
||
{ 'n', '<right>', ':vertical resize +5<CR>' },
|
||
})
|
||
|
||
-- 终端 / Reasonix:横屏→右侧(45%屏宽),竖屏→下方(40%屏高),持久化 buffer(按 c-t/c-i 切换显隐)
|
||
do
|
||
local terms = {} -- 缓存,复用同一个终端实例
|
||
|
||
local function split_term(cmd)
|
||
local ui = vim.api.nvim_list_uis()[1]
|
||
local tall = ui.height > ui.width
|
||
local name = cmd or '__shell__'
|
||
if not terms[name] or not terms[name]:is_open() then
|
||
terms[name] = require('toggleterm.terminal').Terminal:new({
|
||
direction = tall and 'horizontal' or 'vertical',
|
||
cmd = cmd,
|
||
size = tall and math.floor(ui.height * 0.4) or math.floor(ui.width * 0.45),
|
||
})
|
||
end
|
||
terms[name]:toggle()
|
||
end
|
||
|
||
G.map({
|
||
{ 'n', '<c-t>', function() split_term() end, { noremap = true } },
|
||
{ 'i', '<c-t>', function() split_term() end, { noremap = true } },
|
||
{ 'n', '<C-i>', function() split_term('reasonix') end, { noremap = true } },
|
||
})
|
||
end
|