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 to keep the state
9 # * does not pollute global variable namespace
10 # * has ability only to highlight the current word
12 hi MarkWord1 ctermfg=Black ctermbg=Cyan
13 hi MarkWord2 ctermfg=Black ctermbg=Green
14 hi MarkWord3 ctermfg=Black ctermbg=Yellow
15 hi MarkWord4 ctermfg=Black ctermbg=Red
16 hi MarkWord5 ctermfg=Black ctermbg=Magenta
17 hi MarkWord6 ctermfg=Black ctermbg=Blue
19 const MarkIdOffset = 3333
21 var Words: list<string>
25 if len(Words) > 0 | return | endif
27 while hlexists("MarkWord" .. i) | i = i + 1 | endwhile
28 Words = repeat([""], i - 1)
32 for i in range(len(Words))
33 exec "syntax clear MarkWord" .. (i + 1)
34 silent! matchdelete(MarkIdOffset + i + 1)
35 if (Words[i] == "") || !Show | continue | endif
36 matchadd("MarkWord" .. (i + 1), Words[i], -10, MarkIdOffset + i + 1)
43 silent! windo WinRefresh()
44 silent! exec ":" .. nr .. "wincmd w"
53 for i in range(len(Words))
54 if !Show | Words[i] = ""
55 elseif Words[i] == word | Words[i] = "" | return
58 if !Show | Show = true | endif
59 for i in range(len(Words))
60 if Words[i] != "" | continue | endif
62 Idx = ((i + 1) == len(Words)) ? 0 : (i + 1)
66 Idx = ((Idx + 1) == len(Words)) ? 0 : (Idx + 1)
71 Do('\<' .. expand("<cword>") .. '\>')