मैं vimscript का दृश्य चयन कैसे कर सकता हूं?


12

अगर मेरे पास विम्सस्क्रिप्ट की कुछ पंक्तियाँ हैं, जिन्हें मैं अपने vimrc में डालने से पहले परीक्षण करना चाहता हूं, तो क्या उनका चयन करना संभव है, फिर उन्हें स्रोत?

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

  • दृश्य चयन करें v, फिर चयन आदि करने के लिए गति, फिर
  • :'<,'>so

लेकिन विम एक त्रुटि देता है

कोई सीमा की अनुमति नहीं है

भी

:'<,'>w | so

देता है

उपयोग ! आंशिक बफर लिखने के लिए

मैं दृष्टिगत रूप से चुनी हुई वशीकरण कैसे कर सकता हूं?

जवाबों:


11

कमांड लाइन हिट पर <C-u>फिर टाइप करें @*और दर्ज करें।

<C-u>दृश्य सीमा हटा देगा '<,'>जो स्वचालित रूप से डाला गया है यदि कुछ पाठ नेत्रहीन रूप से चुना गया है।

:@*उस *रजिस्टर की सामग्री को निष्पादित करेगा जिसमें इस समय जो कुछ भी है उसे नेत्रहीन रूप से चुना गया है।

भले ही वह पाठ जो चयनित / हाइलाइट किया गया है, आपके वेब ब्राउज़र (फ़ायरफ़ॉक्स, क्रोम, ...) में है, यह काम करेगा, *रजिस्टर आपको सीधे विम में एक्सेस करने की अनुमति देगा।


यदि आपका पाठ विम बफर में चुना गया है, तो इसका एक और समाधान नामांकित रजिस्टर में कॉपी करना है, उदाहरण के लिए एक रजिस्टर टाइप करके "ay

फिर, कमांड लाइन पर, टाइप करें: <C-r>aऔर एंटर करें।
Ctrl+ rआपको एक प्रकार का संकेत देगा जो चरित्र द्वारा दर्शाया गया है "(अधिक जानकारी के लिए पढ़ें :h c_Ctrl-r)।
इस नए प्रॉम्प्ट पर, यदि आप एक रजिस्टर का नाम देते हैं, तो इसकी सामग्री कमांड लाइन पर डाली जाएगी, जहां आप निष्पादन से पहले संपादित कर पाएंगे।


इसके अलावा यदि आप किसी रजिस्टर को निर्दिष्ट किए बिना कुछ पाठ कॉपी करते हैं, तो यह अनाम रजिस्टर से सुलभ होगा "

तो मान लीजिए कि आपने किसी फ़ाइल में विम्सस्क्रिप्ट की एक पंक्ति प्राप्त की है और इसे जल्दी से स्रोत करना चाहते हैं, तो आप इसके साथ कॉपी कर सकते हैं Y, फिर इसे कमांड लाइन पर स्रोत के साथ: :<C-r>"और दर्ज करें।

अंत में, यदि आप इस अंतिम समाधान का उपयोग करते हैं, तो बस एक समस्या है जिसके बारे में आपको पता होना चाहिए।
यदि आप इस तरह कमांड लाइन पर एक अजीब चरित्र देखते हैं ^M, तो यह कैरेज रिटर्न का कैरेट नोटेशन है। आपको इसे हटा देना चाहिए, अन्यथा आपको संभवतः एक त्रुटि मिलेगी।

संक्षेप में, आप:

  1. के साथ अपनी लाइन की नकल Y
  2. के साथ कमांड मोड में स्विच करें :
  3. <C-r>रजिस्टर शीघ्र दर्ज करने के लिए मारा
  4. "अनाम रजिस्टर को कॉल करने के लिए टाइप करें
  5. ^Mचरित्र को हटाने के लिए बैकस्पेस मारा
  6. और हिट दर्ज करें।

1
मिठाई! : डी अच्छी तरह से काम करता है - मैं पहले कभी नहीं आया था @*, धन्यवाद!
the_velour_fog

मुझे खुशी है कि इसने आपकी मदद की। मैंने दूसरे समाधान के प्रस्ताव का उत्तर संपादित किया है।
सागिनॉ

1
अच्छा है, मैंने आपके सुझाव का उपयोग : <C-r>a करने के बारे में वास्तव में बहुत अच्छा काम किया है :) मुझे लगता है कि विम ने ^Mलाइन रिटर्न के रूप में पढ़ा है - और प्रत्येक को अपनी व्यक्तिगत लाइन / कमांड के रूप में निष्पादित किया है?
the_velour_fog 11

यह एक अच्छा सवाल है, ईमानदारी से मुझे नहीं पता। आमतौर पर अगर मैं इस चरित्र को नहीं हटाता हूं तो मुझे त्रुटियां मिली हैं। मुझे खुशी है कि इसने आपके लिए त्रुटियों के बिना काम किया। हो सकता है कि विषय पर अधिक ज्ञान रखने वाला कोई व्यक्ति हमें समझाएगा कि विम इस तरह के विशेष पात्रों के साथ कैसा व्यवहार करता है।
सागिनॉव

2

मैं वास्तव में इसे थोड़ा अलग तरीके से करता हूं, मैं सिर्फ अपने vimrc में संपादन करता हूं और हर बार जब मैं इसे लिखता हूं तो इसे फिर से स्रोत करता हूं। (मेरे पास vimrc फ़ाइलों का एक कैस्केडिंग सेट है, इसलिए यह मुझे उनमें से किसी एक को बदलने की अनुमति देता है।)

if $MYVIMRC != ''
    autocmd BufWritePost    *vimrc      source $MYVIMRC
endif

2

मेरे अन्य उत्तर की तुलना में सीधे प्रश्न पर, आप इस तरह से मैपिंग को परिभाषित कर सकते हैं ( nnoremapबिना चयन के, बस वर्तमान लाइन निष्पादित करें; vnoremapजब दृश्य मोड सक्रिय हो);

nnoremap <F2> :execute getline(".")<CR>
vnoremap <F2> :<C-u>for line in getline("'<", "'>") \| execute line \| endfor<CR>

दोनों ही मामलों में, "वर्तमान लाइन" :executed है, इसलिए दृश्य संस्करण में आप :executeदृश्य चयन के माध्यम से एक के बाद एक लाइन का उपयोग कर रहे हैं।

जैसा कि एक अन्य जवाब में कहा गया है, टाइप किए गए <C-u>विनिर्देशन को हटाता है जो :टाइप किए जाने पर कमांड लाइन में पॉप अप करता है । |पात्रों क्योंकि अन्यथा वे के अंत के रूप में व्याख्या कर रहे हैं भाग निकले जाने की जरूरत है vnoremapआदेश।

इसे कुछ जिम्नास्टिक से छुटकारा पाने के लिए एक समारोह में बदल दिया जा सकता है लेकिन यह इस समय मेरे लिए बहुत बड़ी जीत नहीं है। यह मूल रूप से vnoremap कई लाइनों में विस्तारित होगा और callएक रेंज के साथ एड [nv] मैपिंग मोड पर निर्भर करेगा।


ओह, दृश्य मोड मैपिंग पूरी लाइनों को निष्पादित करती है, यदि आप ब्लॉक हैं या वर्ण-वार यह लाइनों के भीतर शुरू और अंत बिंदुओं को अनदेखा करेगा।
डैश-टॉम-बैंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.