63 lines
1.7 KiB
Lua
63 lines
1.7 KiB
Lua
local term_group = vim.api.nvim_create_augroup('custom-term-open', { clear = true })
|
|
vim.api.nvim_create_autocmd('TermOpen', {
|
|
group = term_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,
|
|
})
|
|
|
|
-- Close all terminal buffers before quitting
|
|
vim.api.nvim_create_autocmd('QuitPre', {
|
|
group = vim.api.nvim_create_augroup('shoutoff_terminals', { clear = true }),
|
|
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,
|
|
})
|
|
|
|
-- Insert when re-entering a terminal window (after switching back)
|
|
vim.api.nvim_create_autocmd('BufEnter', {
|
|
group = term_group,
|
|
pattern = 'term://*',
|
|
callback = function()
|
|
if vim.bo.buftype == 'terminal' and vim.fn.mode() ~= 'i' then
|
|
vim.cmd.startinsert()
|
|
end
|
|
end,
|
|
})
|
|
|
|
local function open_default()
|
|
vim.cmd('terminal')
|
|
end
|
|
|
|
local function open_relative()
|
|
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
|
|
|
|
local function open_split()
|
|
vim.cmd('new')
|
|
vim.cmd('wincmd J')
|
|
vim.api.nvim_win_set_height(0, 12)
|
|
vim.wo.winfixheight = true
|
|
vim.cmd('term')
|
|
end
|
|
|
|
local function open_vertical()
|
|
vim.cmd('vsplit')
|
|
vim.cmd('term')
|
|
end
|
|
|
|
vim.api.nvim_create_user_command('TermDefault', open_default, {})
|
|
vim.api.nvim_create_user_command('TermRelative', open_relative, {})
|
|
vim.api.nvim_create_user_command('TermSplit', open_split, {})
|
|
vim.api.nvim_create_user_command('TermVSplit', open_vertical, {})
|