2012-12-18 39 views
7

我有一個非常簡單的個人筆記Vim語法文件。我想突出人們的名字,我選擇了一個類似Twitter的語法@jonathan如何在Vim語法中突出顯示以@開頭的單詞?

我想:

syntax match notesPerson "\<@\S\+" 

意味着:話開始與@和具有至少一個非空白字符。問題是@似乎是Vim正則表達式中的一個特殊字符。

我試圖逃過\@,並括在括號[@],通常的伎倆,但沒有奏效。我可以嘗試類似(^|\s)(行首或空白),但這正是字邊界試圖解決的問題。

突出顯示簡化的正則表達式的作品,所以這是更多的尋找正確的正則表達式比其他任何問題。我錯過了什麼?

+0

爲什麼你在'\ S \ +'中逃脫你的'+'?如果'@'在'vim'中被認爲是特殊字符,請嘗試'@ \ S +'或'\ @ \ S +'。我不知道這一點。 –

+0

@RohitJain因爲vim語法來自BRE。它必須逃脫爲特殊。 – ZyX

+0

@ZyX ..哦!我不知道。謝謝:) –

回答

13

@只有在啓用「非常神奇」模式的情況下,才能將\v設置爲@之前的模式。你在這裏有另一個問題:@不會開始一個新的單詞。 \<不僅僅是像perl/PCRE \b那樣的「字邊界」,而是「字邊界」(在幫助中:「該詞的開頭」),這意味着在\<之後必須遵循一些關鍵字字符。由於@通常不是關鍵字字符模式\<@永遠不會匹配(即使它像\b它會匹配的結構像[email protected]這絕對不是你想要的:因爲我之前解釋過)。

您應該使用\k\@<[email protected]\k\S*代替:\k\@<!確保@不受任何關鍵字字符前面,\k\S*確保該名稱的第一個字符是一個關鍵字(你很可能也使用@\<\S\+)。

還有另一種解決方案:包括@'iskeyword'選擇和留下的正則表達式爲-是:

setlocal [email protected]@ 

(見:h 'isfname'爲什麼我在這裏使用@[email protected]解釋'iskeyword'具有完全相同的語法和將重定向你在那裏解釋。)

+0

很好用!感謝您的詳細解釋。 – jpalardy

相關問題