it-swarm.asia

ما هي طريقة سريعة للتعليق/خطوط uncomment في Vim؟

لدي ملف كود Ruby مفتوح في السادس ، وهناك أسطر علقت بها #:

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 الأول. ما هي الطريقة الفعالة للقيام بذلك في فيم؟

بشكل عام ، أبحث عن طريقة سهلة ومرنة للتعليق وخطوط عدم الارتياح. أنا هنا أتعامل مع كود Ruby ، ​​لكن يمكن أن يكون JavaScript (//) أو Haml (-#).

980
Ethan

يمكنني استخدام البرنامج النصي NERD Commenter . يتيح لك التعليق بسهولة أو إلغاء التعليق أو تبديل التعليقات في التعليمات البرمجية الخاصة بك.

كما ذكر في تعليقات :

لأي شخص يشعر بالارتباك من الاستخدام ، فإن القائد الافتراضي هو "\" لذلك فإن 10\سم مكعب ستعلق على عشرة أسطر و 10\cu لن تلغي تلك الأسطر العشرة

163
Manuel Ceron

لتلك المهام التي أستخدمها معظم الوقت اختيار كتلة .

ضع المؤشر على أول حرف # ، اضغط CtrlV (أو CtrlQ ل gVim) ، والنزول حتى آخر سطر علق والصحافة xسيؤدي ذلك إلى حذف جميع الأحرف # رأسياً.

للتعليق على كتلة النص هو نفسه تقريبا:

  1. أولاً ، انتقل إلى السطر الأول الذي تريد التعليق عليه ، اضغط CtrlV. سيضع هذا المحرر في وضع VISUAL BLOCK.
  2. ثم استخدم مفتاح السهم وحدد حتى السطر الأخير
  3. الآن اضغط ShiftI، والتي ستضع المحرر في وضع INSERT ثم اضغط #. سيضيف هذا علامة تجزئة إلى السطر الأول.
  4. ثم اضغط Esc (أعطها ثانية) ، وسوف تضيف حرفًا # في جميع الأسطر المحددة الأخرى.

بالنسبة للإصدار الذي تم تجريده من vim التي يتم شحنها مع debian/ubuntu افتراضيًا ، اكتب : s/^/# في الخطوة الثالثة بدلاً من ذلك.

هنا نوعان من تسجيلات الشاشة الصغيرة للإشارة البصرية.

التعليق: Comment

الانزعاج: Uncomment

2136
CMS

للتعليق على الكتل في vim:

  • صحافة Esc (لترك التحرير أو الوضع الآخر)
  • نجاح ctrl+v (وضع كتلة البصرية)
  • استخدم مفاتيح الأسهم لأعلى/لأسفل لتحديد الخطوط التي تريدها (لن تبرز كل شيء - لا بأس!)
  • Shift+i (رأس المال الأول)
  • أدخل النص الذي تريده ، على سبيل المثال %
  • صحافة EscEsc

إلى كتل uncomment في vim:

  • صحافة Esc (لترك التحرير أو الوضع الآخر)
  • نجاح ctrl+v (وضع كتلة البصرية)
  • استخدم ال / مفاتيح الأسهم لتحديد الأسطر إلى uncomment.

    إذا كنت ترغب في تحديد أحرف متعددة ، استخدم واحدًا أو ادمج هذه الطرق:

    • استخدم مفاتيح الأسهم اليسرى/اليمنى لتحديد المزيد من النص
    • لتحديد أجزاء من استخدام النص shift + / مفتاح السهم
    • يمكنك مرارا وتكرارا دفع مفاتيح الحذف أدناه ، مثل زر الحذف العادي
  • صحافة d أو x لحذف الحروف ، بشكل متكرر إذا لزم الأمر
746
amelia

أحيانًا يتم قصفي في صندوق بعيد حيث لا يمكن أن تساعدني الإضافات و .vimrc ، أو أحيانًا يخطئ NerdCommenter (مثل JavaScript مضمن داخل HTML).

في هذه الحالات ، يكون البديل ذو التقنية المنخفضة هو norm المدمج ، والذي يعمل فقط على أي أوامر vim تعسفية في كل سطر في النطاق المحدد. فمثلا:

التعليق باستخدام #:

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

هذا يدرج "#" في بداية كل سطر. لاحظ أنه عند الكتابة: سيتم ملء النطاق ، لذلك سيبدو في الحقيقة :'<,'>norm i#

uncommenting #:

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 : في بعض الأحيان ، لا يحتوي الأمر bare-bones vim على الأمر norm المترجم فيه ، لذا تأكد من استخدام الإصدار المعزز ، أي عادة/usr/bin/vim ، وليس/bin/vi

(شكرًا لـManbroski و @ rkslice على التحسينات المضمنة في هذه الإجابة)

274
Magnus

لدي ما يلي في .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 لإلغاء سطر (يعمل في الوضع العادي والمرئي).

(لقد سرقته من بعض المواقع الإلكترونية منذ سنوات عديدة ، لذلك لا يمكنني شرح كيف يعمل بعد الآن :). هناك تعليق حيث يتم شرح ذلك.)

