Vim में टिप्पणी / असहजता रेखाओं का त्वरित तरीका क्या है?


1167

मेरे पास vi में एक रूबी कोड फ़ाइल खुली है, वहाँ लाइनों के साथ टिप्पणी की गई है #:

class Search < ActiveRecord::Migration
  def self.up
    # create_table :searches do |t|
    #   t.integer :user_id
    #   t.string :name
    #   t.string :all_of
    #   t.string :any_of
    #   t.string :none_of
    #   t.string :exact_phrase
    # 
    #   t.timestamps
    # end
  end

  def self.down
    # drop_table :searches
  end
end

कहते हैं कि मैं पहले def ... endखंड की सभी पंक्तियों को अनसुना करना चाहता हूं । विम में ऐसा करने का एक कारगर तरीका क्या है?

सामान्य तौर पर, मैं टिप्पणी करने के लिए एक आसान और तरल मार्ग की तलाश कर रहा हूं और लाइनों को असहज कर रहा हूं। यहां मैं रूबी कोड के साथ काम कर रहा हूं, लेकिन यह जावास्क्रिप्ट ( //) या हम्ल ( -#) हो सकता है।


20
स्वीकार किए गए उत्तर को उन उत्तरों में से एक में बदल दिया जाना चाहिए, जिसमें एक प्लगइन का उपयोग किए बिना टिप्पणी / अनसुधार ब्लॉक को पूरा करने के बारे में विस्तृत निर्देश हैं। वर्तमान स्वीकृत जवाब मूल रूप से एक तीसरे पक्ष के प्लग-इन में सिर्फ एक कड़ी है।
faintsignal

सर्वश्रेष्ठ मूल्यांकित उत्तर में किसी भी प्लगइन्स का उल्लेख नहीं किया गया है, @rationalis आपकी टिप्पणी भ्रामक है, क्या आप इसे सही कर सकते हैं या इसे हटा सकते हैं, धन्यवाद।
बोनोबो

जवाबों:


180

मैं एनईआरडी टिप्पणीकार स्क्रिप्ट का उपयोग करता हूं । यह आपको अपने कोड में आसानी से टिप्पणी, असहजता या टिप्पणी करने देता है।

जैसा कि टिप्पणियों में बताया गया है :

जो कोई भी उपयोग से भ्रमित है, डिफ़ॉल्ट नेता "\" है, इसलिए 10 \ cc दस पंक्तियों पर टिप्पणी करेगा और 10 \ cu उन दस पंक्तियों को अनसुना कर देगा


दिलचस्प! मैंने डॉक्टर को पढ़ा और पाया कि "सेक्सी टिप्पणी" है - बस "\" का उपयोग करें। रूबी के लिए, यह हैश टैग के बजाय कई लाइनों का उपयोग करेगा =beginऔर =endटिप्पणी करेगा ।
3

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

136
यहाँ मत रोको। अधिकांश वोट किए गए उत्तर किसी भी प्लगइन्स की आवश्यकता के बिना नीचे हैं। stackoverflow.com/a/15588798/2117868 और stackoverflow.com/a/1676690/2117868
kuttumiah

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

@ करोलस मैं आपसे सहमत होता अगर प्रश्न "क्या जल्दी है" के बजाय "सबसे अच्छा तरीका" के साथ शुरू हुआ था।
19 को सीटी

2539

उन कार्यों के लिए मैं ज्यादातर समय ब्लॉक चयन का उपयोग करता हूं ।

अपने कर्सर को पहले #वर्ण पर रखें , दबाएँ CtrlV(या CtrlQgVim के लिए), और अंतिम टिप्पणी लाइन और प्रेस तक नीचे जाएँ x, जो सभी #वर्णों को लंबवत रूप से हटा देगा ।

टिप्पणी के लिए पाठ का एक ब्लॉक लगभग समान है:

  1. सबसे पहले, पहली पंक्ति पर जाएं जिसे आप टिप्पणी करना चाहते हैं, दबाएं CtrlV। यह संपादक को VISUAL BLOCKमोड में डाल देगा ।
  2. फिर तीर कुंजी का उपयोग करके अंतिम पंक्ति तक का चयन करें
  3. अब दबाएं ShiftI, जो संपादक को INSERTमोड में रखेगा और फिर दबाएगा #। यह पहली पंक्ति में एक हैश जोड़ देगा।
  4. फिर दबाएं Esc(इसे एक दूसरा दें), और यह #अन्य सभी चयनित लाइनों पर एक चरित्र सम्मिलित करेगा ।

डिफ़ॉल्ट रूप से डेबियन / ubuntu के साथ भेज दिया विम के छीन-डाउन संस्करण के लिए, : s/^/#इसके बजाय तीसरे चरण में टाइप करें (प्रत्येक पंक्ति के पहले चरित्र के किसी भी शेष हाइलाइटिंग को हटाया जा सकता है :nohl)।

यहाँ दृश्य संदर्भ के लिए दो छोटे स्क्रीन रिकॉर्डिंग हैं।

टिप्पणी: टिप्पणी

टिप्पणी हटाएं: टिप्पणी हटाएं


87
डिफ़ॉल्ट रूप से यह CTRL + V है। Gvim का विंडोज़ संस्करण Ctrl + Q का उपयोग करता है क्योंकि Ctrl + V पहले से ही पेस्ट के लिए उपयोग किया जाता है।
आर। मार्टिनो फर्नांडीस 21

8
@amindfv Ctrl + V, n(जहाँ n संख्या रेखाएँ हैं - 1), j, n(जहाँ n वर्ण संख्या के अनुक्रम क्रम की लंबाई - 1), l, x।
michael.bartnett

27
आप इसे '//' के साथ कैसे करेंगे?
ऑस्टिन

74
उस सेकंड का इंतजार न करने के लिए आप Esc को दो बार क्लिक कर सकते हैं;)
अहमद हेगाज़ी

44
यह मेरे लिए काम नहीं किया। शिफ्ट- I साधारण प्रविष्टि मोड में चला गया।
गेरीमिया

826

विम में ब्लॉक बाहर टिप्पणी करने के लिए:

  • प्रेस Esc(संपादन या अन्य मोड छोड़ने के लिए)
  • हिट ctrl+ v(दृश्य ब्लॉक मोड)
  • अपनी इच्छित पंक्तियों का चयन करने के लिए / तीर कुंजियों का उपयोग करें (यह सब कुछ उजागर नहीं करेगा - यह ठीक है!)
  • Shift+ i(राजधानी I)
  • इच्छित पाठ सम्मिलित करें, जैसे %
  • दबाएँ EscEsc

विक में अवरोधों को दूर करने के लिए:

  • प्रेस Esc(संपादन या अन्य मोड छोड़ने के लिए)
  • हिट ctrl+ v(दृश्य ब्लॉक मोड)
  • का उपयोग / टिप्पणी हटाएं को लाइनों का चयन करने के लिए तीर कुंजी।

    यदि आप एक से अधिक वर्णों का चयन करना चाहते हैं, तो इन विधियों में से एक का उपयोग करें या संयोजन करें:

    • अधिक पाठ का चयन करने के लिए बाएँ / दाएँ तीर कुंजियों का उपयोग करें
    • पाठ उपयोग shift+ / तीर कुंजी का चयन करने के लिए
    • आप नियमित डिलीट बटन की तरह बार-बार डिलीट कीज को नीचे धकेल सकते हैं

  • यदि आवश्यक हो तो बार-बार वर्णों को दबाएं dया xहटाएं

33
@amelia: टिप्पणी शॉर्टकट मेरे लिए काम नहीं करता है। Shift + i मुझे मोड डालने के लिए ले जाता है। क्या यह विम संस्करण पर निर्भर करता है?
user3527975

7
एक सेकंड क्यों लगता है?
कॉनर पैट्रिक

24
मेरे पास इस उत्तर के साथ एकमात्र मुद्दा यह है कि यह आपको तीर कुंजी का उपयोग करने के लिए कहता है ।
cozyconemotel

6
इसके बजाय Esc को दो बार मारो। :)
हारून अल्फोंस

21
पहली बार में टिप्पणियों ने मेरे लिए काम नहीं किया, लेकिन पढ़ने के बाद एक बार फिर ठीक काम किया: 1. सुनिश्चित करें कि आप Ctrl-V का उपयोग करते हैं, चयन के लिए V नहीं। 2. डालने पर यह दिखाई देगा जैसे आप केवल एक पंक्ति 3 को संशोधित कर रहे हैं। सभी आवेषण तब होते हैं जब आप अंत में Esc से
टकराते हैं

333

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

इन मामलों में एक कम-तकनीकी विकल्प अंतर्निहित normकमांड है, जो आपकी निर्दिष्ट सीमा में प्रत्येक पंक्ति में कोई भी मनमाना विम कमांड चलाता है। उदाहरण के लिए:

के साथ टिप्पणी # :

1. visually select the text rows (using V as usual)
2. :norm i#

यह प्रत्येक पंक्ति के प्रारंभ में "#" सम्मिलित करता है। ध्यान दें कि जब आप टाइप करते हैं: रेंज भर जाएगा, तो यह वास्तव में जैसा दिखेगा:'<,'>norm i#

अधूरापन # :

1. visually select the text as before (or type gv to re-select the previous selection)
2. :norm x

यह प्रत्येक पंक्ति का पहला वर्ण हटाता है। अगर मैंने एक 2-char टिप्पणी का उपयोग किया है जैसे कि // तो मैं बस :norm xxदोनों char को हटाने के लिए करूँगा ।

यदि टिप्पणियों को ओपी के प्रश्न के रूप में प्रेरित किया जाता है, तो आप अपने विलोपन को इस तरह से लंगर डाल सकते हैं:

:norm ^x

जिसका अर्थ है "पहले गैर-अंतरिक्ष वर्ण पर जाएं, फिर एक वर्ण हटाएं"। ध्यान दें कि ब्लॉक चयन के विपरीत, यह तकनीक काम करती है भले ही टिप्पणियों में असमान इंडेंटेशन हो!

नोट : चूँकि normशाब्दिक रूप से सिर्फ नियमित vim कमांड्स को निष्पादित किया जा रहा है, आप केवल टिप्पणियों तक ही सीमित नहीं हैं, आप प्रत्येक पंक्ति में कुछ जटिल संपादन भी कर सकते हैं। यदि आपको अपने कमांड अनुक्रम के भाग के रूप में भागने के चरित्र की आवश्यकता है, तो ctrl-v टाइप करें, फिर एस्केप कुंजी को दबाएं (या इससे भी आसान, बस एक त्वरित मैक्रो रिकॉर्ड करें और फिर प्रत्येक लाइन पर उस मैक्रो को निष्पादित करने के लिए मानक का उपयोग करें)।

नोट 2 : यदि आप स्वयं का भरपूर उपयोग कर पाते हैं, तो आप निश्चित रूप से मैपिंग भी जोड़ सकते हैं norm। उदाहरण के लिए ~ / .vimrc में निम्नलिखित लाइन डालने से आप अपना दृश्य चयन ctrl-nकरने के :normबाद टाइप कर सकते हैं

vnoremap <C-n> :norm

नोट 3 : नंगे-हड्डियों वाले विम का कभी-कभी normकमांड इसमें संकलित नहीं होता है, इसलिए बीफ़्ड संस्करण का उपयोग करना सुनिश्चित करें, अर्थात आमतौर पर / usr / बिन / vim, न कि बिन / vi

(इस जवाब में शामिल किए गए सुधारों के लिए @Manbroski और @rakslice को धन्यवाद)


मुझे लगा कि जब तक मैं इस उत्तर को पढ़ने के लिए स्क्रॉल नहीं करता, तब तक यह रास्ता था stackoverflow.com/a/1676690/850996 CTRL + V का उपयोग करके ब्लॉक चयन (जैसा कि SHIFT + V के साथ लाइन चयन के विपरीत) टिप्पणी पर बहुत अच्छा नियंत्रण देता है चरित्र सम्मिलन होता है।
श्याम हाबड़ाका

2
@ श्यम ctrl-v तकनीक को विशेष ब्लॉक-सिलेक्शन-केवल कमांड के साथ जोड़ा गया है, जो कि अधिकांश अन्य उत्तर सुझाते हैं; हालाँकि मुझे व्यक्तिगत रूप से "आदर्श" तकनीक का पता चला है जिसे मैंने आसान बताया है क्योंकि यह आदर्श कमांड के अलावा किसी भी नए सिंटैक्स को पेश नहीं करता है, इसलिए मैं पुन: उपयोग कर सकता हूं जो मैं पहले से ही विम के बारे में जानता हूं।
मैग्नस

2
एक इंडेंट ब्लॉक को अनइंस्टॉल करने के लिए, यह कहना उपयोगी है :norm ^x। इस पद्धति में सामान्य रूप से क्षेत्र चयन (जैसे vi{घुंघराले ब्रेस के अंदर चयन किया जाएगा) के साथ काम करने का लाभ है । ऐसे टेक्स्ट ऑब्जेक्ट चयनकर्ता के साथ काम नहीं करते हैं Visual Block
ivan-k

1
आह, मैंने अभी पता लगाया है - सेंटोस 6 पर /bin/viविम 7.2 है, लेकिन यह एक अलग बिल्ड है /usr/bin/vim, और इसमें इस तरह की विशेषताएं हैं।
राकसलिस

3
यह अब तक का सबसे अच्छा जवाब है। खासकर जब vipएक पूरे पैराग्राफ का चयन करने के लिए संयुक्त ।
meh

121

मेरे पास निम्नलिखित हैं .vimrc:

" Commenting blocks of code.
autocmd FileType c,cpp,java,scala let b:comment_leader = '// '
autocmd FileType sh,ruby,python   let b:comment_leader = '# '
autocmd FileType conf,fstab       let b:comment_leader = '# '
autocmd FileType tex              let b:comment_leader = '% '
autocmd FileType mail             let b:comment_leader = '> '
autocmd FileType vim              let b:comment_leader = '" '
noremap <silent> ,cc :<C-B>silent <C-E>s/^/<C-R>=escape(b:comment_leader,'\/')<CR>/<CR>:nohlsearch<CR>
noremap <silent> ,cu :<C-B>silent <C-E>s/^\V<C-R>=escape(b:comment_leader,'\/')<CR>//e<CR>:nohlsearch<CR>

अब आप ,ccएक लाइन पर टिप्पणी करने और एक लाइन ,cuको अनइंस्टॉल करने के लिए टाइप कर सकते हैं (सामान्य और विजुअल मोड दोनों में काम करता है)।

(मैंने इसे कई साल पहले किसी वेबसाइट से चुराया था, इसलिए मैं पूरी तरह से समझा नहीं सकता कि यह कैसे काम करता है :)। एक टिप्पणी है जहाँ इसे समझाया गया है।)


