2012-04-03 4 views
0

Я хочу выделить определенную часть текста перед курсором и определенной частью текста после курсора. Детали до и после курсора будут определяться некоторым шаблоном (например, регулярным выражением). Этот шаблон не должен ограничиваться линией. Выделенная область будет меняться при перемещении курсора.Выделите текст, определенный шаблоном

Возможно ли это в настройках или сценарии vim?

+0

Что вы имеете в виду, что»... изменится курсор будет перемещаться "? Если он подсвечен на основе регулярного выражения, то не имеет значения, где находится курсор. Или я совершенно неправильно понял ваш смысл? – Rook

+0

Предположим, что курсор находится в строке [this] (http://pastebin.com/fAapn94V), и вы хотите выделить подстроку, определенную двумя точками: 1) ближайшая заглавная буква перед курсором 2) ближайшая точка после курсора. Приговор «Он пережил не только пять веков, но и прыжок в электронный набор, оставаясь, по существу, неизменным». будут выделены. При перемещении курсора будет выделено другое предложение. – xralf

+0

Обратите внимание, что выделенная строка распространяется по многим строкам (здесь две). – xralf

ответ

2

Теоретически, оба из следующих команд должно работать:

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 
+0

Какая здесь картина? Возможно ли быть простой моделью, как я упоминаю в комментарии по этому вопросу? – xralf

+0

@xralf. Это именно то, о чем вы упоминали в комментарии: «подстрока, определяемая двумя точками 1) ближайшая заглавная буква перед курсором 2) ближайшая точка после курсора». Первая точка - '\ u \ _ \ U {-}', вторая - '\ _. {-} \.'. '% #' означает «позиция курсора», '\ v' позволяет мне опустить некоторые обратные косые черты (режим« очень магия »),' \ _' в обоих выражениях расширяет классы символов ('\ u' - это прописная латинская буква,' ' \ U' - это все, но латинская буква новой строки или верхнего регистра, '.' - это всего лишь символ, кроме новой строки) с символом новой строки. – ZyX

+0

Примечание: нет атома vim, который обозначает «заглавную букву», только для «столичной латинской буквы». – ZyX

Смежные вопросы