NeoComposer.nvim
NeoComposer.nvim copied to clipboard
Neovim plugin that simplifies macros, enhancing productivity with harmony.
🎻 NeoComposer.nvim
🎵 Introduction
NeoComposer is a Neovim plugin that streamlines macro management and execution with a customizable Status Line Component and Telescope Extension.
🎹 Features
- View the status of your macros interactively with the status component
- Browse, search, and manage macros using the Telescope extension
- Delay playback to ensure proper macro execution
- Edit macros in an interactive buffer
- Queue, yank, and delete macros
- Stop macros during playback
🐔 Dependencies
🥚 Optional Dependencies
🔭 Telescope
Install the Telescope Extension:
require('telescope').load_extension('macros')
Launch the Telescope extension using the Telescope macros command:
:Telescope macros
| Keymap | Action |
|---|---|
yq |
Yank the currently selected macro, in human readable format (normal) |
<cr> |
Queue the currently selected macro (insert, normal) |
<c-d> |
Delete the currently selected macro (insert) |
d |
Delete the currently selected macro |
🚥 Status Line
NeoComposer provides an easy way to display the recording, playback, and delay status in your status line.

require('NeoComposer.ui').status_recording()
Lualine Config:
lualine_c = {
{ require('NeoComposer.ui').status_recording },
},
For event-driven statuslines such as heirline, Neocomposer
emits User autocmd events to notify the user of status changes.
| User Event | Trigger | Data |
|---|---|---|
| NeoComposerRecordingSet | When when starting or finishing recording a macro | { recording: boolean } |
| NeoComposerPlayingSet | When when starting or finishing playing a macro | { playing: boolean } |
| NeoComposerDelaySet | When when delay is set | { delay: boolean } |
{
provider = function(self)
return self.status or ""
end,
update = {
"User",
pattern = { "NeoComposerRecordingSet", "NeoComposerPlayingSet", "NeoComposerDelaySet" },
callback = function(self)
self.status = require("neocomposer.ui").status_recording()
end
}
}
🐢 Delay Timer
For complex macros over large counts, you can toggle a delay between macro playback using the ToggleDelay command:
:ToggleDelay

💭 Popup Menu
Use the toggle_macro_menu keybind <m-q> to open the interactive popup macro menu.

🔍 Macro Preview
As you cycle your available macros with the cycle_next: <c-n> and cycle_prev: <c-p> keybinds the queued macro
will be previewed in the buffer.

🪄 Usage
NeoComposer designates macro number 1 as queued for quick access and execution.
| Function | Keymap | Action |
|---|---|---|
play_macro |
Q |
Plays queued macro |
stop_macro |
cq |
Halts macro playback |
toggle_macro_menu |
<m-q> |
Toggles popup macro menu |
cycle_next |
<c-n> |
Cycles available macros forward |
cycle_prev |
<c-p> |
Cycles available macros backward |
toggle_record |
q |
Starts recording, press again to end recording |
yank_macro |
yq |
Yank the currently selected macro, in human readable format into the default register |
Edit your macros in a more comprehensive way with the EditMacros command:
:EditMacros
Clear the list of macros with the ClearNeoComposer command:
:ClearNeoComposer
📦 Installation
- Install via your favorite package manager.
{
"ecthelionvi/NeoComposer.nvim",
dependencies = { "kkharji/sqlite.lua" },
opts = {}
},
use {
"ecthelionvi/NeoComposer.nvim",
requires = { "kkharji/sqlite.lua" }
}
- Setup the plugin in your
init.lua. Skip this step if you are using lazy.nvim with opts set as above.
require("NeoComposer").setup()
🔧 Configuration
You can pass your config table into the setup() function or opts if you use lazy.nvim.
The available options:
| Option | Keymap | Action |
|---|---|---|
notify |
true |
Enable/Disable notifications |
delay_timer |
"150" |
Time in ms between macro playback when Delay Enabled |
status_bg |
"#16161e" |
Background color of status line component |
preview_fg |
"#ff9e64" |
Foreground color of macro preview text |
toggle_macro_menu |
<m-q> |
Toggles popup macro menu |
play_macro |
Q |
Play queued macro |
yank_macro |
yq |
Yank the currently selected macro, in human readable format into the default register |
stop_macro |
cq |
Halts macro playback |
toggle_record |
q |
Starts recording, press again to end recording |
cycle_next |
<c-n> |
Cycles available macros forward |
cycle_prev |
<c-p> |
Cycles available macros backward |
Default Config
local config = {
notify = true,
delay_timer = 150,
queue_most_recent = false,
window = {
width = 60,
height = 10,
border = "rounded",
winhl = {
Normal = "ComposerNormal",
},
},
colors = {
bg = "#16161e",
fg = "#ff9e64",
red = "#ec5f67",
blue = "#5fb3b3",
green = "#99c794",
},
keymaps = {
play_macro = "Q",
yank_macro = "yq",
stop_macro = "cq",
toggle_record = "q",
cycle_next = "<c-n>",
cycle_prev = "<c-p>",
toggle_macro_menu = "<m-q>",
},
}