शॉर्टकट का क्या उपयोग करना चाहिए? मैं काफी vim कोड से ही सुनिश्चित नहीं कर सकता!
गिदोन

सामान्य या दृश्य मोड में, वर्तमान लाइन पर टिप्पणी करने के लिए ", cc" (3 वर्ण अनुक्रम) का उपयोग करें, और ", cu" वर्तमान लाइन को अनसुना करने के लिए।
दान

8
मुझें यह पसंद है :)! धन्यवाद! एक साइड नोट पर मुझे समझाने के लिए मुश्किल नहीं है। a) यह एक कमांड को हटाता है (गैर पुनरावर्ती [इसे देखें] ( stackoverflow.com/questions/3776117/… ) तो अब जब आप प्रेस करते हैं, तो cc: ... चीज निष्पादित हो जाती है। b) अब यह मूल रूप से एक sed (s) है। / क्या / टोहाट / जहां) कमांड बदलना ^ (लाइन की शुरुआत) सही ढंग से सेट की गई टिप्पणी चरित्र पर आधारित फ़ाइल के प्रकार पर आधारित है जो आपने खोले हैं सी) के रूप में मूक चीज़ों के लिए वे सिर्फ कमांड से आउटपुट दबाते हैं। d): nohlsearch इसे सेड सर्च को उजागर करने से रोकता है
ramrunner

14
ध्यान दें, यह ऑटोकॉमैंड को लोड करने का सही तरीका नहीं है। उन्हें एक एग्रुप के अंदर होना चाहिए या फिर उन्हें कई बार विम करने के लिए जोड़ा जाएगा और बहुत धीमा होने का कारण होगा। देखें: learnvimscriptthehardway.stevelosh.com/chapters/14.html । मैंने इस सवाल पर अपना जवाब जोड़ दिया है।

अच्छा लगा। यह सवाल का एक वास्तविक उत्तर है कि आपके पास ब्लॉक चयन करते समय मुझे (अन) टिप्पणी कैसे करनी थी।
इरविन रूइजाक्कर्स

119

निर्दिष्ट करें कि कौन सी पंक्तियों को टिप्पणी में देना है:

पंक्ति संख्याएँ प्रकट करें:

:set number

फिर

:5,17s/^/#/     this will comment out line 5-17

या यह:

:%s/^/#/        will comment out all lines in file

11
चूंकि आप प्रत्येक पंक्ति के 1 चार्ट को बदल रहे हैं, इसलिए आपको अंत में "जी" की आवश्यकता नहीं है
मैग्नस

1
एम्बेडेड बॉक्स पर कुछ vims (जैसे ओपनरट) में विजुअल मोड नहीं है .. इसलिए यह भयानक है :)
kim0

क्या आप बता सकते हैं कि :%s/^/#/gसभी लाइनें बाहर क्यों आएंगी? मैं प्रतिशत संकेत सोच रहा था%
बिन

18
और इन पंक्तियों को अनसुना करने के लिए आप लिख सकते हैं: ५,१l s / ^ # /
इराक्लीस मुटिडिस

