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)
38 matchadd("MarkWord" .. (i + 1), Words[i], -10, Offset + i + 1)
44 for i in range(len(Words))
45 exec "syntax clear MarkWord" .. (i + 1)
46 if Words[i] == "" | continue | endif
47 silent! matchdelete(Offset + i + 1)
48 if Show | Add(i) | endif
57 def Do(word: string): bool
60 for i in range(len(Words))
61 if Words[i] == "" | continue | endif
66 for i in range(len(Words))
72 for i in range(len(Words))
73 if Words[i] != "" | continue | endif
77 Cycle = ((i + 1) == len(Words)) ? 1 : i + 1
83 Cycle = ((Cycle + 1) == len(Words)) ? 1 : Cycle + 1
88 Do('\<' .. expand("<cword>") .. '\>')