VIM — удалить совпадение группы

#vim #neovim

#vim #neovim

Вопрос:

У меня есть небольшая функция для подчеркивания каждого слова, такого как слово под моим курсором:

 function! HighlightWordUnderCursor()
  hi MatchWord NONE
  let disabled_ft = ["qf", "fugitive", "nerdtree", "gundo", "diff", "fzf", "floaterm"]
  if amp;diff || amp;buftype == "terminal" || index(disabled_ft, amp;filetype) >= 0
    return
  endif
  if getline(".")[col(".")-1] !~# '[[:punct:][:blank:]]'
    hi MatchWord cterm=undercurl gui=undercurl guibg=#3b404a
    exec 'match' 'MatchWord' '/V<'.expand('<cword>').'>/'
  else
    match none
  endif
endfunction

augroup MatchWord
  autocmd!
  autocmd! CursorHold,CursorHoldI * call HighlightWordUnderCursor()
augroup END

  

Однако, когда он находится в режиме diff, он по-прежнему совпадает, но он черный на желтой измененной строке. Как я могу это исправить? Спасибо.

ss

Стоит отметить: в строках без различий выделение происходит не так, как ожидалось.

Комментарии:

1. почему у вас есть функция для этого в любом случае? почему бы просто не использовать * ?

2. @DoktorOSwaldo Я хотел бы отказаться от вашего комментария.

3. Мне жаль, что вы так себя чувствуете. Однако я не пытаюсь запугать вас, я серьезно спрашиваю. Я совершенно уверен, что вы знаете о такой возможности. Вот почему мне интересно, какова (вероятно, действительная) причина этого…

4. @DoktorOSwaldo посмотрите на autocmd. Я копирую поведение vscode, помечая символ под курсором, а не ища его, я не хочу загрязнять свой @/ регистр, это очень полезно, чтобы увидеть похожие ключевые слова в вашем коде.

5. Спасибо. Ваша проверка amp;diff на самом деле выглядит правильно. Вы пробовали добавлять точку останова, чтобы увидеть, действительно ли она пропускает if блок? breakadd func HighlightWordUnderCursor