A Neovim plugin that provides a toggle-able VSCode-like terminal management experience, with a terminal panel at the bottom of the screen and a terminal list for easy switching, but with the benefits of key maps and Neovim.
-
Toggle-able terminal panel - Appears at the bottom of the screen when toggled
-
Multiple terminal instances - Create and manage multiple terminals
-
Terminal list sidebar - Shows all terminals with easy switching
-
Mouse support - Click on terminals in the list to switch
-
Dynamic keybindings - Number-based shortcuts (e.g.,
<leader>v1
,<leader>v2
) -
Terminal management - Create, rename, and delete terminals
-
Configurable - Customize height, width, keybindings, and appearance
-
Other Convenience Features
- gf/gF will open file paths in your main editor window instead of the terminal buffer
Using lazy.nvim:
{
"jfgordon2/vsterm.nvim",
opt = {
-- Optional configuration
height = 0.3, -- 30% of window height
default_name = "Terminal %d",
list_width = 30,
}
}
:VSTermToggle
- Toggle terminal panel:VSTermNew
- Create a new terminal:VSTermKill
- Kill the current terminal:VSTermRename <name>
- Rename the current terminal
<leader>vv
- Toggle terminal panel<leader>vn
- New terminal<leader>vk
- Kill current terminal<leader>vr
- Rename current terminal
require("vsterm").setup({
-- Height of the terminal window (percentage of total height)
height = 0.3,
-- Default name format for new terminals
default_name = "Terminal %d",
-- Shell to use (nil for default)
shell = nil,
-- Width of the terminal list (in characters)
list_width = 25,
-- Enable mouse support for terminal list
enable_mouse = true,
-- Key prefix for number-based terminal switching
-- Set to nil to disable number shortcuts
number_prefix = "<leader>v",
-- Custom key mappings
mappings = {
toggle = "<leader>vv",
new = "<leader>vn",
kill = "<leader>vk",
rename = "<leader>vr",
},
})
When number_prefix
is set (e.g., to "<leader>v"
), the plugin will automatically create keymaps for switching between terminals:
<leader>v1
- Switch to first terminal<leader>v2
- Switch to second terminal<leader>v3
- Switch to third terminal- etc...
These keymaps are dynamically updated as terminals are created and destroyed, always matching the order shown in the terminal list.
When enable_mouse
is set to true
, you can:
- Click on a terminal in the list to switch to it
- The active terminal is marked with a "▶" indicator
When the terminal list window is focused, you can use:
<Enter>
- Switch to the terminal under cursord
- Delete the terminal under cursorr
- Rename the terminal under cursorn
- Create a new terminal?
- Show help for terminal list commands- Mouse click - Switch to clicked terminal