2010-09-22 12 views
6

मैं एक स्क्रिप्ट लिख रहा हूं जिसमें मैं प्रोग्रामेटिक रूप से खोजों को नियंत्रित करना चाहता हूं, और उन्हें हाइलाइट किया जाना चाहिए। खोज() फ़ंक्शन परिणाम हाइलाइट नहीं किए गए हैं (मुझे लगता है), इसलिए उस फ़ंक्शन का उपयोग करना मेरे लिए उपयोग नहीं है।एक स्क्रिप्ट से नियंत्रण खोज और हाइलाइटिंग

मैं जो करना चाहता हूं वह एक चर के लिए खोज करने के लिए 'सामान्य /' कमांड का उपयोग करना है, लेकिन यह सरल नहीं लगता है। मैं स्क्रिप्ट आदेश:

execute 'normal /' . my_variable . '\<CR>' 

(या अन्य रूपों vim टिप यहाँ में सुझाव के रूप में: http://vim.wikia.com/wiki/Using_normal_command_in_a_script_for_searching)

लेकिन यह कुछ भी नहीं है। मैं स्क्रिप्ट लाइन के निष्पादन के बाद कमांड लाइन में सही खोज शब्द को देख सकता हूं, लेकिन दस्तावेज़ में फोकस है, खोज रजिस्टर को बदला नहीं गया है, और कर्सर ने कोई खोज नहीं की है। (ऐसा लगता है कि < सीआर> प्रवेश नहीं कर रहा है, हालांकि कोई त्रुटि नहीं फेंक दी गई है - और हाँ, मैंने शाब्दिक^एम भी उपयोग करने का प्रयास किया है।)

मैं कम से कम खोज रजिस्टर को नियंत्रित करके नियंत्रित कर सकता हूं इस:

execute 'let @/ ="' . a:term .'"' 

और फिर स्पष्ट बात एक करने के लिए हो रहा है:

normal n 

लेकिन उस 'सामान्य एन' अगर मैं एक स्क्रिप्ट में इसे चलाने के लिए कुछ भी नहीं करता है। सर्च रजिस्टर सेट करना काम करता है, यदि स्क्रिप समाप्त होने के बाद मैन्युअल रूप से 'n' दबाता है (और हाइलाइटिंग दिखाई देती है, क्योंकि hlsearch चालू है)। कर्सर स्थित होने पर मुझे परवाह नहीं है, मैं सिर्फ रजिस्टर पैटर्न को हाइलाइट करना चाहता हूं। लेकिन लिपि में 'सेट hlsearch' के विभिन्न संयोजन या तो काम नहीं करते हैं।

मुझे पता है कि मैं 'मैच()' का उपयोग कर सकता हूं, लेकिन मैं इसे नियमित खोज हाइलाइटिंग के साथ काम करना चाहता हूं, और मुझे आश्चर्य है कि मैं क्या गलत कर रहा हूं। यह कुछ आसान होना चाहिए लेकिन मैं इसे नहीं देख रहा हूं। किसी भी मदद के लिए धन्यवाद।

+0

मैंने अपना खोज कमांड आज़माया है। 'execute" सामान्य/^ --- \ "' काम करता है। लेकिन 'execute' सामान्य/^ --- \ ''नहीं है। – ppan

उत्तर

3

अपनी स्क्रिप्ट कार्यों का उपयोग कर रहा है, तो :help function-search-undo से इस उद्धरण के लिए प्रासंगिक है: "।"

अंतिम बार उपयोग खोज पैटर्न और फिर से करें आदेश फ़ंक्शन द्वारा नहीं बदला जाएगा। यह भी का तात्पर्य है कि: फ़ंक्शन लौटने पर: nohlsearch को पूर्ववत कर दिया गया है।

विम आमतौर पर खोज पैटर्न (और कुछ अन्य बातें) एक समारोह समाप्त होता है जब, अक्सर आप एक मानचित्रण के अंत तक n (अगले खोज) जोड़ने, या :map <expr> का उपयोग करके यह आसपास पहुंच सकते हैं रीसेट करने की कोशिश करता है और आपके फ़ंक्शन को निष्पादित करने के लिए कुंजी अनुक्रम वापस कर दिया गया है।

1

नज़दीकी निरीक्षण पर, ऐसा लगता है कि \<CR> एकल उद्धरण के अंदर नहीं उठाया गया है।इस बजाय उपयोग करके देखें:

execute 'normal /' . my_variable . "\<CR>" 
+0

धन्यवाद। मुझे पूरा यकीन है कि मैंने पहली चीज की कोशिश की थी, और यह काम नहीं किया। मुझे लगता है कि आपको अपने अन्य उत्तर में समस्या आती है जहां आप किसी फ़ंक्शन में खोज पैटर्न को संशोधित करने में समस्या की पहचान करते हैं। जिन सभी आदेशों में मुझे समस्या है, वे एक फ़ंक्शन के भीतर हैं, इसलिए मैं इसकी पुष्टि करने के लिए इसे देखूंगा। –

3

रन:

@/= एक करते हैं: searchStr

अपने समारोह अंदर से तो

चलाने सामान्य n

आपके फ़ंक्शन के बाहर से

(इसके अंदर कुछ भी नहीं है) उदाहरण के लिए।

कमांड-nargs = * एचएस MySearch() | सामान्य n

या आप उपयोग कर सकते हैं:

सेट hlsearch

बजाय

सामान्य n आप कर्सर

स्थानांतरित करने के लिए (मैं बाहर काम नहीं कर सकता नहीं करना चाहते हैं फ़ंक्शन के बाहर कुछ किए बिना ऐसा करने का एक और तरीका।)

+0

मैं इसे बहुत लंबे समय तक ढूंढ रहा था। Google के लिए यह एक मुश्किल बात है। आपका जवाब पूरी तरह से काम करता है और वही करता है जो मैं चाहता हूं! – Dan

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