112
jqno

حدد السطور التي يجب التعليق عليها في vim:

كشف أرقام الأسطر:

:set number

ثم

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

أو هذا:

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

هنا كيف أفعل ذلك:

  1. انتقل إلى الحرف الأول في السطر الأول الذي تريد التعليق عليه.

  2. نجاح Ctrl+q في GVIM أو Ctrl+v في VIM ، ثم انتقل لأسفل لتحديد الحرف الأول على الخطوط للتعليق عليها.

  3. ثم اضغط c، وإضافة حرف التعليق.

يعمل Uncommenting بنفس الطريقة ، فقط اكتب مسافة بدلاً من حرف التعليق.

53
Marcin

لقد توصلت إلى إضافة بسيطة لملف .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 ، لكن هذا مجرد تفضيل. لقد حاولت أيضًا أن أبقيه بسيطًا وفعالًا. إذا كنت تستخدم autocommands ، فأنت بحاجة إلى التأكد من وضعها في مجموعة autocommand وإلا ستتم إضافة عمليات الاسترجاعات إلى نوع الملف عدة مرات لكل ملف يتم تحميله وتتسبب في الكثير من تدهور الأداء.

28
user427390

تبديل التعليقات

إذا كان كل ما تحتاجه هو تبديل التعليقات أفضل أن أذهب مع commentary.vim by tpope .

 enter image description here

Installation

العوامل الممرضة:

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 + / ، تمامًا مثل Sublime و Atom.

26
Flavio Wuensche

استخدم Control-V لتحديد مستطيلات النص: انتقل إلى أول حرف # ، اكتب Ctrl+V، تحرك لليمين مرة واحدة ، ثم لأسفل ، حتى نهاية التعليقات. اكتب الآن x: أنت تحذف جميع الأحرف # متبوعة بمسافة واحدة.

22
Arthur Reutenauer

إليك قسم من .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 لإزالة التعليقات.

14
innaM

أنا استخدم vim 7.4 وهذا يعمل لي.
على افتراض أننا نقوم بالتعليق/عدم التنفيذ 3 سطور.

للتعليق:

إذا كان السطر لا يحتوي على علامة تبويب/مسافة في البداية:
ctrl + V ثم jjj ثم shift + I (cappital i) ثم //then esc esc
إذا كان السطر يحتوي على علامة تبويب/مساحة في البداية ، فلا يزال بإمكانك القيام بما سبق أو مبادلة لـ c:
ctrl + V ثم jjj ثم c ثم //then esc esc

إلى عدم الارتياح:

إذا كانت الخطوط لا تحتوي على علامة تبويب/مساحة في البداية:
ctrl + V ثم jjj ثم ll (lower cap L) ثم c

إذا كانت السطور تحتوي على علامة تبويب/مسافة في البداية ، فسوف تضع مسافة واحدة فوق و esc
ctrl + V ثم jjj ثم ll (lower cap L) ثم c ثم space ثم esc

