1

У меня есть autocmd запускаемый CursorMoved который будет match тем же словам, что и слово под курсором, как синтаксическое правило, которое просто инвертирует передний план / фон.

Я использую его, чтобы найти все слова, равные одному под курсором, для мгновенной проверки на опечатку. Вот:

autocmd CursorMoved * exe printf('match lCursor /\V\<%s\>/', escape(expand('<cword>'), '/\'))

Как я могу исключить текущую строку из матча?

1 ответ1

1

Чтобы избежать совпадений в текущей строке, вы можете использовать специальный атом :help /\%l чтобы сопоставить текущий номер строки, а затем заявить о несоответствии через отрицательный запрос:

exe printf('match lCursor /\V\%%%dl\@!\<%s\>/', line('.'), escape(expand('<cword>'), '/\'))

Но в своем ответе вы также указываете, что текущее слово (не вся строка) не должно быть выделено. Это может быть достигнуто снова отрицательным прогнозом, утверждая, что курсор (\%#) не находится внутри текущего ключевого слова (\<\k*...\k*\>) и (\&) также соответствует текущему слову:

exe printf('match lCursor /\V\%%(\<\k\*\%%#\k\*\>\)\@!\&\<%s\>/', escape(expand('<cword>'), '/\'))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .