2012-04-03 4 views
0

カーソルの前のテキストの特定の部分とカーソルの後ろのテキストの特定の部分をハイライトしたいと思います。 カーソルの前後の部分は、正規表現のようなパターンで定義されます。このパターンは行によって制限されるべきではありません。 カーソルが移動すると、強調表示された領域が変化します。パターンで定義されたハイライトテキスト

これはvimの設定やスクリプトで可能ですか?

+0

あなたはそれで何を意味するのか」...のように変更されます:私、上記の不具合が原因でのvimrcに追加するお勧めしませんが、あなたは次のように使用することができますカーソルは移動するでしょうか? regexに基づいて強調表示されている場合は、カーソルの位置は関係ありません。あるいは私はあなたの意味を完全に誤解していますか? – Rook

+0

カーソルが[this](http://pastebin.com/fAapn94V)文字列内にあり、2つのポイントによって定義された部分文字列をハイライトしたいとします。 「これは5世紀だけでなく、電子的な植字に飛躍し、本質的には変わらない」との文章。強調表示されます。カーソルを移動すると、別の文が強調表示されます。 – xralf

+0

強調表示された文字列が多くの行(ここでは2行)にまたがっていることに注意してください。 – xralf

答えて

2

理論的には、次のコマンドの両方が動作するはずです:

match Error /\v\u\_\U{-}%#\_.{-}\./ 
syn match Error /\v\u\_\U{-}%#\_.{-}\./ 

。最終的には、両方のコマンドでバグを観察します。ハイライトは、<C-l>に達するまで正しく更新されません。さらに、:syn matchでは、2つの異なる文の2つの異なる部分が強調表示されることがありますので、最初の方が好ましい(:h matchadd():h 2matchを参照してください。:matchの強調表示はAFAIRが他のものによっても使用されるため消える可能性があります)。

更新

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。これはまさにあなたがコメントで述べたことです: "2つのポイントで定義された部分文字列1)カーソルの前に最も近い大文字2)カーソルの後に最も近い点"。最初のポイントは '\ u \ _ \ U { - }'であり、2番目のポイントは '\ _。{ - } \。'です。 '\ v'は文字クラスを拡張します(' \ u'は大文字のラテン文字、 '\ \ U'はすべてですが、改行または大文字のラテン文字、 '.'は改行を除く任意の文字です)。 – ZyX

+0

注:「大文字」を表すvimアトムはなく、「大文字*ラテン*文字」のみです。 – ZyX

関連する問題