toggleterm
This commit is contained in:
parent
7810e2af8d
commit
27105b9f60
6
init.lua
6
init.lua
|
|
@ -102,7 +102,7 @@ vim.g.have_nerd_font = true
|
|||
vim.o.number = true
|
||||
-- You can also add relative line numbers, to help with jumping.
|
||||
-- Experiment for yourself to see if you like it!
|
||||
-- vim.o.relativenumber = true
|
||||
vim.o.relativenumber = true
|
||||
|
||||
-- Enable mouse mode, can be useful for resizing splits for example!
|
||||
vim.o.mouse = 'a'
|
||||
|
|
@ -931,7 +931,7 @@ require('lazy').setup({
|
|||
-- cursor location to LINE:COLUMN
|
||||
---@diagnostic disable-next-line: duplicate-set-field
|
||||
statusline.section_location = function()
|
||||
return '%2l:%-2v'
|
||||
return '%2l:%-2v %P'
|
||||
end
|
||||
|
||||
-- ... and there is more!
|
||||
|
|
@ -984,7 +984,7 @@ require('lazy').setup({
|
|||
-- This is the easiest way to modularize your config.
|
||||
--
|
||||
-- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going.
|
||||
-- { import = 'custom.plugins' },
|
||||
{ import = 'custom.plugins' },
|
||||
--
|
||||
-- For additional information with loading, sourcing and examples see `:help lazy.nvim-🔌-plugin-spec`
|
||||
-- Or use telescope!
|
||||
|
|
|
|||
|
|
@ -1,24 +1,25 @@
|
|||
{
|
||||
"LuaSnip": { "branch": "master", "commit": "458560534a73f7f8d7a11a146c801db00b081df0" },
|
||||
"blink.cmp": { "branch": "main", "commit": "bae4bae0eedd1fa55f34b685862e94a222d5c6f8" },
|
||||
"conform.nvim": { "branch": "master", "commit": "973f3cb73887d510321653044791d7937c7ec0fa" },
|
||||
"fidget.nvim": { "branch": "main", "commit": "4ec7bed6c86b671ddde03ca1b227343cfa3e65fa" },
|
||||
"gitsigns.nvim": { "branch": "main", "commit": "736f51d2bb684c06f39a2032f064d7244f549981" },
|
||||
"blink.cmp": { "branch": "main", "commit": "327fff91fe6af358e990be7be1ec8b78037d2138" },
|
||||
"conform.nvim": { "branch": "master", "commit": "235dd79731c1dc51ec04abb4045cbc54727a172a" },
|
||||
"fidget.nvim": { "branch": "main", "commit": "3f5475949679953af6d78654db29b944fa826e6a" },
|
||||
"gitsigns.nvim": { "branch": "main", "commit": "20ad4419564d6e22b189f6738116b38871082332" },
|
||||
"guess-indent.nvim": { "branch": "main", "commit": "84a4987ff36798c2fc1169cbaff67960aed9776f" },
|
||||
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
|
||||
"lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" },
|
||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "844d247d998c2f9a6a3baad8bb9748edc55ce69f" },
|
||||
"lazy.nvim": { "branch": "main", "commit": "1ea3c4085785f460fb0e46d2fe1ee895f5f9e7c1" },
|
||||
"lazydev.nvim": { "branch": "main", "commit": "e28ce52fc7ff79fcb76f0e79ee6fb6182fca90b9" },
|
||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "2304ff65ecc8cb2afc2484de3e2ed9a407edf0b9" },
|
||||
"mason-tool-installer.nvim": { "branch": "main", "commit": "517ef5994ef9d6b738322664d5fdd948f0fdeb46" },
|
||||
"mason.nvim": { "branch": "main", "commit": "9e25c98d4826998460926f8c5c2284848d80ae89" },
|
||||
"mini.nvim": { "branch": "main", "commit": "03387f53f1cb8c6a8ba0798041c6aa3525ed11ba" },
|
||||
"nvim-lspconfig": { "branch": "master", "commit": "63a38440989c58e1f100373ab603fd24665bdc9a" },
|
||||
"mason.nvim": { "branch": "main", "commit": "ad7146aa61dcaeb54fa900144d768f040090bff0" },
|
||||
"mini.nvim": { "branch": "main", "commit": "14145d3769eacdb48aa1cfd21f1e244896a85f68" },
|
||||
"nvim-lspconfig": { "branch": "master", "commit": "e5c61b02f33b5c6538be25b2696b33b4cc91e667" },
|
||||
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
|
||||
"nvim-web-devicons": { "branch": "master", "commit": "3362099de3368aa620a8105b19ed04c2053e38c0" },
|
||||
"nvim-web-devicons": { "branch": "master", "commit": "b8221e42cf7287c4dcde81f232f58d7b947c210d" },
|
||||
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
|
||||
"telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" },
|
||||
"telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
|
||||
"telescope.nvim": { "branch": "master", "commit": "b4da76be54691e854d3e0e02c36b0245f945c2c7" },
|
||||
"todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" },
|
||||
"tokyonight.nvim": { "branch": "main", "commit": "057ef5d260c1931f1dffd0f052c685dcd14100a3" },
|
||||
"which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" }
|
||||
"todo-comments.nvim": { "branch": "main", "commit": "19d461ddd543e938eb22505fb03fa878800270b6" },
|
||||
"toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" },
|
||||
"tokyonight.nvim": { "branch": "main", "commit": "e63c42a42b11cd6225f009dd949b9ee0fccc15ef" },
|
||||
"which-key.nvim": { "branch": "main", "commit": "b4177e3eaf15fe5eb8357ebac2286d488be1ed00" }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
# Custom ToggleTerm Setup
|
||||
|
||||
Quick notes on the terminal experience provided by `lua/custom/plugins/toggleterm.lua`.
|
||||
|
||||
## Highlights
|
||||
- Floating terminals sized responsively to the current UI (`<C-\>` or `<leader>tf`).
|
||||
- Dedicated splits: `<leader>th` (horizontal) and `<leader>tv` (vertical).
|
||||
- Terminal picker `<leader>tt`, plus a pre-configured floating `lazygit` on `<leader>tg`.
|
||||
- Send code to the primary terminal with `<leader>ts` (line or visual selection).
|
||||
- Terminal windows inherit familiar navigation (`<Esc>`, `jk`, `<C-hjkl>`) automatically.
|
||||
|
||||
## Tips
|
||||
- Use counts (`2ToggleTerm`, `3ToggleTerm`) when you want to retarget a specific layout.
|
||||
- `TermExec cmd="npm run test"` reuses the floating terminal without stealing focus.
|
||||
- Update sizing or borders in `float_opts` if your display or font spacing demands it.
|
||||
|
|
@ -2,4 +2,8 @@
|
|||
-- I promise not to create any merge conflicts in this directory :)
|
||||
--
|
||||
-- See the kickstart.nvim README for more information
|
||||
return {}
|
||||
local plugins = {}
|
||||
|
||||
vim.list_extend(plugins, require('custom.plugins.toggleterm'))
|
||||
|
||||
return plugins
|
||||
|
|
|
|||
|
|
@ -0,0 +1,128 @@
|
|||
local function clamp(value, min_value, max_value)
|
||||
assert(min_value <= max_value, 'min_value must be <= max_value')
|
||||
return math.max(min_value, math.min(value, max_value))
|
||||
end
|
||||
|
||||
return {
|
||||
{
|
||||
'akinsho/toggleterm.nvim',
|
||||
version = '*',
|
||||
event = 'VeryLazy',
|
||||
cmd = {
|
||||
'ToggleTerm',
|
||||
'ToggleTermToggleAll',
|
||||
'TermExec',
|
||||
'TermSelect',
|
||||
'ToggleTermSendCurrentLine',
|
||||
'ToggleTermSendVisualSelection',
|
||||
},
|
||||
opts = function()
|
||||
return {
|
||||
size = function(term)
|
||||
if term.direction == 'horizontal' then
|
||||
return clamp(math.floor(vim.o.lines * 0.28), 10, math.floor(vim.o.lines * 0.45))
|
||||
elseif term.direction == 'vertical' then
|
||||
return clamp(math.floor(vim.o.columns * 0.35), 40, math.floor(vim.o.columns * 0.6))
|
||||
end
|
||||
return 20
|
||||
end,
|
||||
open_mapping = { [[<C-\>]] },
|
||||
shade_terminals = true,
|
||||
shading_factor = -12,
|
||||
start_in_insert = true,
|
||||
insert_mappings = true,
|
||||
terminal_mappings = true,
|
||||
persist_size = true,
|
||||
persist_mode = true,
|
||||
direction = 'float',
|
||||
close_on_exit = true,
|
||||
auto_scroll = true,
|
||||
float_opts = {
|
||||
border = 'curved',
|
||||
winblend = 0,
|
||||
width = function()
|
||||
return clamp(math.floor(vim.o.columns * 0.9), 80, vim.o.columns - 2)
|
||||
end,
|
||||
height = function()
|
||||
return clamp(math.floor(vim.o.lines * 0.85), 20, vim.o.lines - 2)
|
||||
end,
|
||||
title_pos = 'center',
|
||||
},
|
||||
}
|
||||
end,
|
||||
config = function(_, opts)
|
||||
local toggleterm = require('toggleterm')
|
||||
toggleterm.setup(opts)
|
||||
|
||||
local TERM_FLOAT = 1
|
||||
local TERM_HORIZONTAL = 2
|
||||
local TERM_VERTICAL = 3
|
||||
local TERM_LAZYGIT = 10
|
||||
|
||||
local function toggle_float()
|
||||
toggleterm.toggle(TERM_FLOAT, nil, nil, 'float')
|
||||
end
|
||||
|
||||
local function toggle_horizontal()
|
||||
toggleterm.toggle(TERM_HORIZONTAL, nil, nil, 'horizontal')
|
||||
end
|
||||
|
||||
local function toggle_vertical()
|
||||
toggleterm.toggle(TERM_VERTICAL, nil, nil, 'vertical')
|
||||
end
|
||||
|
||||
local lazygit = nil
|
||||
if vim.fn.executable('lazygit') == 1 then
|
||||
local Terminal = require('toggleterm.terminal').Terminal
|
||||
lazygit = Terminal:new {
|
||||
cmd = 'lazygit',
|
||||
count = TERM_LAZYGIT,
|
||||
direction = 'float',
|
||||
hidden = true,
|
||||
float_opts = {
|
||||
border = 'curved',
|
||||
},
|
||||
}
|
||||
else
|
||||
vim.notify('lazygit not found in PATH. Install it to use <leader>tg', vim.log.levels.WARN)
|
||||
end
|
||||
|
||||
local map = vim.keymap.set
|
||||
|
||||
map({ 'n', 'i', 't' }, '<C-`>', toggle_float, { desc = 'Toggle floating terminal' })
|
||||
map('n', '<leader>tf', toggle_float, { desc = '[T]erminal float' })
|
||||
map('n', '<leader>th', toggle_horizontal, { desc = '[T]erminal horizontal' })
|
||||
map('n', '<leader>tv', toggle_vertical, { desc = '[T]erminal vertical' })
|
||||
map('n', '<leader>tt', '<cmd>TermSelect<CR>', { desc = '[T]erminal picker' })
|
||||
map('n', '<leader>tg', function()
|
||||
if lazygit then
|
||||
lazygit:toggle()
|
||||
else
|
||||
vim.notify('lazygit is not available', vim.log.levels.WARN)
|
||||
end
|
||||
end, { desc = '[T]erminal lazygit' })
|
||||
map('n', '<leader>ts', function()
|
||||
vim.cmd.ToggleTermSendCurrentLine(TERM_FLOAT)
|
||||
end, { desc = '[T]erminal [s]end line' })
|
||||
|
||||
map('v', '<leader>ts', function()
|
||||
vim.cmd.ToggleTermSendVisualSelection(TERM_FLOAT)
|
||||
end, { desc = '[T]erminal [s]end selection' })
|
||||
|
||||
local term_augroup = vim.api.nvim_create_augroup('custom-toggleterm', { clear = true })
|
||||
vim.api.nvim_create_autocmd('TermOpen', {
|
||||
group = term_augroup,
|
||||
pattern = 'term://*toggleterm#*',
|
||||
callback = function()
|
||||
local term_opts = { buffer = 0, silent = true }
|
||||
vim.keymap.set('t', '<Esc>', [[<C-\><C-n>]], term_opts)
|
||||
vim.keymap.set('t', 'jk', [[<C-\><C-n>]], term_opts)
|
||||
vim.keymap.set('t', '<C-h>', [[<Cmd>wincmd h<CR>]], term_opts)
|
||||
vim.keymap.set('t', '<C-j>', [[<Cmd>wincmd j<CR>]], term_opts)
|
||||
vim.keymap.set('t', '<C-k>', [[<Cmd>wincmd k<CR>]], term_opts)
|
||||
vim.keymap.set('t', '<C-l>', [[<Cmd>wincmd l<CR>]], term_opts)
|
||||
end,
|
||||
})
|
||||
end,
|
||||
},
|
||||
}
|
||||
Loading…
Reference in New Issue