Теоретически, оба из следующих команд должно работать:
match Error /\v\u\_\U{-}%#\_.{-}\./
syn match Error /\v\u\_\U{-}%#\_.{-}\./
. В конце концов, с обеих команд я наблюдаю ошибку: подсветка не обновляется должным образом, пока я не нажму <C-l>
. Более того, с :syn match
он иногда выделяет две разные части двух разных предложений, поэтому предпочтительнее первый вариант (см. Также :h matchadd()
и :h 2match
, потому что подсветка может исчезнуть из-за того, что AFAIR используется еще чем-то другим).
Update: Хотя из-за ошибки, описанной выше, я бы не рекомендовал добавлять его в vimrc, вы можете использовать следующее:
augroup vimrcSentenceMatch
autocmd!
autocmd WinEnter * : if !exists('w:sentence_match')
\ | let w:sentence_match=matchadd('Error', '\v\u\_\U{-}%#\_.{-}\.')
\ | endif
augroup END
Что вы имеете в виду, что»... изменится курсор будет перемещаться "? Если он подсвечен на основе регулярного выражения, то не имеет значения, где находится курсор. Или я совершенно неправильно понял ваш смысл? – Rook
Предположим, что курсор находится в строке [this] (http://pastebin.com/fAapn94V), и вы хотите выделить подстроку, определенную двумя точками: 1) ближайшая заглавная буква перед курсором 2) ближайшая точка после курсора. Приговор «Он пережил не только пять веков, но и прыжок в электронный набор, оставаясь, по существу, неизменным». будут выделены. При перемещении курсора будет выделено другое предложение. –
xralf
Обратите внимание, что выделенная строка распространяется по многим строкам (здесь две). – xralf