:)
Мне нравится использовать подсветку поиска в Vim . Но через некоторое время это отстой, и я должен удалить его вручную (отображение определено). Поэтому я написал функцию для удаления выделения через некоторое время, привязанную к автокоманде. Время может быть проблемой, если вы просто играете главную роль в результате поиска, я связал эту функцию с событием CursorMoved
и ввел счетчик до нуля. Если я переключаюсь между результатами или позже решаю перейти к элементу результатов поиска, это работает нормально, и все результаты снова подсвечиваются (проверяется вручную).
Я вставил много echo
сообщений для отслеживания поведения. Это работает абсолютно нормально, пока счетчик не «истекает» (получает ноль). Затем подсветка и счетчик должны быть удалены. Оба работают как указано echo
, но не визуально. Проверка после неустановленного выделения с помощью echom v:hlsearch
подтверждает, что он сработал, но сразу после этого снова выделяется (задержка не отображается). Таким образом, цикл начинается снова, потому что счетчик истек, но обнаружена «новая» подсветка.
Вызов той же команды, что и в функции, работает безупречно. Так что же происходит?
Так вот мой код в .vimrc
:
" Function used if something is highlighted in the document.
" Is meant to be called several times by a autocommand.
" Sets a counter on the first call.
" Afterwards it decrease the counter each time get called, until zero.
" When the highlighting will be removed and the counter also.
" By this the time until remove highlighting depends on the frequency of
" function calls and that depend on the bounded auto command.
"
function! s:remove_highlight()
echom 'Call'
" Only makes sense when something is highlighted.
if v:hlsearch
echom 'In'
" First call, so set the start time
if !exists('g:highlight_counter')
echom 'first call after new highlighting'
let g:highlight_counter = 4
else
" Decrease highlight counter.
let g:highlight_counter = g:highlight_counter - 1
echom 'check ' . g:highlight_counter
" Check if the counter is expired.
if g:highlight_counter <= 0
" Unset counter and remove highlight.
unlet g:highlight_counter
execute 'nohlsearch'
echom 'done? ' . !v:hlsearch
else
endif
endif
echom 'out'
endif
echom 'End'
endfunction
Есть идеи, что здесь происходит? Понятия не имею ...