From: Sergey Matveev Date: Thu, 20 Oct 2022 09:10:12 +0000 (+0300) Subject: More compact Mark X-Git-Url: http://www.git.stargrave.org/?p=dotfiles.git;a=commitdiff_plain;h=9ce12f786dabbc2a9bb2233f3c34d544c3c0ce7c More compact Mark --- diff --git a/vim/.vim/pack/stargrave/start/mark/autoload/mark.vim b/vim/.vim/pack/stargrave/start/mark/autoload/mark.vim index 7a3f339..640f6cb 100644 --- a/vim/.vim/pack/stargrave/start/mark/autoload/mark.vim +++ b/vim/.vim/pack/stargrave/start/mark/autoload/mark.vim @@ -20,7 +20,7 @@ hi MarkWord6 ctermfg=Black ctermbg=Blue const Offset = 3333 var Show = false var Words: list -var Cycle = 1 +var Idx = 1 def Init() if len(Words) > 0 | return | endif @@ -34,54 +34,44 @@ def Del(i: number) silent! matchdelete(Offset + i + 1) enddef -def Add(i: number) - matchadd("MarkWord" .. (i + 1), Words[i], -10, Offset + i + 1) +def Add(i: number, word: string) + Words[i] = word + matchadd("MarkWord" .. (i + 1), word, -10, Offset + i + 1) enddef -export def Update() +export def Refresh() 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 + if Show | Add(i, Words[i]) | endif endfor enddef export def Toggle() Show = !Show - Update() + Refresh() enddef -def Do(word: string): bool +def Do(word: string) 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 + if !Show | Del(i) + elseif Words[i] == word | Del(i) | return endif endfor + if !Show | Show = true | endif 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 + Add(i, word) + Idx = ((i + 1) == len(Words)) ? 1 : (i + 1) + return endfor - Del(Cycle) - Words[Cycle] = word - Add(Cycle) - Cycle = ((Cycle + 1) == len(Words)) ? 1 : Cycle + 1 - return true + Del(Idx) + Add(Idx, word) + Idx = ((Idx + 1) == len(Words)) ? 1 : (Idx + 1) enddef export def Word() diff --git a/vim/.vim/pack/stargrave/start/mark/plugin/mark.vim b/vim/.vim/pack/stargrave/start/mark/plugin/mark.vim index 8cb85f1..f42e02d 100644 --- a/vim/.vim/pack/stargrave/start/mark/plugin/mark.vim +++ b/vim/.vim/pack/stargrave/start/mark/plugin/mark.vim @@ -1,5 +1,3 @@ if exists("*mark#Word") | finish | endif -nmap m MarkWord -nnoremap MarkWord :call mark#Word() -command! MarkToggle call mark#Toggle() -autocmd! BufWinEnter,WinEnter * call mark#Update() +nmap m :call mark#Word() +autocmd! BufWinEnter,WinEnter * call mark#Refresh() diff --git a/vim/.vimrc b/vim/.vimrc index 1b85527..bbed26d 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -51,7 +51,7 @@ set smartcase set hlsearch set incsearch set gdefault -map :nohlsearch:MarkToggle +map :nohlsearch:call mark#Toggle() set wildmode=list:longest set tags=.tags/**/tags;