local api = vim.api local au = api.nvim_create_autocmd local group = api.nvim_create_augroup('triimd.term', { clear = true }) -- Custom terminal au('TermOpen', { group = group, callback = function() vim.opt_local.number = false vim.opt_local.relativenumber = false vim.opt_local.scrolloff = 0 vim.bo.filetype = 'terminal' vim.cmd.startinsert() end, }) -- Insert when re-entering a terminal window (after switching back) au('BufEnter', { group = group, pattern = 'term://*', callback = function() if vim.bo.buftype == 'terminal' and vim.fn.mode() ~= 'i' then vim.cmd.startinsert() end end, }) -- Close all terminal buffers before quitting au('QuitPre', { group = group, callback = function() for _, buf in ipairs(vim.api.nvim_list_bufs()) do if vim.api.nvim_buf_is_loaded(buf) and vim.bo[buf].buftype == 'terminal' then vim.api.nvim_buf_delete(buf, { force = true }) end end end, }) local commands = { TermDefault = function() vim.cmd('terminal') end, TermRelative = function() local shell = vim.o.shell or 'zsh' local dir = vim.fn.expand('%:p:h') vim.cmd(string.format('edit term://%s//%s', dir, shell)) end, TermSplit = function() vim.cmd('new') vim.cmd('wincmd J') vim.api.nvim_win_set_height(0, 12) vim.wo.winfixheight = true vim.cmd('term') end, TermVSplit = function() vim.cmd('vsplit') vim.cmd('term') end, } for name, fn in pairs(commands) do vim.api.nvim_create_user_command(name, fn, {}) end