3 # Based on Mark plugin by Yuheng Xie:
4 # https://www.vim.org/scripts/script.php?script_id=1238
6 # * uses autoload for lazy loading
7 # * is ported to vim9script for code simplification and performance
8 # * uses lists, instead of pack of variables for keeping the state
9 # * does not pollute global variable namespace
10 # * has removed old Vim versions support, expecting for modern functions
11 # * has ability only to highlight the current word
13 hi MarkWord1 ctermfg=Black ctermbg=Cyan
14 hi MarkWord2 ctermfg=Black ctermbg=Green
15 hi MarkWord3 ctermfg=Black ctermbg=Yellow
16 hi MarkWord4 ctermfg=Black ctermbg=Red
17 hi MarkWord5 ctermfg=Black ctermbg=Magenta
18 hi MarkWord6 ctermfg=Black ctermbg=Blue
22 var Words: list<string>
26 if len(Words) > 0 | return | endif
28 while hlexists("MarkWord" .. i) | i = i + 1 | endwhile
29 Words = repeat([""], i - 1)
34 silent! matchdelete(Offset + i + 1)
37 def Add(i: number, word: string)
39 matchadd("MarkWord" .. (i + 1), word, -10, Offset + i + 1)
45 for i in range(len(Words))
46 exec "syntax clear MarkWord" .. (i + 1)
47 if Words[i] == "" | continue | endif
48 silent! matchdelete(Offset + i + 1)
49 if Show | Add(i, Words[i]) | endif
60 for i in range(len(Words))
62 elseif Words[i] == word | Del(i) | return
65 if !Show | Show = true | endif
66 for i in range(len(Words))
67 if Words[i] != "" | continue | endif
69 Idx = ((i + 1) == len(Words)) ? 1 : (i + 1)
74 Idx = ((Idx + 1) == len(Words)) ? 1 : (Idx + 1)
78 Do('\<' .. expand("<cword>") .. '\>')