-- base G.map({ { 'n', 'nh', ':nohlsearch' }, { 'n', 'rp', ':%s/' }, { 'v', 'L', '$' }, { 'v', 'H', '^' }, { 'n', 'L', '$' }, { 'n', 'H', '^' }, { 'v', '>', '>gv' }, { 'v', '<', '', '>>' }, { 'n', '<', '<<' }, { 'n', '?', ':set hlsearch?' }, { 'n', '/', ':set hlsearch/' }, { 'n', '', ':tabn' }, { 'n', '', ':tabp' }, { 'n', '', 'j' }, { 'n', '', 'h' }, { 'n', '', 'k' }, { 'n', '', 'l' }, { 'n', '', ':q' }, { 'n', '', ':w !sudo tee %' }, { 'n', '', ':q!' }, { 'v', '', '"+y' }, { 'n', 'y', 'ggyG' }, { 'n', 'p', 'ggpG' }, { 'n', 'v', 'ggVG' }, { 'n', '', ':res -5' }, { 'n', '', ':res +5' }, { 'n', '', ':vertical resize -5' }, { 'n', '', ':vertical resize +5' }, }) -- 终端 / 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', '', function() split_term() end, { noremap = true } }, { 'i', '', function() split_term() end, { noremap = true } }, { 'n', '', function() split_term('reasonix') end, { noremap = true } }, }) end