Skip to content

hamidi-dev/kaleidosearch.nvim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kaleidosearch.nvim

A Neovim plugin that colorizes multiple search terms with multiple distinct colors for better visual tracking.

kaleidosearch.mp4

Features

  • 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
  • Colorize entire lines, giving identical lines the same color
  • Vim word token mode respects your buffer’s iskeyword setting
  • Colorize real tiktoken token spans in the buffer

Installation

Using your favorite plugin manager:

lazy.nvim

{
  "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,
}

packer.nvim

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
}

Usage

CommandDescription
:Kaleidosearch word1 word2Highlight specified words with colors
:KaleidosearchClearClear all highlighted words
:KaleidosearchAddWordAdd a new word to existing highlights
:KaleidosearchToggleCursorWordToggle word under cursor/selection highlight
:KaleidosearchColorWordsColorize all vim word tokens in buffer
:KaleidosearchColorWORDSColorize all vim WORD tokens in buffer
:KaleidosearchColorLinesColorize all lines, identical lines share colors
:KaleidosearchColorTokensColorize real tiktoken token spans in buffer
:KaleidosearchColorTokens!Force token colorization for large buffers
:KaleidosearchToggleTokensToggle tiktoken token span colors
:KaleidosearchInfoShow current Kaleidosearch session info

Default Keymaps

KeymapAction
<leader>csOpen prompt for words to colorize
<leader>ccClear all highlighted words (reset to clean slate)
<leader>cnAdd a new word to existing highlights
<leader>caAdd word under cursor to existing highlights
<leader>cwColorize all vim word tokens in current buffer
<leader>cWColorize all vim WORD tokens in current buffer
<leader>clColorize all lines in current buffer
<leader>ctColorize real tiktoken tokens in current buffer

Configuration

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
    colorize_all_words = "<leader>cw",   -- Colorize all vim 'word' tokens
    colorize_all_WORDS = "<leader>cW",   -- Colorize all vim 'WORD' tokens
    colorize_all_lines = "<leader>cl",   -- Colorize all lines in current buffer
    colorize_tokens = "<leader>ct",      -- Colorize real tiktoken tokens
    opts = {
      noremap = true,
      silent = true,
    }
  },
  token_colors = {
    enabled = true,
    model = "gpt-4o",                    -- tiktoken model
    encoding = "o200k_base",             -- fallback encoding
    max_bytes = 200 * 1024,               -- skip larger buffers unless forced
    max_highlights = 20000,               -- skip huge token counts unless forced
    palette_size = 32,
    saturation = 0.55,
    lightness = 0.24,
    priority = 120,
    notify = true,
    highlight_group_prefix = "KaleidosearchToken",
  }
})

Token colorization shells out asynchronously through uv run --with tiktoken when uv is available, otherwise it uses python3 or python with an installed tiktoken module. Regular :KaleidosearchClear and the clear keymap remove word, line, and token highlights.

Development

Running Tests

This plugin includes unit tests using Plenary.nvim. To run the tests:

  1. Use the provided script (it will install Plenary.nvim if needed):
./scripts/run_tests.sh
  1. Or if you’re inside Neovim with Plenary installed:
:PlenaryBustedDirectory test/ {minimal_init = 'test/minimal_init.lua'}

Misc.

  • PRs welcome 😃
  • Ideas / issues welcome

License

MIT License

About

A Neovim plugin that colorizes multiple search terms with multiple distinct colors for better visual tracking.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors