2011-07-04 9 views
9

डालने के बजाए हटाएं, मैं अक्सर कई ब्लॉक पर डालने के बाद दृश्य ब्लॉक का उपयोग करता हूं, उदाहरण के लिए बहुत सारे कोड पर टिप्पणी करते समय। यह एकाधिक पंक्तियों पर एक ही स्थिति में पाठ डालने के लिए बहुत अच्छा है, लेकिन मैं यह नहीं समझ सकता कि बाद में दृश्य ब्लॉक मोड, बैकस्पेस, डेल और डी का उपयोग करके इस पाठ को कैसे हटाया जाए, सभी काम नहीं करते हैं। मैं मैकवीम का उपयोग कर रहा हूँ।विम - विजुअल ब्लॉक:

उत्तर

18

आप एक्स लिए देख रहे हैं:

root:x:0:0:root:/root:/bin/bash 
daemon:x:1:1:daemon:/usr/sbin:/bin/sh 
bin:x:2:2:bin:/bin:/bin/sh 
sys:x:3:3:sys:/dev:/bin/sh 

तब दृश्य-ब्लॉक का चयन करें, x:

root:/root:/bin/bash 
daeaemon:/usr/sbin:/bin/sh 
bin/bin:/bin/sh 
sys/dev:/bin/sh 

मैं अक्सर इस का उपयोग, ठीक उसी कारण के लिए - टिप्पणी और कोड के बड़े ब्लॉक को अपरिवर्तित करना।

+0

thats महान धन्यवाद, वहाँ दृश्य ब्लॉक में रखने के लिए एक रास्ता है मोड और एकाधिक एक्स करते हैं? –

+0

@beck: जहां तक ​​मुझे पता है, आप दृश्य मोड में नहीं रह सकते हैं। हालांकि, आप एक संख्या के साथ 'x' से पहले हो सकते हैं; जैसे '3x' तीन वर्ण हटा देता है, जो हो सकता है कि आप क्या कर रहे हों। –

+7

@beck: आप उसी ब्लॉक को फिर से हाइलाइट करने के लिए 'gv' कमांड का भी उपयोग कर सकते हैं। –

5

यह सीधे सवाल का जवाब नहीं दे रहा है (सरनाल्ड पहले से ही ऐसा कर चुका है), लेकिन मैं सुझाव दूंगा कि (कोड) ब्लॉक कोड पर अधिक कुशल तरीके हैं। मेरे पास एक टिप्पणी टॉगल फ़ंक्शन है जो या तो "कॉमचर" से शुरू होता है या नहीं, इस पर निर्भर करता है कि वर्तमान लाइन पर टिप्पणी या असम्बद्धता है।

function! CommentToggle(comchar) 
    let firstchar = matchstr(getline("."),"[^ ]") 
    if firstchar == a:comchar 
     sil exe 'normal ^xx' 
    else 
     sil exe 'normal ^i' . a:comchar . ' ' 
    endif 
endfunction 

तो, पर्ल फ़ाइलों के लिए आप मैप कर सकते हैं:

nnoremap <silent> <leader>c :call CommentToggle('#')<CR> 

और दबाने \ (संयुक्त राष्ट्र) कर्सर की स्थिति से तीन लाइनों टिप्पणी।

तुम भी एक दृश्य मोड मानचित्रण लिख सकते हैं: आप एक दृश्य क्षेत्र का चयन करें और प्रेस उन सब \ (संयुक्त राष्ट्र) के लिए टिप्पणी करने के लिए अनुमति देता है

vnoremap <silent> <leader>c :call CommentToggle('#')<CR> 

यह विशेष कार्य केवल एक-वर्ण टिप्पणियों ("#", "%", आदि) के लिए काम करता है, लेकिन यह लंबे तारों (जैसे "//") तक विस्तारित करने के लिए सरल है, और यहां तक ​​कि अधिक जटिल प्रतिस्थापन , जैसे एचटीएमएल टिप्पणियां।

उम्मीद है कि इससे मदद मिलती है।

+0

अच्छी टिप, धन्यवाद। –

+1

मैं "बेहतर तरीकों" के लिए सहमत हूं हालांकि, यहां तक ​​कि बेहतर तरीके भी हैं: टिप्पणियों के लिए समर्पित प्लगइन्स * टॉगलिंग * -> उन्नत कॉमेंटमेंट, एनईआरडी कॉमेंटर, टीकॉममेंट (मुझे आखिरी बार के बारे में निश्चित नहीं है; मैं पहले का उपयोग कर रहा हूं एक दशक के लिए) –

1

प्रिंस गौलाश का उत्तर अग्रणी टैब के साथ काम नहीं करता है।

मैंने इसे बदल दिया, पैटर्न में टैब वर्ण जोड़ दिया, हालांकि पंक्तियां टिप्पणी और असंतोष के बाद अपना इंडेंट खो देते हैं।

function! CommentToggle(comchar) 
     let firstchar = matchstr(getline("."), "[^ \t]") 
     if firstchar == a:comchar 
       sil exe 'normal ^2x' 
     else 
       sil exe 'normal ^i' . a:comchar . ' ' 
     endif 
endfunction 

मैं और अधिक लाइन में प्रथम स्थान के लिए टिप्पणी चार जोड़ने की तरह, राजकुमार गुलाश के कार्य करने के लिए इस संशोधन काम कर देता है:

function! CommentToggle(comchar) 
     let firstchar = matchstr(getline("."), "[^ \t]") 
     if firstchar == a:comchar 
       sil exe 'normal ^2x' 
     else 
       sil exe 'normal gI' . a:comchar . ' ' 
     endif 
endfunction 
+1

आगे के उत्तरों के जवाबों का उत्तर देने के साथ सावधान रहें - एक बार जब कोई नोटिस करता है, तो वे आम तौर पर कुछ ही मिनटों में चले जाते हैं :) - लेकिन राजकुमार गौलाश में कम निर्देशित होने के बाद यह एक अच्छा जवाब है और अधिक बेक की समस्या को हल करने पर निर्देशित किया गया। :) – sarnold

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