akinsho / akinsho/toggleterm.nvim

Question :: (Re)-focus on open terminal window using it's count number

Offen
#42 6 Kommentare 3 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
bug enhancement
Vorherrschende Sprache
Lua
Sterne
5.6k
Forks
206
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

First of all, excellent plugin and thanks a million for putting effort in this (and other) plugins. I'm using nvim-toggleterm daily in my workflow with a few custom functions for my specific preferences.

One thing I haven't been able to figure out yet is how to navigate to a terminal window based on it's count number, regardless if the terminal window is already open (but not focused) or not opened (anymore).

- If the terminal window hasn't been opened yet or if I have previously closed the terminal window (but left it running in the background), i'm fine using `:toggle` to open the terminal window (again). However, if I focus on a non-terminal window and use `:toggle` to refer to the specific terminal window to focus on, it closes the already open terminal window and errors out with `Failed to close window: win id - [0-9]{1,4} does not exist` (mind the in-place regex).

I can of course move to the terminal window using, for instance, `2wincmd w`, or whatever number the window got assigned. It however requires me to look at the statusline to find out the window number to determine which one i'll have to move to, which obviously is less optimal than it could be ;-).

Is there a way to refocus on an already open terminal window by referring to it's number (set using `count = [0-9]+`) making use of an nvim-toggleterm function or similar ? This way I can hook a keymapping to it, preferably the same keymapping I already use to toggle it so I can keep using one keymapping per function.

For convenience, the nvim-toggleterm snippet i'm using with `NVIM v0.5.0-dev+61aefaf29` on MacOS here below:

nvim-toggleterm Lua

```lua
require('toggleterm').setup {
close_on_exit = true,
float_opts = {
border = 'curved'
},
persist_size = false
}

local terminal_default_float = require('toggleterm.terminal').Terminal:new({
count = 50,
direction = 'float',
on_open = function(term)
vim.api.nvim_buf_set_keymap(term.bufnr, 'n', 'q', 'close', { noremap = true, silent = true })
vim.api.nvim_buf_set_keymap(term.bufnr, 't', '', 'close', { noremap = true })
vim.wo.cursorcolumn = false
vim.wo.cursorline = false
vim.cmd('VimadeBufDisable')
vim.cmd("startinsert!")
end,
on_close = function(term)
vim.cmd("quit!")
end
})

local terminal_horizontal_one = require('toggleterm.terminal').Terminal:new({
count = 11,
direction = 'horizontal',
on_open = function(term)
vim.api.nvim_buf_set_keymap(term.bufnr, 'n', 'q', 'close', { noremap = true, silent = true })
vim.api.nvim_buf_set_keymap(term.bufnr, 't', '', 'close', { noremap = true, silent = true })
vim.api.nvim_buf_set_keymap(term.bufnr, 't', '', '', { noremap = true, silent = true })
vim.wo.cursorcolumn = false
vim.wo.cursorline = false
vim.cmd('VimadeBufDisable')
vim.cmd("startinsert!")
end,
on_close = function(term)
vim.cmd("quit!")
end
})

local terminal_horizontal_two = require('toggleterm.terminal').Terminal:new({
count = 12,
direction = 'horizontal',
on_open = function(term)
vim.api.nvim_buf_set_keymap(term.bufnr, 'n', 'q', 'close', { noremap = true, silent = true })
vim.api.nvim_buf_set_keymap(term.bufnr, 't', '', 'close', { noremap = true, silent = true })
vim.api.nvim_buf_set_keymap(term.bufnr, 't', '', '', { noremap = true, silent = true })
vim.wo.cursorcolumn = false
vim.wo.cursorline = false
vim.cmd('VimadeBufDisable')
vim.cmd("startinsert!")
end,
on_close = function(term)
vim.cmd("quit!")
end
})

local terminal_horizontal_three = require('toggleterm.terminal').Terminal:new({
count = 13,
direction = 'horizontal',
on_open = function(term)
vim.api.nvim_buf_set_keymap(term.bufnr, 'n', 'q', 'close', { noremap = true, silent = true })
vim.api.nvim_buf_set_keymap(term.bufnr, 't', '', 'close', { noremap = true, silent = true })
vim.api.nvim_buf_set_keymap(term.bufnr, 't', '', '', { noremap = true, silent = true })
vim.wo.cursorcolumn = false
vim.wo.cursorline = false
vim.cmd('VimadeBufDisable')
vim.cmd("startinsert!")
end,
on_close = function(term)
vim.cmd("quit!")
end
})

function _terminal_default_float_toggle()
terminal_default_float:toggle()
end

function _terminal_horizontal_one_toggle()
terminal_horizontal_one:toggle()
end

function _terminal_horizontal_two_toggle()
terminal_horizontal_two:toggle()
end

function _terminal_horizontal_three_toggle()
terminal_horizontal_three:toggle()
end

local terminal_tig = require('toggleterm.terminal').Terminal:new({
cmd = 'tig',
count = 60,
direction = 'float',
on_open = function(term)
vim.api.nvim_buf_set_keymap(term.bufnr, 'n', 'q', 'close', { noremap = true, silent = true })
vim.api.nvim_buf_set_keymap(term.bufnr, 't', '', 'close', { noremap = true })
vim.wo.cursorcolumn = false
vim.wo.cursorline = false
vim.cmd('VimadeBufDisable')
vim.cmd("startinsert!")
end,
on_close = function(term)
vim.cmd("quit!")
end
})

local terminal_lazygit = require('toggleterm.terminal').Terminal:new({
cmd = 'lazygit',
count = 61,
direction = 'float',
on_open = function(term)
vim.api.nvim_buf_set_keymap(term.bufnr, 'n', 'q', 'close', { noremap = true, silent = true })
vim.api.nvim_buf_set_keymap(term.bufnr, 't', '', 'close', { noremap = true })
vim.wo.cursorcolumn = false
vim.wo.cursorline = false
vim.cmd('VimadeBufDisable')
vim.cmd("startinsert!")
end,
on_close = function(term)
vim.cmd("quit!")
end
})

local terminal_k9s = require('toggleterm.terminal').Terminal:new({
cmd = 'k9s',
count = 62,
direction = 'float',
on_open = function(term)
vim.api.nvim_buf_set_keymap(term.bufnr, 'n', 'q', 'close', { noremap = true, silent = true })
vim.api.nvim_buf_set_keymap(term.bufnr, 't', '', 'close', { noremap = true })
vim.wo.cursorcolumn = false
vim.wo.cursorline = false
vim.cmd('VimadeBufDisable')
vim.cmd("startinsert!")
end,
on_close = function(term)
vim.cmd("quit!")
end
})

function _terminal_tig_toggle()
terminal_tig:toggle()
end

function _terminal_lazygit_toggle()
terminal_lazygit:toggle()
end

function _terminal_k9s_toggle()
terminal_k9s:toggle()
end
```

Used keymapping references

```lua
lua _terminal_horizontal_one_toggle()
lua _terminal_horizontal_two_toggle()
lua _terminal_horizontal_three_toggle()
lua _terminal_default_float_toggle()
lua _terminal_k9s_toggle()
lua _terminal_lazygit_toggle()
lua _terminal_tig_toggle
```

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.