महान! यह वास्तव में अच्छी तरह से ब्लॉक चयन के साथ काम करता है: va{या varरूबी के लिए।
अर्तुर मल्लेकी

58

यहाँ है कि मैं यह कैसे करते हैं:

  1. पहली पंक्ति पर पहले चरित्र पर जाएं जिस पर आप टिप्पणी करना चाहते हैं।

  2. मारो Ctrl+ qजाँचने में या Ctrl+ vविम में, तो तर्ज पर पहले वर्ण का चयन करने के बाहर टिप्पणी करने के लिए नीचे जाना।

  3. फिर प्रेस करें c, और टिप्पणी चरित्र जोड़ें।

Uncommenting उसी तरह से काम करता है, जैसे टिप्पणी चरित्र के बजाय एक स्थान टाइप करें।


44
cपहले पात्र को भी हटा देता है। CMS का उत्तर सही है यानी Iटिप्पणी अक्षर (एस) को टाइप करना और फिर Esc(यह
विम्स पर है

6
यह काम करता है, सिवाय 'आर' को चरण तीन पर दबाने की जरूरत है, न कि 'सी'।
डेविड बाउकम

वैकल्पिक रूप से आप ESCदबाने के बाद दो बार दबा सकते हैं cऔर यह चाल
चलनी

ये सभी विकल्प लाइन पर पहले वर्ण के विनाशकारी हैं।
जोसिया

36

मैं अपने .vimrc फ़ाइल के लिए एक सरल जोड़ के साथ आया हूं जो बहुत अच्छी तरह से काम करता है और इसे आसानी से बढ़ाया जा सकता है। आप बस comment_map और उसके कमेंट लीडर में एक नया फिलामेंट जोड़ सकते हैं।

मैंने सामान्य और दृश्य मोड में एक मैपिंग जोड़ा, लेकिन आप अपनी पसंद के कुछ भी रीमैप कर सकते हैं। मैं केवल 'टॉगल' स्टाइल फंक्शन करना पसंद करता हूं। एक भालू जिसमें कई मैपिंग आदि होते हैं।

let s:comment_map = { 
    \   "c": '\/\/',
    \   "cpp": '\/\/',
    \   "go": '\/\/',
    \   "java": '\/\/',
    \   "javascript": '\/\/',
    \   "lua": '--',
    \   "scala": '\/\/',
    \   "php": '\/\/',
    \   "python": '#',
    \   "ruby": '#',
    \   "rust": '\/\/',
    \   "sh": '#',
    \   "desktop": '#',
    \   "fstab": '#',
    \   "conf": '#',
    \   "profile": '#',
    \   "bashrc": '#',
    \   "bash_profile": '#',
    \   "mail": '>',
    \   "eml": '>',
    \   "bat": 'REM',
    \   "ahk": ';',
    \   "vim": '"',
    \   "tex": '%',
    \ }

function! ToggleComment()
    if has_key(s:comment_map, &filetype)
        let comment_leader = s:comment_map[&filetype]
        if getline('.') =~ "^\\s*" . comment_leader . " " 
            " Uncomment the line
            execute "silent s/^\\(\\s*\\)" . comment_leader . " /\\1/"
        else 
            if getline('.') =~ "^\\s*" . comment_leader
                " Uncomment the line
                execute "silent s/^\\(\\s*\\)" . comment_leader . "/\\1/"
            else
                " Comment the line
                execute "silent s/^\\(\\s*\\)/\\1" . comment_leader . " /"
            end
        end
    else
        echo "No comment leader found for filetype"
    end
endfunction


nnoremap <leader><Space> :call ToggleComment()<cr>
vnoremap <leader><Space> :call ToggleComment()<cr>

ध्यान दें:

मैं फ़ाइल प्रकारों / लोडिंग में किसी भी कॉलबैक या हुक का उपयोग नहीं करता, क्योंकि मुझे लगता है कि वे Vim के स्टार्टअप को .vimrcस्टैटिक फंक्शन / मैप से अधिक धीमा करते हैं, लेकिन यह सिर्फ मेरी प्राथमिकता है। मैंने इसे सरल और अच्छा प्रदर्शन करने की कोशिश भी की है। यदि आप ऑटोकॉमैंड्स का उपयोग करते हैं, तो आपको उन्हें एक ऑटोकॉमैंड समूह में रखना सुनिश्चित करना होगा या अन्यथा कॉलबैक को प्रति फ़ाइल लोड किए गए कई बार फ़िलाटाइप में जोड़ा जाता है और बहुत अधिक प्रदर्शन गिरावट का कारण बनता है।


1
मैं पूरी तरह से नया हूँ, मैप किए गए फ़ंक्शन को टॉगल करने के लिए मुझे कौन सा बटन दबाना चाहिए? <leader><Space>तल पर वह घोषणा क्या है ?
जेन्स कोहल

2
आप <नेता> की जगह ले सकते हैं जैसे <,>। फिर आप दबाएं, SPACE और यह लाइन की टिप्पणी स्थिति को टॉगल करेगा। लीडर जो भी आपका लीडर है, विम का डिफॉल्ट <लीडर> है, लेकिन आप अपना खुद का "लेट मैपलाइडर = ','" जैसे सेट कर सकते हैं

महान जवाब, एक झुंझलाहट, हालांकि, टिप्पणी करने वाले ब्लॉक जिसमें पहले से ही कुछ टिप्पणियां हैं, बिना टिप्पणी वाली लाइनों के लिए टिप्पणी की जाएगी। उदाहरण के लिए QtCreator केवल टिप्पणियों को हटाता है यदि सभी गैर-रिक्त लाइनों में प्रमुख टिप्पणियां हैं, अन्यथा एक प्रमुख टिप्पणी जोड़ें।
सुविचार ४२

1
मैंने एक अलग संस्करण का उपयोग करके बनाया है \zsऔर \zeरेक्सक्स ट्रिक, कोड थोड़ा छोटा हो गया है। आप इसे यहाँ
SergioAraujo

33

टिप्पणियों को टॉगल करें

यदि आप सभी की जरूरत है टिप्पणी टॉगल है मैं बजाय tpope द्वारा commentary.vim के साथ जाना होगा

यहां छवि विवरण दर्ज करें

स्थापना

रोगज़नक़:

cd ~/.vim/bundle
git clone git://github.com/tpope/vim-commentary.git

विम प्लग:

Plug 'tpope/vim-commentary'

Vundle:

Plugin 'tpope/vim-commentary'

इसके अलावा अनुकूलन

इसे अपने .vimrc फ़ाइल में जोड़ें: noremap <leader>/ :Commentary<cr>

आप अब उदात्त और एटम की तरह, Leader+ दबाकर टिप्पणियों को टॉगल कर सकते हैं /


धन्यवाद! क्या यह भविष्य में किसी समय html के अंदर टिप्पणी करने वाले css का समर्थन करने वाला है?
डैन ओक

25

पाठ की आयतों का चयन करने के लिए कंट्रोल-वी का उपयोग करें: पहले #वर्ण पर जाएं, टाइप करें Ctrl+ V, एक बार दाईं ओर ले जाएं, और फिर नीचे, टिप्पणियों के अंत तक। अब टाइप करें x: आप सभी #वर्णों को एक स्थान से हटा रहे हैं ।


18

यहाँ मेरा एक भाग है .vimrc:

"insert and remove comments in visual and normal mode
vmap ,ic :s/^/#/g<CR>:let @/ = ""<CR>
map  ,ic :s/^/#/g<CR>:let @/ = ""<CR>
vmap ,rc :s/^#//g<CR>:let @/ = ""<CR>
map  ,rc :s/^#//g<CR>:let @/ = ""<CR>

सामान्य और दृश्य मोड में, यह मुझे ,icटिप्पणियों को सम्मिलित करने और टिप्पणियों ,rcको हटाने के लिए दबाता है ।


यह एक शुरुआत के लिए बहुत उपयोगी है कि कैसे खुद लिखना सीखना है .vimrc
शीतलक

3
mapसामान्य और दृश्य मोड को कवर करता है, इसलिए आपको vmapलाइनों की आवश्यकता नहीं है
DoubleDown

बेहतर जगह है after/ftplugin/ruby.vim
संतोष कुमार

भी उपयोग करें <leader>icऔर<leader>rc
हंस क्रिस्टियन

15

मैं vim 7.4 का उपयोग करता हूं और यह मेरे लिए काम करता है।
मान लें कि हम टिप्पणी कर रहे हैं / 3 पंक्तियों को अनसुना कर रहे हैं।

टिप्पणी करने के लिए:

लाइन आरंभ में कोई टैब / जगह है, तो:
ctrl + Vतो jjjफिर shift + I (cappital i)तो //उसके बाद esc esc
अगर लाइन में टैब / जगह है आप अभी भी शुरुआत के ऊपर या के लिए स्वैप कर सकते हैं c:
ctrl + Vतो jjjफिर cतो //फिर esc esc

टिप्पणी हटाएं करने के लिए:

: यदि लाइनों आरंभ में कोई टैब / जगह है
ctrl + Vतो jjjफिर ll (lower cap L)तोc

अगर लाइनों शुरुआत में टैब / अंतरिक्ष, से अधिक है तो आप अंतरिक्ष से एक है और है esc
ctrl + Vतो jjjफिर ll (lower cap L)उसके बाद cतो spaceफिरesc


9

मुझे tcomment प्लगइन का उपयोग करना पसंद है: http://www.vim.org/scripts/script.php?script_id=1173

मैंने एक पंक्ति या कोड के हाइलाइट किए गए ब्लॉक पर टिप्पणी करने के लिए gc और gcc की मैपिंग की है। यह फ़ाइल प्रकार का पता लगाता है और वास्तव में अच्छी तरह से काम करता है।


9

मेरे आगे के 30 जवाबों के साथ, मैं और भी आसान समाधान देने की कोशिश करूँगा: #पंक्ति की शुरुआत में डालें । फिर एक लाइन नीचे जाएं और डॉट ( .) दबाएं । दोहराने के लिए, है j, ., j, ., आदि ... टिप्पणी हटाएं करने के लिए, एक को हटाने #(आप हिट कर सकते हैं xसे अधिक #), और रिवर्स का उपयोग कर k, ., आदि ...


1
यह एक बहुत ही सरल जवाब है, यहां तक ​​कि शुरुआत भी समझ और उपयोग कर सकते हैं। हालांकि, यह टिप्पणी करने के लिए बड़ी मात्रा में लाइनों पर बहुत धीरे काम करता है। अपने चारों ओर काम करने के लिए आप I#<Esc>jबफर को लिख सकते हैं - कह सकते हैं, c- और फिर करें 10@c, या जो भी लाइनें आपको सूट करती हैं।
Daerdemandt

9

Vi में निम्नलिखित तीन पंक्तियों को कैसे अनियोजित करें:

#code code
#code
#code code code

कर्सर को ऊपरी बाएँ #प्रतीक पर रखें और दबाएँ CtrlV। यह आपको विजुअल ब्लॉक मोड में रखता है। Jसभी तीन पंक्तियों का चयन करने के लिए नीचे तीर या तीन बार दबाएँ । फिर दबाएं D। सभी टिप्पणियाँ गायब हो जाती हैं। पूर्ववत करने के लिए, दबाएँ U

Vi में निम्नलिखित तीन पंक्तियों की टिप्पणी कैसे करें:

code code
code
code code code

कर्सर को ऊपरी बाएँ वर्ण पर रखें, दबाएँ CtrlV। यह आपको विजुअल ब्लॉक मोड में रखता है। प्रेस या Jतीन बार सभी तीन लाइनों को चुनने के लिए। फिर दबायें:

I//Esc

यह एक पूंजी I, // और एस्केप है।

जब आप दबाते हैं ESC, तो सभी चयनित लाइनें आपके द्वारा निर्दिष्ट टिप्पणी प्रतीक प्राप्त करेंगी।


1
यदि आप "ऊपरी बाएं" हैश को याद करते हैं, तो आप कर्सर को दृश्य मोड में "दूसरी तरफ" ले जाने के लिए दबा सकते हैं ।
dylnmc

मुझे लगता है कि यह उपयोग करने के लिए सबसे अच्छा है। किसी भी तीसरे पक्ष की आवश्यकता नहीं है, बस देशी विम का उपयोग करें
अराडी नुसावन

सबसे अच्छा जवाब, सरल और बिना किसी तीसरे पक्ष के
aze

8

हां, इस प्रश्न के पहले से ही 33 (ज्यादातर दोहराव वाले) उत्तर हैं।

यहाँ विम में लाइनों टिप्पणी बाहर करने के लिए कैसे करने के लिए एक और तरीका है: गतियों । मूल विचार यह है कि एक ही पद्धति का उपयोग करके लाइनों को टाइप करने yipया 2 पंक्तियों को हटाने के द्वारा पैराग्राफ को कमेंट या अनकम्प्लीमेंट करना है dj

यह दृष्टिकोण आपको ऐसा करने की अनुमति देगा:

  • ccjअगली 2 पंक्तियों पर टिप्पणी करने के लिए, और cukउन्हें अनसुना करने के लिए;

  • cci{एक ब्लॉक के बाहर टिप्पणी करने के लिए, और cui{इसे अनसुना करने के लिए;

  • ccipएक संपूर्ण पैराग्राफ बाहर टिप्पणी करने के लिए, और cuipइसे अनइंस्टॉल करने के लिए।

  • ccGअंतिम पंक्ति तक सब कुछ टिप्पणी करने के लिए, और cuggपहली पंक्ति तक सब कुछ करने के लिए।

आप सभी की जरूरत है 2 कार्य है कि गति पर काम कर रहे हैं , और प्रत्येक समारोह के लिए 2 mappings। सबसे पहले, मैपिंग:

nnoremap <silent> cc  :set opfunc=CommentOut<cr>g@
vnoremap <silent> cc  :<c-u>call  CommentOut(visualmode(), 1)<cr>
nnoremap <silent> cu  :set opfunc=Uncomment<cr>g@
vnoremap <silent> cu  :<c-u>call  Uncomment(visualmode(), 1)<cr>

( g@ऑपरेटर और operatorfuncचर के बारे में मैनुअल देखें ।)

और अब कार्य:

function! CommentOut(type, ...)
  if a:0
    silent exe "normal!  :'<,'>s/^/#/\<cr>`<"
  else
    silent exe "normal!  :'[,']s/^/#/\<cr>'["
  endif
endfunction

function! Uncomment(type, ...)
  if a:0
    silent exe "normal!  :'<,'>s/^\\(\\s*\\)#/\\1/\<cr>`<"
  else
    silent exe "normal!  :'[,']s/^\\(\\s*\\)#/\\1/\<cr>`["
  endif
endfunction

अपने स्वाद के अनुरूप ऊपर दिए गए नियमित भावों को संशोधित करें जहाँ #होना चाहिए:


"पूरी तरह से नया [...] गति" ऊपर से थोड़ा सा लगता है: t_comment और vim-commentary plugins, जो दोनों इस उत्तर से पहले हैं, आपको गति का उपयोग करके टिप्पणी करने की अनुमति देते हैं।
रिच

अच्छी चीज़! Upvoted। (मुझे भी लगता है कि मैं पहले से उपयोग किए जा रहे प्लगइन के बजाय इस दृष्टिकोण का उपयोग करना शुरू कर सकता हूं, इसलिए इसे लिखने के लिए धन्यवाद!)
रिच

7

यदि आप पहले से ही लाइन नंबर जानते हैं, तो n,ms/# //काम करेगा।


वास्तव में ऐसा होना चाहिए: n, ms / ^ \ s। # // क्योंकि आपके पास सफेद स्थान हो सकता है और एक के साथ हैश का पालन नहीं हो सकता है
Huffman

7

मैं पहली और आखिरी पंक्तियों (मा और एमबी) को चिह्नित करता हूं, और फिर करता हूं: 'ए,' बी एस / ^ # //


6

मैं एन्हैंस्ड कॉम का उपयोग करता हूं । यह मेरी ज़रूरत की हर चीज़ पर टिप्पणी करता है (प्रोग्रामिंग लैंग्वेज, स्क्रिप्ट, कॉन्फिग फाइल)। मैं इसे विज़ुअल-मोड बाइंडिंग के साथ उपयोग करता हूं। बस उस पाठ का चयन करें जिसे आप टिप्पणी करना चाहते हैं और सह / cc / cd दबाएं।

vmap co :call EnhancedCommentify('','guess')<CR>
vmap cc :call EnhancedCommentify('','comment')<CR>
vmap cd :call EnhancedCommentify('','decomment')<CR> 

5

मैंने फिल और जक्नो के उत्तर को संयुक्त किया और रिक्त स्थान के साथ अभद्र टिप्पणी की:

autocmd FileType c,cpp,java,scala let b:comment_leader = '//'
autocmd FileType sh,ruby,python   let b:comment_leader = '#'
autocmd FileType conf,fstab       let b:comment_leader = '#'
autocmd FileType tex              let b:comment_leader = '%'
autocmd FileType mail             let b:comment_leader = '>'
autocmd FileType vim              let b:comment_leader = '"'
function! CommentToggle()
    execute ':silent! s/\([^ ]\)/' . b:comment_leader . ' \1/'
    execute ':silent! s/^\( *\)' . b:comment_leader . ' \?' . b:comment_leader . ' \?/\1/'
endfunction
map <F7> :call CommentToggle()<CR>

5

इस जीवन को बदलने के लिए प्लगइन tpopeकहा जाता हैvim-commentary

https://github.com/tpope/vim-commentary

यह प्लगइन प्रदान करता है :

  • मानसिक स्वास्थ्य
  • समुचित रूप से टिप्पणी की गई
  • खाली / अनावश्यक लाइनों पर टिप्पणी नहीं करता है

उपयोग :

  • Vundle (या पथोजेन मुझे लगता है) के माध्यम से स्थापित करें।
  • अपने टेक्स्ट को हाइलाइट करें और प्रेस करें :जो कि इस प्रकार दिखाई देगा:<,'>
  • यहां कमेंट्री टाइप करें :<,'>Commentaryऔर दबाएं Enter
  • बूम। तुम्हारी किया कली

vim-commentary(सभी tpope के प्लगइन्स की तरह) मुहावरेदार विम का बोनस है। gc= "टिप्पणी जाओ", gcap= "एक टिप्पणी टिप्पणी जाओ", आदि।
सुनहरा अनुपात

क्या यह जिम स्टीवर्ट के टिम पोप जवाब का सिर्फ एक संपादन हो सकता था?
jdk1.0

5

यह उत्तर सबसे उपयोगी है यदि आप प्लगइन्स को स्थापित करने में असमर्थ हैं, लेकिन आप अभी भी चाहते हैं कि आपके टिप्पणी वर्ण मौजूदा इंडेंटेशन स्तरों का पालन करें।

यह जवाब एक में चिपकाने के लिए सही कोड को दिखाने के 1 करने के लिए यहाँ) है .vimrcप्राप्त करने के लिए vim 7.4+टिप्पणी / जबकि दृश्य मोड में 1 शॉर्टकट और 2) के साथ खरोज स्तर रखते हुए यह समझाने के लिए uncommenting ब्लॉक करने के लिए। यहाँ कोड है:

let b:commentChar='//'
autocmd BufNewFile,BufReadPost *.[ch]    let b:commentChar='//'
autocmd BufNewFile,BufReadPost *.cpp    let b:commentChar='//'
autocmd BufNewFile,BufReadPost *.py    let b:commentChar='#'
autocmd BufNewFile,BufReadPost *.*sh    let b:commentChar='#'
function! Docomment ()
  "make comments on all the lines we've grabbed
  execute '''<,''>s/^\s*/&'.escape(b:commentChar, '\/').' /e'
endfunction
function! Uncomment ()
  "uncomment on all our lines
  execute '''<,''>s/\v(^\s*)'.escape(b:commentChar, '\/').'\v\s*/\1/e'
endfunction
function! Comment ()
  "does the first line begin with a comment?
  let l:line=getpos("'<")[1]
  "if there's a match
  if match(getline(l:line), '^\s*'.b:commentChar)>-1
    call Uncomment()
  else
    call Docomment()
  endif
endfunction
vnoremap <silent> <C-r> :<C-u>call Comment()<cr><cr>

यह काम किस प्रकार करता है:

  • let b:commentChar='//': यह vim में एक वैरिएबल बनाता है। bयहाँ गुंजाइश है, जो इस मामले में बफर करने के लिए निहित है, वर्तमान में खोला फ़ाइल अर्थ को दर्शाता है। आपके टिप्पणी वर्ण तार हैं और उद्धरणों में लिपटे रहने की आवश्यकता है, उद्धरण उन चीजों का हिस्सा नहीं हैं जिन्हें टॉगल करने वाली टिप्पणियों में प्रतिस्थापित किया जाएगा।

  • autocmd BufNewFile,BufReadPost *...: ऑटोकॉमैंड्स अलग-अलग चीजों पर ट्रिगर करते हैं, इस मामले में, ये ट्रिगर होते हैं जब एक नई फाइल या रीड फाइल एक निश्चित एक्सटेंशन के साथ समाप्त होती है। एक बार ट्रिगर हो जाने के बाद, निम्न कमांड को निष्पादित करें, जो हमें commentCharफाइलाइप के आधार पर बदलने की अनुमति देता है । ऐसा करने के अन्य तरीके हैं, लेकिन वे नौसिखियों (मेरे जैसे) के लिए अधिक भ्रमित हैं।

  • function! Docomment() : कार्य शुरू करने के साथ घोषित किए जाते हैं function और समाप्त होने के साथendfunction । कार्य एक पूंजी से शुरू होना चाहिए। यह !सुनिश्चित करता है कि यह फ़ंक्शन Docomment()इस संस्करण के साथ परिभाषित किसी भी पिछले फ़ंक्शन को ओवरराइट करता है Docomment()। मेरे बिना !, मेरे पास त्रुटियां थीं, लेकिन ऐसा इसलिए हो सकता है क्योंकि मैं vim कमांड लाइन के माध्यम से नए कार्यों को परिभाषित कर रहा था।

  • execute '''<,''>s/^\s*/&'.escape(b:commentChar, '\/').' /e': निष्पादित एक कमांड को बुलाता है। इस मामले में, हम निष्पादित कर रहे हैं substitute, जो एक सीमा ले सकता है (डिफ़ॉल्ट रूप से यह वर्तमान लाइन है) जैसे %कि पूरे बफर के लिए या '<,'>हाइलाइट किए गए अनुभाग के लिए। ^\s*किसी भी राशि के व्हाट्सएप के बाद शुरू होने वाली रेखा से मेल खाने के लिए regex है, जिसे तब (कारण &) से जोड़ा जाता है । .यहाँ, स्ट्रिंग संयोजन के लिए प्रयोग किया जाता है के बाद सेescape() सकते हैं उद्धरण में लिपटे नहीं किया। escape()आपको उन चरित्रों से बचने की अनुमति देता है commentCharजो तर्कों (इस मामले में, \और /) से मेल खाते हैं \। इसके बाद, हम अपने substituteस्ट्रिंग के अंत के साथ फिर से समतल करते हैं , जिसमें हैeझंडा। यह ध्वज हमें चुपचाप विफल होने देता है, जिसका अर्थ है कि यदि हम किसी दिए गए लाइन पर मैच नहीं पाते हैं, तो हम इसके बारे में चिल्लाएंगे नहीं। एक पूरे के रूप में, यह पंक्ति हमें पहले पाठ से ठीक पहले एक स्थान के बाद एक टिप्पणी चरित्र डालती है, जिसका अर्थ है कि हम अपना इंडेंटेशन स्तर रखते हैं।

  • execute '''<,''>s/\v(^\s*)'.escape(b:commentChar, '\/').'\v\s*/\1/e': यह हमारे पिछले विशाल लंबे आदेश के समान है। इस के लिए अद्वितीय, हमारे पास है \v, जो यह सुनिश्चित करता है कि हमें अपने से बचने की ज़रूरत नहीं है (), और 1, जो हमारे द्वारा बनाए गए समूह को संदर्भित करता है ()। मूल रूप से, हम एक ऐसी पंक्ति से मेल खाते हैं, जो किसी भी राशि के व्हाट्सएप से शुरू होती है और उसके बाद किसी भी राशि के व्हाट्सएप के बाद हमारा कमेंट कैरेक्टर और हम केवल व्हाट्सएप का पहला सेट रखते हैं। eयदि हम उस लाइन पर कोई टिप्पणी चरित्र नहीं रखते हैं तो फिर से हमें चुपचाप विफल होने दें।

  • let l:line=getpos("'<")[1] : यह एक वैरिएबल को बहुत सेट करता है जैसे हमने अपने कमेंट कैरेक्टर के साथ किया था, लेकिन l यह स्थानीय स्कोप (इस फंक्शन के लिए स्थानीय) को दर्शाता है। getpos()इस स्थिति में, हमारे हाइलाइटिंग की शुरुआत, और [1]इसका मतलब है कि हम केवल पंक्ति संख्या के बारे में परवाह करते हैं, स्तंभ संख्या जैसी अन्य चीजों के बारे में नहीं।

  • if match(getline(l:line), '^\s*'.b:commentChar)>-1: आप जानते हैं कि कैसे ifकाम करता है। match()जाँच करता है कि पहली चीज़ में दूसरी चीज़ शामिल है, इसलिए हम उस रेखा को पकड़ लेते हैं जिस पर हमने अपनी हाइलाइटिंग शुरू की है, और जाँचें कि क्या यह व्हाट्सएप के साथ शुरू होता है और उसके बाद हमारा चरित्र। match()इंडेक्स लौटाता है जहां यह सच है, और -1अगर कोई मैच नहीं मिला। चूंकि ifसभी नॉनज़रो संख्याओं का सही मूल्यांकन करने के लिए, हमें अपने आउटपुट की तुलना यह देखने के लिए करनी है कि क्या यह -1 से अधिक है। में तुलनाvimरिटर्न 0 अगर गलत है और 1 अगर सही है, तो वही है जो ifसही मूल्यांकन करना चाहता है।

  • vnoremap <silent> <C-r> :<C-u>call Comment()<cr><cr>: का vnoremapअर्थ है दृश्य मोड में निम्न कमांड को मैप करें, लेकिन इसे पुनरावर्ती रूप से मैप न करें (मतलब किसी भी अन्य कमांड को न बदलें जो अन्य तरीकों से उपयोग कर सकते हैं)। मूल रूप से, यदि आप एक विम नौसिखिया हैं, तो हमेशा noremapयह सुनिश्चित करने के लिए उपयोग करें कि आप चीजों को तोड़ न दें। <silent>इसका मतलब है "मुझे आपके शब्द नहीं चाहिए, बस आपके कार्य" और यह बताता है कि कमांड लाइन में कुछ भी प्रिंट न करें। <C-r>वह चीज है जो हम मैप कर रहे हैं, जो इस मामले में ctrl + r है (ध्यान दें कि आप इस मैपिंग के साथ सामान्य मोड में "redo" के लिए अभी भी सामान्य रूप से Cr का उपयोग कर सकते हैं)। C-uथोड़े भ्रामक है, लेकिन मूल रूप से यह सुनिश्चित करता है कि आप अपने दृश्य हाइलाइटिंग का ट्रैक न खोएं ( इस उत्तर के अनुसार यह आपकी आज्ञा को शुरू करता है '<,'>जिसके साथ हम चाहते हैं)।call यहाँ के बताए गए फ़ंक्शन को निष्पादित करने के लिए विम बताता है, और <cr>मारने के लिए संदर्भित करता हैenterबटन। हमें वास्तव में फ़ंक्शन को कॉल करने के लिए इसे एक बार हिट करना होगा (अन्यथा हमने केवल टाइप किया हैcall function() कमांड लाइन पर किया है, और हमें अपने सभी विकल्पों के माध्यम से जाने के लिए इसे फिर से हिट करना होगा (वास्तव में निश्चित रूप से क्यों नहीं, लेकिन जो भी हो)।

वैसे भी, उम्मीद है कि यह मदद करता है। इस के साथ प्रकाश डाला कुछ भी ले जाएगा v, Vया C-v, जांच करता है, तो पहली पंक्ति टिप्पणी की है, हाँ अगर, सभी पर प्रकाश डाला लाइनों uncomment करने की कोशिश, और यदि नहीं, प्रत्येक पंक्ति को टिप्पणी पात्रों में से एक अतिरिक्त परत जोड़। यह मेरा इच्छित व्यवहार है; मैं नहीं चाहता था कि यह टॉगल किया जाए कि ब्लॉक में प्रत्येक पंक्ति पर टिप्पणी की गई थी या नहीं, इसलिए यह विषय पर कई प्रश्न पूछने के बाद मेरे लिए पूरी तरह से काम करता है ।



3

आप vp-commentary का उपयोग tpope ( https://github.com/tpope/vim-commentary ) द्वारा कर सकते हैं:

दबाकर दृश्य मोड दर्ज करें

'v'

फिर दबायें

'j' repeatedly or e.g 4j to select 4 row

अब आपको केवल चयन के साथ प्रवेश करना है:

'gc'

यह सभी चयनों पर टिप्पणी करेगा, रिपीड कीज़ को अनफिल करने के लिए:

'gc'

3

यहाँ एक बेसिक वन-लाइनर है, जो C-vउसके बाद आधारित हैI ऊपर उल्लिखित विधि।

यह कमांड ( :Comment) किसी भी चयनित लाइनों की शुरुआत में एक चुने हुए स्ट्रिंग को जोड़ता है।

command! -range -nargs=1 Comment :execute "'<,'>normal! <C-v>0I" . <f-args> . "<Esc><Esc>"

इस लाइन को अपने में जोड़ें .vimrcएक कमांड बनाने के जो एक एकल तर्क को स्वीकार करता है और वर्तमान चयन में प्रत्येक पंक्ति की शुरुआत में तर्क देता है।

उदाहरण के लिए यदि निम्न पाठ का चयन किया जाता है:

1
2

और आप इसे चलाते हैं: :Comment //इसका परिणाम यह होगा:

//1
//2

3

यहां उत्तरों में विचारों के साथ शुरू करते हुए, मैंने अपना स्वयं का टिप्पणी समारोह शुरू किया। यह टॉगल करता है और टिप्पणी करता है। यह जैसी चीजों को संभाल सकता है //print('blue'); //this thing is blueऔर पहली टिप्पणी को टॉगल करता है। इसके अलावा यह टिप्पणी और एक एकल स्थान जोड़ता है जहां पहला गैर व्हाट्सएप है और लाइन की शुरुआत में नहीं। टिप्पणी और इंडेंटेड लाइन के अनुसार, अतिरिक्त काम से बचने के लिए, यह व्हाट्सएप को अनावश्यक रूप से कॉपी नहीं करता है, लेकिन zooms (: h \ zs मदद के लिए) का उपयोग करता है। आशा है कि यह वहाँ से कुछ न्यूनतम मदद करता है। सुझावों का स्वागत है।

" these lines are needed for ToggleComment()
autocmd FileType c,cpp,java      let b:comment_leader = '//'
autocmd FileType arduino         let b:comment_leader = '//'
autocmd FileType sh,ruby,python  let b:comment_leader = '#'
autocmd FileType zsh             let b:comment_leader = '#'
autocmd FileType conf,fstab      let b:comment_leader = '#'
autocmd FileType matlab,tex      let b:comment_leader = '%'
autocmd FileType vim             let b:comment_leader = '"'

" l:pos   --> cursor position
" l:space --> how many spaces we will use b:comment_leader + ' '

function! ToggleComment()
    if exists('b:comment_leader')
        let l:pos = col('.')
        let l:space = ( &ft =~ '\v(c|cpp|java|arduino)' ? '3' : '2' )
        if getline('.') =~ '\v(\s*|\t*)' .b:comment_leader
            let l:space -= ( getline('.') =~ '\v.*\zs' . b:comment_leader . '(\s+|\t+)@!' ?  1 : 0 )
            execute 'silent s,\v^(\s*|\t*)\zs' .b:comment_leader.'[ ]?,,g'
            let l:pos -= l:space
        else
            exec 'normal! 0i' .b:comment_leader .' '
            let l:pos += l:space
        endif
        call cursor(line("."), l:pos)
    else
        echo 'no comment leader found for filetype'
    end
endfunction

nnoremap <Leader>t :call ToggleComment()<CR>
inoremap <Leader>t <C-o>:call ToggleComment()<CR>
xnoremap <Leader>t :'<,'>call ToggleComment()<CR>

1
मैंने आपके समाधान का थोड़ा अलग संस्करण बनाया है जो कर्सर स्थिति को भी पुनर्स्थापित करता है, मैं उस पर आपकी राय चाहूंगा।
जीथुब

ठंडा। आप मेरी पोस्ट को संपादित कर सकते हैं और अपना समाधान जोड़ सकते हैं (समानता के कारण)!
माइक

यह E488 से बचने के लिए बैकस्लैशिंग सी, सीपीपी, जावा और प्रतिस्थापन में एक अन्य विभाजक का उपयोग करने के लिए बदल गया है। इसके अलावा जावा, सीपीपी के लिए रिक्ति में परिवर्तन होता है क्योंकि टिप्पणियों में तीन वर्ण होते हैं, // प्लस स्पेस, यह l: space द्वारा किया जाता है।
SergioAraujo

3

मैं टिप्पणियों का उपयोग करता हूं । जसमीत सिंह आनंद (vim.org पर पाया गया),

यह C, C ++, Java, PHP [2345], proc, CSS, HTML, htm, XML, XHTML, vim, vimrc, SQL, sh, ksh, csh, Perl, tex, Fortran, ml, caml, ocaml, के साथ काम करता है। vhdl, haskel, और सामान्य फाइलें

यह सामान्य और विज़ुअल मोड दोनों में अलग-अलग स्रोत फ़ाइलों में टिप्पणियां और संयुक्त राष्ट्र की टिप्पणी करता है

उपयोग:

  • CtrlCएक लाइन पर टिप्पणी करने के लिए
  • CtrlXएकल लाइन को अन-कमेंट करने के लिए
  • ShiftVऔर कई लाइनों का चयन करें, फिर CtrlCचयनित कई लाइनों पर टिप्पणी करें
  • ShiftVऔर कई लाइनों का चयन करें, फिर CtrlXचयनित कई लाइनों को अन-कमेंट करने के लिए

3

इन सबका सबसे तेज़ और सबसे सहज तरीका है ), वॉक-डाउन-कमेंटिंग ऑफ़ लाइन्स और फिर उसके लिए रिमैप( वॉक-अप-अनकमिंग के । इसे आज़माएं और आप वापस नहीं जाएंगे।

में रूबी या बैश , 2-अंतरिक्ष इंडेंट के साथ:

map ) I# <Esc>j
map ( k^2x

में C / C ++ या पीएचपी , 4-अंतरिक्ष इंडेंट के साथ:

map ) I//  <Esc>j
map ( k^4x

डाउनसाइड्स वे हैं जो आप खो देते हैं (और )वाक्य-आंदोलन के लिए (लेकिन dasवहां भर सकते हैं), और आप कभी-कभी चुनिंदा-और-पर या CtrlVलंबे खंडों को संभालने के लिए वापस गिर जाएंगे । लेकिन यह बहुत दुर्लभ है।

और सी-स्टाइल के लिए, लंबी टिप्पणियों को सबसे अच्छी तरह से संभाला जाता है:

set cindent
set formatoptions=tcqr

... जो V[move]gqशब्द-लपेट को फिर से उपयोग करने के साथ अच्छी तरह से जोड़ती है ।


2

यह सरल स्निपेट मेरे .vimrc से है:

function! CommentToggle()
    execute ':silent! s/\([^ ]\)/\/\/ \1/'
    execute ':silent! s/^\( *\)\/\/ \/\/ /\1/'
endfunction

map <F7> :call CommentToggle()<CR>

यह // - टिप्पणियों के लिए है, लेकिन आप इसे अन्य पात्रों के लिए आसानी से अनुकूलित कर सकते हैं। जैसा कि jqno ने सुझाव दिया है, आप एक नेता को सेट करने के लिए ऑटोकैड का उपयोग कर सकते हैं।

यह स्वाभाविक रूप से पर्वतमाला और दृश्य मोड के साथ काम करने का एक बहुत ही सरल और कुशल तरीका है।


2

मुझे पसंद है /* ... */(C asi comments), तो यहाँ यह आपके लिए मेरी चाल है। आप निश्चित रूप से विभिन्न मामलों में उपयोग करने के लिए इसे अनुकूलित कर सकते हैं।


टिप्पणी के साथ / * ... * /

पाठ का चयन करें (शुरुआत में जाएं, दृश्य ब्लॉक शुरू करें, साथ कूदें }):

<c-V>}

चयन में लागू होने वाली कमांड टाइप करें

:norm i/* <c-v><esc>$a */

कमांड की तरह दिखेगा: :'<,'>norm i /* ^[$a */

विवरण के लिए देखें (i *)।


Uncomment द / * ... * /

पाठ का चयन करें (पहले की तरह, या आप की तरह अन्य):

<c-V>}

चयन में लागू होने वाली कमांड टाइप करें

:norm :s-\s*/\*\s*-<c-v><enter>$bbld$

कमांड की तरह दिखेगा: :'<,'>norm :s-\s*/\*\s*-^M$bbld$

विवरण के लिए देखें (ii *)।


परिणाम

प्रभाव टिप्पणियाँ लाइन द्वारा लाइन है:

Comment block
Comment block
Comment block

बन जाता है (और इसके विपरीत):

/* Comment block */
/* Comment block */
/* Comment block */

इसे कुछ mapया @regअपने रूप में सहेजना बेहतर है .vimrc, क्योंकि यह टाइप करने के लिए बहुत कुछ है। यदि आप एक /*और पसंद करते हैं*/ पूरे ब्लॉक को , तो उपयोग करें:

एक एकल / * * / पूरे ब्लॉक के साथ टिप्पणी करें

qcटिप्पणी करने के लिए एक पैराग्राफ की शुरुआत में, फिर, के साथ रिकॉर्डिंग करके इसे रजिस्टर में सहेजें :

v}di/*  */<esc>hhhp

