2012-12-18 10 views
7

मेरे पास व्यक्तिगत नोट्स के लिए एक बहुत ही सरल विम वाक्यविन्यास फ़ाइल है। मैं लोगों के नाम को हाइलाइट करना चाहता हूं और मैंने ट्विटर जैसे वाक्यविन्यास @jonathan चुना है।विम सिंटैक्स में @ से शुरू होने वाले शब्दों को हाइलाइट कैसे करें?

मैंने कोशिश की:

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

मतलब करने के लिए: शब्द @ के साथ शुरुआत और कम से कम एक गैर-सफ़ेद चरित्र है। समस्या यह है कि @ विम नियमित अभिव्यक्तियों में एक विशेष चरित्र प्रतीत होता है।

मैंने \@ से बचने की कोशिश की और ब्रैकेट [@], सामान्य चालें, लेकिन यह काम नहीं किया। मैं (^|\s) (लाइन या व्हाइटस्पेस की शुरुआत) जैसे कुछ कोशिश कर सकता हूं लेकिन यह वास्तव में समस्या है कि शब्द-सीमा हल करने का प्रयास करती है।

सरलीकृत नियमित अभिव्यक्तियों पर काम को हाइलाइट करना, इसलिए यह किसी और चीज की तुलना में सही रेगेक्स खोजने का एक और सवाल है। मैं क्या खो रहा हूँ?

+0

आप '' S \ + 'में अपने' + 'से क्यों बच गए हैं? '@ \ S + 'या' \ @ \ S + 'आज़माएं, यदि' v' को' vim 'में विशेष वर्ण माना जाता है। मुझे इसके बारे में पता नहीं है। –

+0

@ रोहितजैन क्योंकि विम वाक्यविन्यास बीआरई से निकलता है। यह विशेष होने के लिए बच जाना चाहिए। – ZyX

+0

@ZyX .. ओह! मुझे वह नहीं पता था। धन्यवाद :) –

उत्तर

13

@ केवल एक विशेष वर्ण है यदि आपने @ से पहले पैटर्न में \v डालकर "बहुत जादू" मोड सक्षम किया है। आपको यहां एक और समस्या है: @ एक नया शब्द शुरू नहीं करता है। \< सिर्फ "शब्द सीमा" नहीं है जैसे कि पर्ल/पीसीआरई \b, लेकिन " शब्द सीमा" (सहायता में: "शब्द की शुरुआत") का अर्थ है कि \< के बाद कुछ कीवर्ड वर्णों का पालन करना होगा। @ आमतौर पर एक कीवर्ड वर्ण पैटर्न \<@ कभी मेल नहीं खाता (और यहां तक ​​कि अगर \b जैसा था तो यह [email protected] जैसी संरचनाओं से मेल खाता है जो निश्चित रूप से आप नहीं चाहते हैं: कारण मैंने पहले समझाया था)।

आप \k\@<[email protected]\k\S* बजाय का उपयोग करना चाहिए: \k\@<! सुनिश्चित करता है कि @ किसी भी कीवर्ड चरित्र से पहले नहीं है, \k\S* सुनिश्चित करें कि नाम का पहला वर्ण कोई कीवर्ड एक (आप शायद भी @\<\S\+ इस्तेमाल कर सकते हैं) है बनाता है।

वहाँ

एक अन्य समाधान है: 'iskeyword' विकल्प में @ शामिल हैं और regex छोड़ के रूप में है:।

setlocal [email protected]@ 

(स्पष्टीकरण कारण है कि मैं @[email protected] यहाँ का उपयोग के लिए :h 'isfname' देख 'iskeyword' ठीक उसी वाक्यविन्यास है और रीडायरेक्ट करेगा आप वहां स्पष्टीकरण के लिए हैं।)

+0

महान काम करता है! विस्तृत स्पष्टीकरण के लिए धन्यवाद। – jpalardy

संबंधित मुद्दे