10
Andy

مع وجود 30 إجابة أمامي ، سأحاول تقديم حل أسهل: أدخل # في بداية السطر. ثم اسقط خطًا واضغط على النقطة (.). للتكرار ، قم بـ j ، . ، j ، . ، إلخ ... للتراجع ، قم بإزالة # (يمكنك الضغط على x عبر #) ، وقم بالعكس باستخدام k ، . ، إلخ ...

9
imagineerThat

كيفية إلغاء uncomment الأسطر الثلاثة التالية في السادس:

#code code
#code
#code code code

ضع المؤشر فوق الرمز # العلوي الأيسر ثم اضغط على CtrlV. هذا يضعك في وضع كتلة مرئية. اضغط على السهم لأسفل أو J ثلاث مرات لتحديد جميع الخطوط الثلاثة. ثم اضغط D. كل التعليقات تختفي. للتراجع ، اضغط U.

كيفية التعليق الأسطر الثلاثة التالية في السادس:

code code
code
code code code

ضع المؤشر فوق الحرف العلوي الأيسر ، اضغط على CtrlV. هذا يضعك في وضع كتلة مرئية. صحافة  أو J ثلاث مرات لتحديد جميع الخطوط الثلاثة. ثم اضغط:

I//Esc

إنها عاصمة I و/و Escape.

عندما تضغط ESC، جميع الخطوط المحددة ستحصل على رمز التعليق الذي حددته.

9
Ivor Scott

أحب استخدام المكون الإضافي tcomment: http://www.vim.org/scripts/script.php؟script_id=1173

لقد قمت بتعيين gc و gcc للتعليق على سطر أو كتلة مميزة من التعليمات البرمجية. يكشف نوع الملف ويعمل بشكل جيد حقا.

9
Rick

نعم ، هناك 33 إجابة (متكررة في الغالب) على هذا السؤال بالفعل.

إليك طريقة أخرى لكيفية تعليق السطور في Vim: motions . تتمثل الفكرة الأساسية في التعليق أو إزالة الأسطر خارج الخط باستخدام نفس الطريقة التي يتم بها إلغاء فقرة بكتابة yip أو حذف سطرين عن طريق كتابة dj.

