+vim9script
+
+# Based on Mark plugin by Yuheng Xie:
+# https://www.vim.org/scripts/script.php?script_id=1238
+# That one:
+# * uses autoload for lazy loading
+# * is ported to vim9script for code simplification and performance
+# * uses lists, instead of pack of variables for keeping the state
+# * does not pollute global variable namespace
+# * has removed old Vim versions support, expecting for modern functions
+# * has ability only to highlight the current word
+
+hi MarkWord1 ctermfg=Black ctermbg=Cyan
+hi MarkWord2 ctermfg=Black ctermbg=Green
+hi MarkWord3 ctermfg=Black ctermbg=Yellow
+hi MarkWord4 ctermfg=Black ctermbg=Red
+hi MarkWord5 ctermfg=Black ctermbg=Magenta
+hi MarkWord6 ctermfg=Black ctermbg=Blue
+
+const Offset = 3333
+var Show = false
+var Words: list<string>
+var Cycle = 1
+
+def Init()
+ if len(Words) > 0 | return | endif
+ var i = 1
+ while hlexists("MarkWord" .. i) | i = i + 1 | endwhile
+ Words = repeat([""], i - 1)
+enddef
+
+def Del(i: number)
+ Words[i] = ""
+ silent! matchdelete(Offset + i + 1)
+enddef
+
+def Add(i: number)
+ matchadd("MarkWord" .. (i + 1), Words[i], -10, Offset + i + 1)
+enddef
+
+export def Update()
+ Init()
+ var word: string
+ for i in range(len(Words))
+ exec "syntax clear MarkWord" .. (i + 1)
+ if Words[i] == "" | continue | endif
+ silent! matchdelete(Offset + i + 1)
+ if Show | Add(i) | endif
+ endfor
+enddef
+
+export def Toggle()
+ Show = !Show
+ Update()
+enddef
+
+def Do(word: string): bool
+ Init()
+ if !Show
+ for i in range(len(Words))
+ if Words[i] == "" | continue | endif
+ Del(i)
+ endfor
+ Show = true
+ endif
+ for i in range(len(Words))
+ if word == Words[i]
+ Del(i)
+ return true
+ endif
+ endfor
+ for i in range(len(Words))
+ if Words[i] != "" | continue | endif
+ Del(i)
+ Words[i] = word
+ Add(i)
+ Cycle = ((i + 1) == len(Words)) ? 1 : i + 1
+ return true
+ endfor
+ Del(Cycle)
+ Words[Cycle] = word
+ Add(Cycle)
+ Cycle = ((Cycle + 1) == len(Words)) ? 1 : Cycle + 1
+ return true
+enddef
+
+export def Word()
+ Do('\<' .. expand("<cword>") .. '\>')
+enddef