और मत भूलना q फिर से रिकॉर्ड खत्म करने के ।

विवरण के लिए देखें (iii *)।


किसी ब्लॉक से एकल / * * / करें

सहेजें रजिस्टर में यह, का कहना है @u। ब्लॉक के अंदर कहीं भी अपना कर्सर रखें, और:

?/\*<enter>xx/\*/<enter>xx

रजिस्टर को फाइनल करके सेव करें qकमांड ।

विवरण के लिए देखें (iv *)।


परिणाम

प्रभाव कई लाइनों के लिए एक एकल टिप्पणी है:

Comment block
Comment block
Comment block

बन जाता है (और इसके विपरीत):

/* Comment block
Comment block
Comment block */

स्पष्टीकरण

(i *) यह उपयोग करके काम करता है normजो प्रत्येक चयनित पंक्ति में एक ही कमांड को बार-बार लागू करता है । कमांड केवल एक सम्मिलित करता है /*, उस पंक्ति के अंत को पाता है और एक सम्मिलित करके समाप्त करता है*/

:norm i/* <c-v><esc>$a */

(ii *) यह normखोज को दोहराने के लिए भी उपयोग करता है / प्रत्येक पंक्ति पर प्रतिस्थापित करता है। spaces /* spacesकुछ भी नहीं के लिए खोजें और बदलें। उसके बाद, पंक्ति के अंत को ढूंढता है, दो शब्दों को वापस करता है, एक अक्षर को सही करता है, अंत तक हटाएं।

:norm :s-\s*/\*\s*-<c-v><enter>$bbld$

(iii *) पैराग्राफ का चयन करता है v}, इसे हटाएं, एक टिप्पणी खोलें और बंद करें, इसके मध्य में जाएं और हटाए गए ब्लॉक को चिपकाएं।

v}di/*  */<esc>hhhp

(iv *) बीच में कहीं भी, पीछे की ओर पाता है /*, इसे हटाता है; आगे एक पाता है */, इसे हटाता है।

?/\*<enter>xx/\*/<enter>xx
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.