سيتيح لك هذا النهج القيام بأشياء مثل:

  • ccj للتعليق على سطرين التاليين الخارجيين و cuk لإلغاء تعليقهما ؛

  • cci{ للتعليق على الحظر ، و cui{ لإلغاء التعليق ؛

  • ccip للتعليق على فقرة بأكملها ، و cuip لإلغاء التعليق عليها.

  • ccG للتعليق على كل شيء وصولاً إلى السطر الأخير ، و cugg لإلغاء تثبيت كل شيء حتى السطر الأول.

كل ما تحتاجه هو وظيفتان تعملان على حركات ، وتعيينين لكل وظيفة. أولاً ، التعيينات:

nnoremap <silent> cc  :set opfunc=CommentOut<cr>[email protected]
vnoremap <silent> cc  :<c-u>call  CommentOut(visualmode(), 1)<cr>
nnoremap <silent> cu  :set opfunc=Uncomment<cr>[email protected]
vnoremap <silent> cu  :<c-u>call  Uncomment(visualmode(), 1)<cr>

(راجع دليل حول المشغل [email protected] والمتغير 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

تعديل التعبيرات العادية أعلاه لتناسب ذوقك فيما يتعلق بالمكان الذي يجب أن يكون # فيه:

7
n.r.

يمكنني استخدام EnhancedCommentify . إنه يعلق كل ما أحتاجه (لغات البرمجة ، البرامج النصية ، ملفات التكوين). أنا استخدامها مع الارتباطات وضع البصرية. ما عليك سوى اختيار النص الذي تريد التعليق عليه واضغط على co/cc/cd.

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

أضع علامة على السطور الأول والأخير (ma و mb) ، ثم قم بما يلي: 'a ،' bs/^ # //

6
SDGator

إذا كنت تعرف بالفعل أرقام الأسطر ، فستعمل n,ms/# //.

5
uckelman

أستخدم Tim Pope vim-commentary plugin.

4
Jim Stewart

لقد جمعت إجابة Phil و jqno وأدلت بتعليقات غير مقيدة بمسافات:

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>
4
mathewguest

هذه الإجابة موجودة هنا إلى 1) إظهار الكود الصحيح للصقه في .vimrc للحصول على vim 7.4+ لمنع التعليق/عدم التعليق مع الحفاظ على مستوى المسافة البادئة مع وجود اختصار واحد في الوضع المرئي و 2) لشرح ذلك.

هنا هو الكود:

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 *...: يتم تشغيل Autocommands في أشياء مختلفة ، وفي هذه الحالة ، يتم تشغيلها عندما ينتهي ملف جديد أو ملف القراءة بامتداد معين. بمجرد تشغيله ، قم بتنفيذ الأمر التالي ، والذي يسمح لنا بتغيير 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() تتحقق مما إذا كان أول شيء يحتوي على الشيء الثاني ، لذلك نحن نحصل على السطر الذي بدأنا في تسليط الضوء عليه ، وتحقق مما إذا كان يبدأ بـ whitespace متبوعًا بحرف التعليق الخاص بنا. 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 في هذه الحالة (لاحظ أنه لا يزال بإمكانك استخدام C-r بشكل طبيعي "لإعادة" في الوضع العادي مع هذا التعيين). C-u مربكة نوعًا ما ، لكن في الأساس تتأكد من أنك لا تفقد مسار التمييز البصري الخاص بك (وفقًا/ هذه الإجابة يجعل الأمر يبدأ بـ '<,'> وهو ما نريده). call هنا يخبر vim بتنفيذ الوظيفة التي حددناها ، ويشير <cr> إلى ضرب الزر enter. علينا أن نضربها مرة واحدة لاستدعاء الوظيفة فعليًا (وإلا فقد كتبنا للتو call function()] في سطر الأوامر ، وعلينا أن نضربها مرة أخرى للحصول على بدائلنا من خلال السير في الطريق (ليس متأكدًا من السبب ، ولكن أيا كان) .

على أي حال ، نأمل أن يساعد هذا. سيأخذ هذا أي شيء مظللًا باستخدام v أو V أو C-v ، وتحقق مما إذا كان السطر الأول قد تم التعليق عليه ، وإذا كانت الإجابة بنعم ، حاول إزالة كل الخطوط المميزة ، وإذا لم يكن الأمر كذلك ، أضف طبقة إضافية من أحرف التعليق إلى كل سطر. هذا هو سلوكي المطلوب ؛ لم أرغب فقط في تبديل ما إذا كان قد تم التعليق على كل سطر في الكتلة أم لا ، لذلك فهو يعمل بشكل مثالي بالنسبة لي بعد طرحمتعددة أسئلة حول هذا الموضوع.

4
jeremysprofile

هناك هذا البرنامج المساعد لتغيير الحياة بواسطة tpope يسمى vim-commentary

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

يوفر هذا البرنامج المساعد :

  • الصحة العقلية
  • تعليقات المسافة البادئة بشكل صحيح
  • لا يعلق على الخطوط الفارغة/غير الضرورية

استخدام :

  • تثبيت عبر Vundle (أو الممرض أعتقد).
  • تسليط الضوء على النص الخاص بك واضغط : والتي ستظهر كـ :<,'>
  • اكتب التعليق هنا :<,'>Commentary واضغط Enter.
  • فقاعة. برعم الخاص به.
4
Weston Ganger

أستخدم comments.vim من Jasmeet Singh Anand (موجود على 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 إلى un-comment سطر واحد
  • ShiftV وحدد خطوط متعددة ، ثم CtrlC للتعليق على الخطوط المتعددة المختارة
  • ShiftV وحدد خطوط متعددة ، ثم CtrlX لإلغاء تعليق الأسطر المتعددة المحددة
3
Ronan

تتمثل الطريقة الأسرع والأكثر بديهية لكل هذه الأشياء في إعادة تعيين رمز ) للتعليق على الخطوط ، ثم ( للمتابعة السريعة. جربه ولن تعود.

في Ruby أو Bash ، مع مسافات بادئة ذات فراغين:

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

في C/C++ أو PHP ، مع مسافات بادئة ذات فراغ 4:

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

السلبيات هي أنك تخسر ( و ) لحركة الجملة (ولكن das يمكن أن تملأها) ، وسوف تعود في بعض الأحيان إلى تحديد واستبدال أو CtrlV للتعامل مع المقاطع الطويلة. لكن هذا نادر جدا.

وبالنسبة إلى النمط C ، من الأفضل التعامل مع التعليقات الطويلة مع:

set cindent
set formatoptions=tcqr

... الذي يجمع جيدًا مع استخدام V[move]gq لإعادة التفاف الكلمات.

3
eukras

في ما يلي سطر أساسي واحد يستند إلى 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
bgran

بدايةً من الأفكار الواردة في الإجابات هنا ، بدأتُ وظيفة التعليق الخاصة بي. تبديل التعليقات وإيقاف تشغيلها. يمكنه التعامل مع أشياء مثل //print('blue'); //this thing is blue ويقوم فقط بتبديل التعليق الأول. علاوةً على ذلك ، فإنه يضيف تعليقات ومساحة واحدة فقط حيث تكون أول مساحة بيضاء غير موجودة في بداية السطر. إضافة إلى ذلك ، لا يقوم بنسخ المسافات البيضاء دون داع ، ولكنه يستخدم عمليات التكبير/التصغير (: 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>
3
mike

هذا المقتطف البسيط هو من ملفي .vimrc:

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

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

إنه من أجل // - تعليقات ، ولكن يمكنك تكييفه بسهولة مع الشخصيات الأخرى. يمكنك استخدام autocmd لتعيين قائد كما اقترح jqno.

هذه طريقة بسيطة للغاية وفعالة للعمل مع النطاقات والوضع المرئي بشكل طبيعي.

2
Phil

يمكنك استخدام التعليق vim بواسطة tpope ( https://github.com/tpope/vim-commentary ) يمكنك استخدامه على النحو التالي:

أدخل الوضع المرئي عن طريق الضغط

'v'

ثم اضغط

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

الآن كل ما عليك القيام به مع التحديد هو إدخال مفاتيح:

'gc'

سيؤدي هذا إلى التعليق على كل التحديد ، لإلغاء تثبيت مفاتيح reead:

'gc'
2
Kingsley Ijomah

يمكنني استخدام vim-multi-cursors لهذا الغرض.

  1. لتحديد المنطقة ، انتقل إلى الحرف الأول من السطر الأول أو الأخير من المنطقة للتعليق عليها بالضغط  (إنه صفر ، وليس حرف "o"). ثم اضغط V وحدد المنطقة باستخدام J، K أو لأعلى ولأسفل مفاتيح الأسهم.
  2. ثم ضع مؤشر افتراضي على كل سطر من التحديد بالضغط CtrlN.
  3. ثم اضغط I لتحرير كل سطر في وقت واحد من التحديد.
2
nrz

على الرغم من أن هذا السؤال يحتوي بالفعل على الكثير من الإجابات التي ما زلت أعتقد أنني سأقدمها إلى مكون إضافي صغير كتبت: تعليق .

يستخدم Commentify إعداد commentstring لتحديد كيفية تعليق كتلة من التعليمات البرمجية ، بحيث لا تضطر إلى الاحتفاظ بتعيين أنواع مختلفة من التعليقات في التكوين الخاص بك ، ويدعم كلا التعليقات المستندة إلى السطر (على سبيل المثال ، //) وحظر التعليقات (على سبيل المثال ، /* */).

كما أنه يعين نفس الاختصار (الإعدادات الافتراضية إلى ctrl+c) لكل من التعليق وإلغاء التثبيت ، لذلك لا يتعين عليك تذكر تعيينين أو مجموعة معقدة من الأوامر.

1
Jaymon

تعجبني /* ... */ (تعليقات C ansi) ، لذا فهذه خدعة لك. يمكنك تكييفه للاستخدام في حالات مختلفة ، بالطبع.


تعليق مع/* ... */

حدد النص (انتقل إلى البداية ، ابدأ تشغيل كتلة مرئية ، وقم بالقفز باستخدام }):

<c-V>}

اكتب الأمر الذي سيتم تطبيقه في التحديد

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

ستبدو القيادة مثل: :'<,'>norm i /* ^[$a */

انظر (i *) للحصول على التفاصيل.


uncomment the/* ... */

حدد النص (كما كان من قبل ، أو بالطريقة التي تريدها):

<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 *) للحصول على التفاصيل.


uncomment واحد/* */من كتلة

احفظه في السجل ، على سبيل المثال ، @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
1
Dr Beco

سؤال جيد جدا ، ولكن ليس الكثير من الإجابات الجيدة إيمهو. أولاً ، أود أن أقول أن استخدام وضع إدراج الكتلة هو ليس سهلاً الحل هنا ، فقط عدد كبير جدًا من ضغطات المفاتيح ، لذلك من الواضح أنه يجب أن يعمل على سطور محددة لتحسين أداء تحرير الشفرة. نقطة أخرى لا يذكرها أحد: أين يجب وضع علامة التعليق - في بداية السطر أو قبل النص الفعلي؟ من المحتمل أن يكون الأمر طعمًا ، ولكن رأيي ، يجب وضعه قبل النص لإبقاء الكود قابلاً للقراءة: عندما يتم وضع علامة التعليق في السطر الذي يبدأ في البداية ، فإنه يكسر التماسك المرئي للكود ذي المسافات البادئة ، لذلك يبدو قائمة نقطية. مع وضع ذلك في الاعتبار ، انتهى بي الأمر مع الحل التالي (أقدم مثال للتعليق #). في vimrc:

vnoremap 1 :s:^\(\s*\)\([^#\t ]\):\1#\2:e<CR>
vnoremap 2 :s:^\(\s*\)#\(\s*\):\1\2:e<CR>

يدرج المفتاح 1# قبل النص (بعد المسافة البيضاء) في كل سطر محدد. إنه يتحقق مما إذا كان هناك بالفعل # ، وليس لإدراج # مرتين. ويتجاهل أيضا الخطوط الفارغة.
المفتاح 2 يحذف # واحد. كما أنه يبقي التعليقات على الجانب الأيمن من الخط آمنة.


تحديث : هنا مثال ، كيفية جعل أمر نوع التبعية toggle comment أمر. لمعرفة المزيد حول هذه الأشياء ، اقرأ: http://learnvimscriptthehardway.stevelosh.com/chapters/14.html

فقط لجعلها تعمل ، ضع الأسطر التالية في ملف .vimrc الخاص بك.

" build the whole regex search/replace command
function! Build()
    let b:Comment_ON='''<,''>s:^\(\s*\)\([^\t ]\):\1' . b:cs . '\2:e'
    let b:Comment_OFF='''<,''>s:^\(\s*\)' . b:cs . '\(\s*\):\1\2:e'
endfunction

" run this group on Filetype event
augroup SetCS
    autocmd!
    "default comment sign
    autocmd FileType * let b:cs='--'
    "detect file type and assign comment sign
    autocmd FileType python,Ruby let b:cs='#'
    autocmd FileType c,cpp,Java,javascript,php let b:cs = '\/\/'
    autocmd FileType vim let b:cs='"'
    autocmd FileType * call Build()
augroup END

vnoremap 1 :<C-u>execute b:Comment_ON<CR>
vnoremap 2 :<C-u>execute b:Comment_OFF<CR>
1
Mikhail V

أنا شخصياً لا أحب وظيفة "تبديل" للتعليق ، حيث إنها ستدمر التعليقات التي تم تضمينها بالفعل في الكود. وأريد أيضًا أن تظهر علامة char في أقصى اليسار ، دائمًا ، حتى أتمكن من رؤية كتل التعليقات بسهولة. أريد أيضًا أن يعمل هذا بشكل متداخل (إذا قمت أولاً بتعليق كتلة ثم كتلة مرفقة). لذلك ، لقد غيرت قليلا واحدة من الحلول. يمكنني استخدام F5 للتعليق و التحول - F5 إلى عدم الارتياح. أيضًا ، أضفت a/g في نهاية s/command:

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 = '"'
autocmd FileType nasm             let b:comment_leader = ';'

function! CommentLine()
    execute ':silent! s/^\(.*\)/' . b:comment_leader . ' \1/g'
endfunction

function! UncommentLine()
    execute ':silent! s/^' . b:comment_leader . ' //g'
endfunction

map <F5> :call CommentLine()<CR>
map <S-F5> :call UncommentLine()<CR>
0
Flo

للتعليق على سطر (لجميع اللغات):

  • noremap <silent> ,// :call CommentLine() <CR>

يمكننا أن نسميها مع عدد الخطوط وفي الوضع المرئي أيضا ، فإنه يعمل. مثل: للتعليق على أربعة أسطر استخدم 4 ، // ولعدم استخدام 4 ،/.

إلى Uncomment A Line (لجميع اللغات):

  • noremap <silent> ,/ :call UnCommentLine() <CR>

إذا كنت ترغب في إضافة رمز جديد [تعليق] ثم إضافة قائمة وإضافة بعض الخطوط في وظيفة. إذا كنت ترغب في إضافة لغة تحتوي على رمز التعليق الذي تم تعريفه بالفعل في إحدى القوائم ، فقم فقط بإضافة اسم لغتك في القائمة المقابلة (للحصول على الاسم الصحيح: افتح ملفك في vim واستخدم: set ft للحصول على الاسم الصحيح للغتك ).

تعريف CommentLine ()

function! CommentLine() let slash_ft_list = ['c' , 'cpp', 'Java', 'scala' , 'systemverilog' , 'verilog' , 'verilog_systemverilog'] let hash_ft_list = ['sh' , 'Ruby' , 'python' , 'csh' , 'conf' , 'fstab' , 'Perl'] let perct_ft_list = ['tex'] let mail_ft_list = ['mail'] let quote_ft_list = ['vim'] if (index(slash_ft_list, &ft) != -1) :norm I// elseif (index(hash_ft_list, &ft) != -1) :norm I# elseif (index(perct_ft_list, &ft) != -1) :norm I% elseif (index(mail_ft_list, &ft) != -1) :norm I> elseif (index(quote_ft_list, &ft) != -1) :norm I" endif endfunction

تعريف UnCommentLine ()

function! UnCommentLine() let slash_ft_list = ['c' , 'cpp', 'Java', 'scala' , 'systemverilog' , 'verilog' , 'verilog_systemverilog'] let hash_ft_list = ['sh' , 'Ruby' , 'python' , 'csh' , 'conf' , 'fstab' , 'Perl'] let perct_ft_list = ['tex'] let mail_ft_list = ['mail'] let quote_ft_list = ['vim'] if (index(slash_ft_list, &ft) != -1) :norm ^2x elseif (index(hash_ft_list, &ft) != -1) :norm ^x elseif (index(perct_ft_list, &ft) != -1) :norm ^x elseif (index(mail_ft_list, &ft) != -1) :norm ^x elseif (index(quote_ft_list, &ft) != -1) :norm ^x endif endfunction

0
AnuragChauhan

:٪ s/^/\/\// g

إزالة المسافات بين الأحرف واستخدام هذا الأمر للتعليق .C أو ملفات CPP

0
chandramohan harkude

يعد حل @ CMS هو الطريقة "الأكثر أهمية" للتعليق داخل/خارج الخطوط. في الخطوة الثانية @ CMS ، بعد CtrlV، يمكنك أيضا استخدام r# لإضافة تعليقات أو x لحذفها. درو نيل فيم العملي ، الصفحة 46 ، يشرح هذه التقنية بشكل جيد.

خيار جيد آخر هو استخدام الأمر ex mode. :[نطاق]normali##. من الواضح ، لحفظ ضغطات المفاتيح مع هذا ، ستحتاج إلى تعليق 15 سطرًا.

0
jfmercer
"comment (cc) and uncomment (cu) code 
noremap   <silent> cc      :s,^\(\s*\)[^# \t]\@=,\1# ,e<CR>:nohls<CR>zvj
noremap   <silent> cu      :s,^\(\s*\)# \s\@!,\1,e<CR>:nohls<CR>zvj

يمكنك التعليق/uncomment الأسطر المفردة أو المتعددة مع #. للقيام بسطور متعددة ، حدد الأسطر ثم اكتب اختصار cc/cu ، أو اكتب رقمًا ثم cc/cu ، على سبيل المثال سوف 7cc التعليق 7 خطوط من المؤشر.

حصلت على الكود الأصلي من الشخص الذي يعمل على ما هي الطريقة الأكثر أناقة للتعليق/إلغاء تثبيت كتل روبي كود في فيم؟ وأجرت بعض التغييرات الصغيرة (تم تغيير مفاتيح الاختصار ، وأضفت مسافة بعد #).

0
konyak

أنا شخصياً أردت التعليق على Visual Studio. لقد اعتدت عليه في العمل لدرجة أنه استحوذ على ذاكرتي العضلية (باستخدام vsvim). استعمال shift+v حدد الخطوط التي تريدها ثم اضغط ctrl+k، ctrl+c للتعليق أو Ctrl+k، Ctrl+u إلى عدم الارتياح.

:vnoremap <C-k><C-c> :norm i//<Cr>
:vnoremap <C-k><C-u> :s/\/\///g<Cr>:noh<Cr>
0
scx

لإلغاء ملف كامل:

  1. Esc يخرج وضع الإدراج
  2. gg يذهب إلى شار الأولى في السطر الأول
  3. ctrl+V أو ctrl+shift+v يختار char الحالي
  4. G أو shift+g ينتقل إلى السطر الأخير
  5. x حذف الاختيار
0
JSON C11
:g/.spare[1-9].*/,+2s/^/\/\//

سيعلّق الرمز أعلاه على جميع الأسطر التي تحتوي على "spare" ورقم بعد ذلك بالإضافة إلى أنه سيعلق سطرين أكثر من السطر الذي تم العثور عليه. لمزيد من هذه الاستخدامات ، تفضل بزيارة: http://vim.wikia.com/wiki/Search_and_replace#Details

0
Mohit Kumar

هناك العديد من الإضافات الحيوية مثل Tcomment و nerdcommenter المتاحة.

يمكنني استخدام tcomment لأغراض التعليق.

gcc: سيتم تبديل التعليق على السطر الحالي. v {motion} gc: سيتم تبديل تعليق مجموعة من الخطوط المحددة بصريًا

مثال: سوف v3jgc تبديل المنطقة من 3 خطوط.

يمكن أن تعمل هذه الأوامر للعمل مع التعليقات بأي لغة.

0
dvk317960

هذا الحل خرائط/للتعليق و؟ إلى uncommenting (تعليق التبديل باستخدام التعيين الفردي معقد جدًا بحيث لا يمكن تنفيذه بشكل صحيح). يتطلب الأمر سلاسل تعليق من خيار commentstring المدمج في VIM والذي يتم ملؤه من ملفات مثل /usr/share/vim/vim*/ftplugin/*.vim إذا تم الإعلان عن filetype plugin on.

filetype plugin on
autocmd FileType * let b:comment = split(&commentstring, '%s', 1)
autocmd FileType * execute "map <silent> <Leader>/ :normal 0i" . b:comment[0] . "<C-O>$" . b:comment[1] . "<C-O>0<CR>"
autocmd FileType * execute "map <silent> <Leader>? :normal $" . repeat('x', strlen(b:comment[1])) . "0" . strlen(b:comment[0]) . "x<CR>"
0
sgtpep