marks.vim (1142B)
1 vim9script 2 3 var marks_highlight = false 4 5 6 def g:GetListMarks(): string 7 final list_marks = [] 8 for mark in getmarklist('%') 9 list_marks->add(mark.mark[1 : ]) 10 endfor 11 return '(' .. list_marks->join(' ') .. ')' 12 enddef 13 14 15 def ToggleHighlightMarks() 16 marks_highlight = !marks_highlight 17 18 if marks_highlight 19 prop_type_add('MarksPropType', {highlight: 'Pmenu'}) 20 HighlightMarks() 21 setlocal statusline=%<%f\ %h%w%m%r%=%{GetListMarks()}\ \ %-14.(%l,%c%V%)\ %P 22 setlocal laststatus=2 23 else 24 prop_type_delete('MarksPropType') 25 setlocal statusline= 26 setlocal laststatus=1 27 endif 28 enddef 29 30 31 def HighlightMarks() 32 if !marks_highlight 33 return 34 endif 35 36 prop_clear(1, line('$'), {type: 'MarksPropType'}) 37 38 for mark in getmarklist('%') 39 mark.pos[2] = min([mark.pos[2], strcharlen(getline(mark.mark)) + 1]) 40 prop_add(mark.pos[1], mark.pos[2], {type: 'MarksPropType', text: mark.mark[1 : ]}) 41 endfor 42 enddef 43 44 45 nnoremap <localleader>` <ScriptCmd>ToggleHighlightMarks()<CR> 46 autocmd CursorMoved,CursorMovedI * HighlightMarks() 47 48 # vim: et sts=4 sw=4