From 51fb1aec9dc7a7cd89a4ff8820dd69392c401683 Mon Sep 17 00:00:00 2001 From: Jason Hilder Date: Fri, 12 Jun 2026 08:42:11 +0200 Subject: [PATCH] Better binds and terminal support --- config/nvim/init.lua | 9 ++--- config/nvim/lua/terminal/init.lua | 58 +++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 config/nvim/lua/terminal/init.lua diff --git a/config/nvim/init.lua b/config/nvim/init.lua index 8c808d0..d3e9660 100644 --- a/config/nvim/init.lua +++ b/config/nvim/init.lua @@ -67,13 +67,12 @@ vim.cmd.colorscheme('vague') -- Lsp specific, uses nvim-lspconfigs with the below vim.lsp.enable({ "gopls", "ols" }) map("n", "gd", ":lua vim.lsp.buf.definition()") -map("n", "ld", ":lua vim.diagnostic.open_float()") -map("n", "lr", ":lua vim.lsp.buf.rename()") -map("n", "la", ":lua vim.lsp.buf.code_action()") +map("n", "gr", ":lua vim.lsp.buf.rename()") +map("n", "ga", ":lua vim.lsp.buf.code_action()") require("fzf-lua").setup({}) map("n", "", ":FzfLua files") -map("n", "", ":FzfLua buffers") +map("n", "", ":FzfLua buffers") map("n", "", ":FzfLua diagnostics_workspace") map("n", "", ":FzfLua live_grep") map("n", "", ":FzfLua grep_curbuf") @@ -109,3 +108,5 @@ vim.api.nvim_create_autocmd("BufWritePre", { vim.fn.setpos(".", save_cursor) end, }) + +require("terminal") diff --git a/config/nvim/lua/terminal/init.lua b/config/nvim/lua/terminal/init.lua new file mode 100644 index 0000000..1a362d8 --- /dev/null +++ b/config/nvim/lua/terminal/init.lua @@ -0,0 +1,58 @@ +local term_buf = nil + +local function open_term_split() + vim.cmd('botright vsplit') + local win = vim.api.nvim_get_current_win() + if term_buf and vim.api.nvim_buf_is_valid(term_buf) then + vim.api.nvim_win_set_buf(win, term_buf) + else + vim.cmd('terminal') + term_buf = vim.api.nvim_get_current_buf() + end + vim.api.nvim_win_set_width(win, math.floor(vim.o.columns * 0.37)) + vim.cmd('startinsert') +end + +local function toggle_term() + -- Check if terminal is already visible in a window + for _, win in ipairs(vim.api.nvim_list_wins()) do + if vim.api.nvim_win_get_buf(win) == term_buf then + vim.api.nvim_win_close(win, false) + return + end + end + open_term_split() +end + +local function open_term_fullscreen() + if term_buf and vim.api.nvim_buf_is_valid(term_buf) then + vim.api.nvim_set_current_buf(term_buf) + else + vim.cmd('terminal') + term_buf = vim.api.nvim_get_current_buf() + end + vim.cmd('startinsert') +end + +local function prev_non_term_buf() + local cur = vim.api.nvim_get_current_buf() + local bufs = vim.fn.getbufinfo({ buflisted = 1 }) + local candidates = {} + for _, info in ipairs(bufs) do + if info.bufnr ~= cur and vim.bo[info.bufnr].buftype ~= 'terminal' then + table.insert(candidates, info) + end + end + if #candidates == 0 then + print('No previous non-terminal buffer') + return + end + table.sort(candidates, function(a, b) return a.lastused > b.lastused end) + vim.api.nvim_set_current_buf(candidates[1].bufnr) +end + +map('n', '', toggle_term, { desc = 'Toggle terminal split' }) +map('n', '', open_term_fullscreen, { desc = 'Open terminal fullscreen' }) +map('t', '', prev_non_term_buf, { desc = 'Exit terminal mode' }) +map('t', '', toggle_term, { desc = 'Toggle terminal split' }) +map('t', '', prev_non_term_buf, { desc = 'Exit terminal mode' })