{"id":24003433,"url":"https://github.com/axot017/multiterm.nvim","last_synced_at":"2025-07-13T23:33:01.349Z","repository":{"id":270807477,"uuid":"909033652","full_name":"Axot017/multiterm.nvim","owner":"Axot017","description":"A lightweight Neovim plugin for managing multiple terminal instances with key bindings.","archived":false,"fork":false,"pushed_at":"2025-04-29T05:14:01.000Z","size":26,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-14T10:03:17.701Z","etag":null,"topics":["nvim","nvim-plugin","vim"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Axot017.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-12-27T15:31:22.000Z","updated_at":"2025-04-29T05:14:05.000Z","dependencies_parsed_at":"2025-04-29T06:22:01.739Z","dependency_job_id":"07089405-ad39-4547-8f71-39d69534b5ab","html_url":"https://github.com/Axot017/multiterm.nvim","commit_stats":null,"previous_names":["axot017/multiterm.nvim"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Axot017/multiterm.nvim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Axot017%2Fmultiterm.nvim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Axot017%2Fmultiterm.nvim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Axot017%2Fmultiterm.nvim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Axot017%2Fmultiterm.nvim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Axot017","download_url":"https://codeload.github.com/Axot017/multiterm.nvim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Axot017%2Fmultiterm.nvim/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265220190,"owners_count":23729770,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nvim","nvim-plugin","vim"],"created_at":"2025-01-08T01:38:31.910Z","updated_at":"2025-07-13T23:33:01.341Z","avatar_url":"https://github.com/Axot017.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# multiterm.nvim\n\nA lightweight Neovim plugin for managing multiple terminal instances with key bindings.\n\n## Features\n\n- Create and manage multiple terminal instances within Neovim\n- Bind each terminal to a specific key for quick access\n- Toggle terminals on/off with a simple keystroke\n- Customize terminal window appearance\n\n## Installation\n\n### Using [vim-plug](https://github.com/junegunn/vim-plug)\n\n```vim\nPlug 'Axot017/multiterm.nvim'\n```\n\nThen run `:PlugInstall`\n\n### Using [packer.nvim](https://github.com/wbthomason/packer.nvim)\n\n```lua\nuse {\n  'Axot017/multiterm.nvim',\n  config = function()\n    require('multiterm').setup()\n  end\n}\n```\n\nThen run `:PackerSync`\n\n### Using [lazy.nvim](https://github.com/folke/lazy.nvim)\n\n```lua\n{\n  'Axot017/multiterm.nvim',\n  opts = {}\n}\n```\n\nThen run `:LazySync`\n\n## Configuration\n\n`multiterm.nvim` can be configured during setup:\n\n```lua\nrequire('multiterm').setup({\n  -- Logging level (1=DEBUG, 2=INFO, 3=WARN, 4=ERROR)\n  log_level = 4,\n\n  -- Terminal-specific key mappings\n  mappings = {\n    -- Mode-specific mappings\n    t = {\n      -- Key = action or {action = action, opts = {}}\n      [\"\u003cC-x\u003e\"] = \"\u003cC-\\\\\u003e\u003cC-n\u003e\",\n      [\"\u003cEsc\u003e\"] = {\n        action = \"\u003cC-\\\\\u003e\u003cC-n\u003e\",\n        opts = {desc = \"Exit terminal mode\"}\n      }\n    },\n    n = {\n      -- Normal mode mappings for terminal buffers\n      [\"q\"] = function() require('multiterm').close_active() end\n    }\n  },\n\n  -- Window configuration (can be a table or a function that returns a table)\n  window = {\n    relative = \"editor\",\n    width = 80,\n    height = 20,\n    style = \"minimal\",\n    border = \"rounded\",\n    row = 10,\n    col = 10,\n  }\n})\n```\n\n### Default Window Configuration\n\nBy default, the plugin creates a floating window at 80% of editor size, centered on screen:\n\n```lua\nwindow = function()\n  local default_width = math.floor(vim.o.columns * 0.8)\n  local default_height = math.floor(vim.o.lines * 0.8)\n\n  return {\n    relative = \"editor\",\n    width = default_width,\n    height = default_height,\n    style = \"minimal\",\n    border = \"rounded\",\n    row = math.floor((vim.o.lines - default_height) / 2),\n    col = math.floor((vim.o.columns - default_width) / 2),\n  }\nend\n```\n\n## Usage\n\n### API Functions\n\n| Function | Description |\n|----------|-------------|\n| `setup(opts)` | Configure the plugin with options |\n| `toggle(binding)` | Toggle terminal with specific binding |\n| `bind_toggle()` | Interactively bind a key to toggle a terminal |\n| `remove(binding)` | Remove terminal with specific binding |\n| `bind_remove()` | Interactively select a terminal to remove |\n| `remove_all()` | Remove all terminals |\n| `close_active()` | Close the currently active terminal |\n| `send_text(binding, text)` | Send text to a terminal with specific binding |\n| `send_selection(binding)` | Send visually selected text to a terminal with specific binding |\n| `bind_send_selection()` | Interactively bind a key to send visually selected text to a terminal |\n\n### Example Keymaps\n\nAdd these to your Neovim configuration:\n\n```lua\n-- Toggle a terminal bound to key 'g'\nvim.keymap.set('n', '\u003cleader\u003etg', function() require('multiterm').toggle('g') end)\n\n-- Interactively bind a key to a terminal\nvim.keymap.set('n', '\u003cleader\u003etb', function() require('multiterm').bind_toggle() end)\n\n-- Remove a terminal with binding 'g'\nvim.keymap.set('n', '\u003cleader\u003erg', function() require('multiterm').remove('g') end)\n\n-- Interactively remove a terminal\nvim.keymap.set('n', '\u003cleader\u003erb', function() require('multiterm').bind_remove() end)\n\n-- Remove all terminals\nvim.keymap.set('n', '\u003cleader\u003era', function() require('multiterm').remove_all() end)\n\n-- Close active terminal\nvim.keymap.set('n', '\u003cleader\u003etc', function() require('multiterm').close_active() end)\n\n-- Send text to a terminal with binding 'g'\nvim.keymap.set('n', '\u003cleader\u003esg', function() require('multiterm').send_text('g', 'echo \"Hello world\"\\n') end)\n\n-- Send visually selected text to a terminal with binding 'g'\nvim.keymap.set('v', '\u003cleader\u003esg', function() require('multiterm').send_selection('g') end)\n\n-- Interactively choose a terminal to send visually selected text to\nvim.keymap.set('v', '\u003cleader\u003esb', function() require('multiterm').bind_send_selection() end)\n```\n\n### Workflow Example\n\n1. Press `\u003cleader\u003etb` to bind a terminal\n2. Type a key (e.g., 'g') to associate with your terminal\n3. A new terminal will open\n4. Press `\u003cleader\u003etg` to toggle this terminal on/off\n5. Create more terminals with different bindings as needed\n\n### Vim Commands\n\nThe plugin also provides the following Vim commands:\n\n| Command | Description |\n|---------|-------------|\n| `:MultitermToggle \u003cbinding\u003e` | Toggle terminal with specific binding |\n| `:MultitermBindToggle` | Interactively bind a key to toggle a terminal |\n| `:MultitermRemove \u003cbinding\u003e` | Remove terminal with specific binding |\n| `:MultitermBindRemove` | Interactively select a terminal to remove |\n| `:MultitermRemoveAll` | Remove all terminals |\n| `:MultitermCloseActive` | Close the currently active terminal |\n| `:MultitermSendSelection \u003cbinding\u003e` | Send visually selected text to a terminal with specific binding |\n| `:MultitermBindSendSelection` | Interactively bind a key to send visually selected text to a terminal |\n\n## Health Check\n\nYou can check the health of the plugin by running:\n\n```\n:checkhealth multiterm\n```\n\nThis will verify:\n- Compatible Neovim version\n- Required features availability\n- Proper loading of configuration and utilities\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxot017%2Fmultiterm.nvim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faxot017%2Fmultiterm.nvim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxot017%2Fmultiterm.nvim/lists"}