A Neovim plugin that colorizes multiple search terms with multiple distinct colors for better visual tracking.
kaleidosearch.mp4
- Highlight multiple search terms with different colors
- Navigate between matches using standard search commands (n/N)
- Add words incrementally without losing existing highlights
- Add word under cursor with a single keymap AND remove it (toggle)
- Add visual selection to highlights
- dot-repeatable: Hit
.
at any point and the colors will change
Using your favorite plugin manager:
{
"hamidi-dev/kaleidosearch.nvim",
dependencies = {
"tpope/vim-repeat", -- optional for dot-repeatability
"stevearc/dressing.nvim", -- optional for nice input
},
config = function()
require("kaleidosearch").setup({
-- optional configuration
})
end,
}
use {
'hamidi-dev/kaleidosearch.nvim',
requires = {
'tpope/vim-repeat', -- optional for dot-repeatability
'stevearc/dressing.nvim', -- optional for nice input
},
config = function()
require('kaleidosearch').setup({
-- optional configuration
})
end
}
Command | Description |
---|---|
:Kaleidosearch word1 word2 | Highlight specified words with colors |
:KaleidosearchClear | Clear all highlighted words |
:KaleidosearchAddWord | Add a new word to existing highlights |
:KaleidosearchAddCursorWord | Add word under cursor to existing highlights |
Keymap | Action |
---|---|
<leader>cs | Open prompt for words to colorize |
<leader>cc | Clear all highlighted words (reset to clean slate) |
<leader>cn | Add a new word to existing highlights |
<leader>ca | Add word under cursor to existing highlights |
require("kaleidosearch").setup({
highlight_group_prefix = "WordColor_", -- Prefix for highlight groups
case_sensitive = false, -- Case sensitivity for matching
whole_word_match = false, -- Only match whole words, not substrings
keymaps = {
enabled = true, -- Set to false to disable default keymaps
open = "<leader>cs", -- Open input prompt for search
clear = "<leader>cc", -- Clear highlights (reset to clean slate)
add_new_word = "<leader>cn", -- Add a new word to existing highlights
add_cursor_word = "<leader>ca", -- Add word under cursor to highlights OR current visual selection
opts = {
noremap = true,
silent = true,
}
}
})
This plugin includes unit tests using Plenary.nvim. To run the tests:
- Use the provided script (it will install Plenary.nvim if needed):
./scripts/run_tests.sh
- Or if you’re inside Neovim with Plenary installed:
:PlenaryBustedDirectory test/ {minimal_init = 'test/minimal_init.lua'}
- PRs welcome 😃
- Ideas / issues welcome
MIT License