Vim හි අදහස් දැක්වීමට / නොගැලපෙන රේඛා වලට ඉක්මන්ම ක්‍රමය කුමක්ද?


1196

මා සතුව රූබි කේත ගොනුවක් 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කොටසේ ඇති සියලුම රේඛා ඉවත් කිරීමට මට අවශ්‍ය යැයි පවසන්න . Vim හි එය කිරීමට කාර්යක්ෂම ක්‍රමයක් කුමක්ද?

පොදුවේ ගත් කල, මම අදහස් දැක්වීමට පහසු සහ තරල ක්‍රමයක් සොයමි. මෙන්න මම රූබි කේතය සමඟ ගනුදෙනු කරමි, නමුත් එය ජාවාස්ක්‍රිප්ට් ( //) හෝ හැම්ල් ( -#) විය හැකිය.


25
පිළිගත් පිළිතුර ප්ලගිනයක් භාවිතා නොකර අදහස් දැක්වීමේ / නොගැලපෙන කොටස් සිදු කරන්නේ කෙසේද යන්න පිළිබඳ සවිස්තරාත්මක උපදෙස් ඇති පිළිතුරකට වෙනස් කළ යුතුය. මෙම වත්මන් පිළිගත් පිළිතුර මූලික වශයෙන් තෙවන පාර්ශවීය ප්ලගින පමණක් වන සම්බන්ධයක්.
faintsignal

හොඳම ශ්‍රේණිගත කළ පිළිතුරෙහි කිසිදු ප්ලගීන සඳහන් නොවේ, ඔබේ අදහස නොමඟ යවන සුළුය, කරුණාකර එය නිවැරදි කිරීමට හෝ ඉවත් කිරීමට ඔබට හැකිද, ස්තූතියි.
bonobo

Answers:


183

මම NERD Commenter ස්ක්‍රිප්ට් භාවිතා කරමි . එය ඔබගේ කේතයේ පහසුවෙන් අදහස් දැක්වීමට, අපහසුතාවයට පත් කිරීමට හෝ ටොගල් කිරීමට ඉඩ දෙයි.

අදහස් දැක්වීම්වල සඳහන් පරිදි :

භාවිතයෙන් ව්‍යාකූල වූ ඕනෑම අයෙකුට පෙරනිමි නායකයා "\" වන බැවින් 10 \ cc පේළි දහයක් අදහස් දක්වන අතර 10 \ cu එම පේළි දහය නිරවුල් කරයි


සිත්ගන්නාසුළුයි! මම ලේඛනය කියවා "සරාගී අදහස් දැක්වීමක්" ඇති බව සොයා ගතිමි - "s cs" භාවිතා කරන්න. රූබි සඳහා, එය භාවිතා කරනු ඇත =beginහා =endමාර්ග වෙනුවට බහු හෑෂ් ටැග් අදහස් ප්රකාශ කිරීම.
හෙග්වින්

මම හිතන්නේ එය ප්ලගිනයක් ස්ථාපනය කිරීමට අවශ්‍ය බැවින් එය vim සමඟ කළ හැකි ඉක්මන්ම ක්‍රමය නොවේ. හොඳම පිළිතුරට දැනටමත් වැඩි ඡන්ද ප්‍රමාණයක් ලැබී ඇති නමුත් එය විසඳුමක් ලෙස සලකුණු කර නොමැත.
whirmill

158
මෙතන නවත්වන්න එපා. කිසිදු ප්ලගීන අවශ්‍යතාවයකින් තොරව බොහෝ ඡන්දය දුන් පිළිතුරු පහතින් ඇත. stackoverflow.com/a/15588798/2117868 සහ stackoverflow.com/a/1676690/2117868
kuttumiah

irwhirmill මම හිතන්නේ "හොඳම" ඇත්ත වශයෙන්ම රඳා පවතින්නේ භාවිත අවස්ථාව මත ය. මගේ ජීවිතයේ එක් වරක් අදහස් ටොගල් කිරීමට අවශ්‍ය නම් දෘශ්‍ය බ්ලොක් ප්‍රකාරය වේගවත් වේ. නමුත් මට ප්ලගිනයක් ස්ථාපනය කිරීමට අවශ්‍ය නැතිනම්, අදහස් ටොගල් කිරීමට හැකි තරම් යතුරු එබීමට අවශ්‍ය නම් සහ අදහස් එකතු කිරීම හෝ ඉවත් කිරීම අතර ක්‍රියාකාරිත්වය වෙන්කර හඳුනා ගැනීමට අවශ්‍ය නොවන්නේ නම් - මෙය මෙහි “හොඳම පිළිතුර” විය හැකිය.
කැරොලස්

A කැරොලස් ප්‍රශ්නය “ඉක්මන් මාර්ගය කුමක්ද” වෙනුවට “හොඳම ක්‍රමය කුමක්ද” යන්නෙන් ප්‍රශ්නය ආරම්භ වී ඇත්නම් මම ඔබ සමඟ එකඟ වන්නෙමි.
whrimill

2590

එම කාර්යයන් සඳහා මම බොහෝ විට වාරණ තේරීම භාවිතා කරමි .

ඔබේ කර්සරය පළමු #අක්‍ෂරය මත තබන්න , CtrlV(හෝ CtrlQgVim සඳහා) ඔබන්න x, අවසන් වරට අදහස් දැක්වූ රේඛාව තෙක් පහළට ගොස් ඔබන්න , එමඟින් සියලු #අක්ෂර සිරස් අතට මැකෙනු ඇත .

පෙළ වාරණයක් අදහස් දැක්වීම බොහෝ දුරට සමාන ය:

  1. පළමුව, ඔබට අදහස් දැක්වීමට අවශ්‍ය පළමු පේළියට යන්න, ඔබන්න CtrlV. මෙය සංස්කාරකය VISUAL BLOCKප්‍රකාරයට දමනු ඇත .
  2. ඊතල යතුර භාවිතා කර අවසාන පේළිය තෙක් තෝරන්න
  3. දැන් ඔබන්න ShiftI, එය සංස්කාරකය INSERTප්‍රකාරයට දමා පසුව ඔබන්න #. මෙය පළමු පේළියට හැෂ් එකක් එක් කරයි.
  4. ඉන්පසු ඔබන්න Esc(තත්පරයක් දෙන්න), එවිට එය #තෝරාගත් අනෙකුත් සියලුම රේඛාවල අක්ෂරයක් ඇතුල් කරනු ඇත .

පෙරනිමියෙන් ඩෙබියන් / උබුන්ටු සමඟ නැව්ගත කරන ලද විම් හි ඉවත් කරන ලද අනුවාදය සඳහා, : s/^/#ඒ වෙනුවට තුන්වන පියවර ටයිප් කරන්න (එක් එක් පේළියේ පළමු අක්‍ෂරයේ ඉතිරිව ඇති ඉස්මතු කිරීම් ඉවත් කළ හැකිය :nohl).

දෘශ්‍ය යොමු කිරීම සඳහා කුඩා තිර පටිගත කිරීම් දෙකක් මෙන්න.

සටහන: අදහස් දක්වන්න

නොගැලපීම: අසහනය


88
පෙරනිමියෙන් එය CTRL + V. Gvim හි වින්ඩෝස් අනුවාදය Ctrl + Q භාවිතා කරයි, මන්ද Ctrl + V දැනටමත් පේස්ට් සඳහා භාවිතා කර ඇත.
ආර්. මාටින්හෝ ෆර්නැන්ඩස්

8
indamindfv Ctrl + V, n(මෙහි n යනු nසංඛ්‍යා රේඛා - 1), j, (මෙහි n සංඛ්‍යා විවරණ අනුක්‍රමික අනුක්‍රමයේ දිග - 1), l, x.
michael.bartnett

29
'//' සමඟ ඔබ මෙය කරන්නේ කෙසේද?
ඔස්ටින්ට්

75
එම තත්පරයට රැඳී නොසිටීම සඳහා ඔබට දෙවරක් Esc ක්ලික් කළ හැකිය;)
අහමඩ් හෙගසි

46
මෙය මට වැඩ කළේ නැත. Shift-I සරල ඇතුළත් කිරීමේ ක්‍රමයට ගියෙමි.
ජෙරමියා

849

අවහිරතා දැක්වීමට:

  • ඔබන්න Esc(සංස්කරණය හෝ වෙනත් ප්‍රකාරයක් තැබීමට)
  • hit ctrl+ v(දෘශ්‍ය වාරණ මාදිලිය)
  • ඔබට අවශ්‍ය රේඛා තේරීමට / ඊතල යතුරු භාවිතා කරන්න (එය සියල්ල ඉස්මතු නොකරයි - එය හරි!)
  • Shift+ i(ප්‍රාග්ධනය I)
  • ඔබට අවශ්‍ය පෙළ ඇතුළු කරන්න, උදා %
  • ඔබන්න EscEsc

අවහිරතා අවහිර කිරීමට:

  • ඔබන්න Esc(සංස්කරණය හෝ වෙනත් ප්‍රකාරයක් තැබීමට)
  • hit ctrl+ v(දෘශ්‍ය වාරණ මාදිලිය)
  • භාවිතා / uncomment කිරීමට මාර්ග තෝරා ගැනීමට යතුරු විස්තරයක්.

    ඔබට බහු අක්ෂර තෝරා ගැනීමට අවශ්‍ය නම්, එකක් භාවිතා කරන්න හෝ මෙම ක්‍රම ඒකාබද්ධ කරන්න:

    • තවත් පෙළ තේරීමට වම් / දකුණු ඊතල යතුරු භාවිතා කරන්න
    • පෙළ භාවිතයේ කුට්ටි තේරීමට shift+ / ඊතල යතුර
    • සාමාන්‍ය මකාදැමීමේ බොත්තමක් වැනි ඔබට මකාදැමීමේ යතුරු නැවත නැවතත් තල්ලු කළ හැකිය

  • අවශ්‍ය නම් නැවත නැවත අක්ෂර ඔබන්න dහෝ xමකන්න

40
@amelia: අදහස් දැක්වීමේ කෙටිමඟ මට වැඩ කරන්නේ නැත. Shift + i මා ඇතුළත් කිරීමේ මාදිලියට ගෙන යයි. එය vim අනුවාදය මත රඳා පවතීද?
user3527975

7
තත්පරයක් ගත වන්නේ ඇයි?
කොනර් පැට්‍රික්

28
මෙම පිළිතුර සමඟ මට ඇති එකම ගැටළුව එය ඊතල යතුරු භාවිතා කරන ලෙස ඔබට පැවසීමයි .
cozyconemotel

6
ඒ වෙනුවට දෙවරක් Esc ට පහර දෙන්න. :)
ආරොන් ඇල්ෆොන්සස්

27
මුලදී අදහස් සක්‍රීය කිරීම මට ප්‍රයෝජනවත් නොවූ නමුත් එය නැවත වරක් හොඳින් ක්‍රියාත්මක වූ බව කියවීමෙන් පසු: 1. තේරීම සඳහා V නොව Ctrl-V භාවිතා කරන බවට වග බලා ගන්න. 2 ඇතුල් කරන විට එය එක් පේළියක් පමණක් වෙනස් කරන විට දිස්වනු ඇත. සියලුම ඇතුළත් කිරීම් සිදුවන්නේ ඔබ අවසානයේ Esc ට පහර දුන් විටය
timurb

341

සමහර විට මගේ ප්ලගීන සහ .vimrc මට උදව් කළ නොහැකි දුරස්ථ පෙට්ටියකට ෂෙල් කර ඇත, නැතහොත් සමහර විට නර්ඩ්කොමෙන්ටර් එය වැරදියට තේරුම් ගනී (උදා: ජාවාස්ක්‍රිප්ට් HTML තුළ කාවැදී ඇත).

මෙම අවස්ථා වලදී අඩු තාක්‍ෂණික විකල්පයක් වන්නේ normඔබ විසින් නියම කරන ලද පරාසය තුළ එක් එක් පේළියේ ඕනෑම අත්තනෝමතික vim විධාන ක්‍රියාත්මක කරන බිල්ට් විධානයි. උදාහරණයක් වශයෙන්:

අදහස් දක්වමින් # :

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-වර්‍ග විවරණයක් භාවිතා කර ඇත්නම්, එවිට මම :norm xxඅක්ෂර දෙකම මකා දැමීමට කැමැත්තෙමි .

OP හි ප්‍රශ්නයේදී මෙන් අදහස් ඇතුලත් කර ඇත්නම්, එවිට ඔබට ඔබගේ මකාදැමීම නැංගුරම් දැමිය හැකිය:

:norm ^x

එහි තේරුම "පළමු අභ්‍යවකාශ නොවන අක්‍ෂරයට ගොස් එක් අක්‍ෂරයක් මකන්න" යන්නයි. බ්ලොක් තේරීම මෙන් නොව, අදහස්වල අසමාන ඉන්ඩෙන්ෂන් තිබුණත් මෙම තාක්ෂණය ක්‍රියාත්මක වන බව සලකන්න!

සටහන : normවචනයේ පරිසමාප්ත අර්ථයෙන්ම සාමාන්‍ය විම් විධාන ක්‍රියාත්මක වන බැවින් , ඔබ අදහස් දැක්වීම් වලට පමණක් සීමා නොවන බැවින්, ඔබට එක් එක් පේළියට සංකීර්ණ සංස්කරණයක් කළ හැකිය. ඔබේ විධාන අනුපිළිවෙලෙහි කොටසක් ලෙස ඔබට ගැලවීමේ අක්‍ෂරය අවශ්‍ය නම්, ctrl-v ටයිප් කර පලා යාමේ යතුර ඔබන්න (හෝ ඊටත් වඩා පහසු, ඉක්මන් සාර්වයක් පටිගත කර එක් එක් පේළියේ එම සාර්ව ක්‍රියාත්මක කිරීමට සම්මත භාවිතා කරන්න).

සටහන 2 : ඔබ normබොහෝ දේ භාවිතා කරන බව පෙනේ නම් ඔබට සිතියමක් ද එක් කළ හැකිය . උදා: ~ / .vimrc දී, පහත දැක්වෙන රේඛාව දමා ඔබ ටයිප් කිරීමට ඉඩ දෙයි ctrl-nවෙනුවට :normඔබේ දෘශ්ය තෝරා කමක් සිදු කල පසු

vnoremap <C-n> :norm

සටහන 3 : හිස් ඇටකටු විම් සමහර විට එයට normවිධානය සම්පාදනය කර නැත, එබැවින් හරක් මස් සහිත අනුවාදය භාවිතා කිරීමට වග බලා ගන්න, එනම් සාමාන්‍යයෙන් / usr / bin / vim, නොව / bin / vi

(මෙම පිළිතුරට ඇතුළත් කර ඇති වැඩිදියුණු කිරීම් සඳහා an මෑන්බ්‍රොස්කි සහ @ රාක්ස්ලයිස් වලට ස්තූතියි)


3
Hy ශ්‍යාම් ctrl-v තාක්‍ෂණය විශේෂ වාරණ-තේරීම්-පමණක් විධානයන් සමඟ සංයෝජනය වී ඇති අතර අනෙක් බොහෝ පිළිතුරු නිර්දේශ කරනුයේ; කෙසේ වෙතත්, මා විසින් විස්තර කර ඇති “සම්මත” තාක්‍ෂණය වඩාත් පහසු යැයි මා සිතන්නේ එය සාමාන්‍ය විධානයට අමතරව වෙනත් නව වාක්‍ය ඛණ්ඩයක් හඳුන්වා නොදෙන නිසාය, එබැවින් මා දැනටමත් දන්නා දේ නැවත භාවිතා කළ හැකිය.
මැග්නස්

2
ඉන්ඩෙන්ට් බ්ලොක් එකක් ඉවත් කිරීම සඳහා, කීම ප්‍රයෝජනවත් වේ :norm ^x. මෙම ක්‍රමයට කලාපීය වරණයන් සමඟ වැඩ කිරීමේ වාසියක් vi{ඇත (උදා: කැරලි වරහන් තුළ තෝරා ගනු ඇත). එවැනි පෙළ වස්තු තේරීම්කරුවන් සමඟ ක්‍රියා නොකරයි Visual Block.
ivan-k

1
අහ්, මම එය හදුනා ගත්තා - සෙන්ටෝස් 6 හි /bin/viඑය 7.2 වේ, නමුත් එය ඊට වඩා වෙනස් ගොඩනැගීමකි /usr/bin/vim, තවද එය ක්‍රියා විරහිත කර ඇත.
රාක්ස්ලයිස්

5
මෙය බොහෝ දුරට හොඳම පිළිතුරයි. විශේෂයෙන් vipසම්පූර්ණ ඡේදයක් තෝරා ගැනීම සඳහා ඒකාබද්ධ වූ විට .
meh

1
මේක නම් නියමයි. මම AVID සාර්ව පරිශීලකයෙක්මි. යතුරු එබීම සඳහා මම මැක්‍රෝස් (බොහෝ විට පුනරාවර්තන) මැක්ස් මත නිර්මාණය කරමි. මම දැන් මැක්‍රෝස් වලින් හිතනවා. මම කවදාවත් දැනගෙන හිටියේ නැහැ :normal. මම ඒකෙන් එළියට යන්නම්.
බ un නෝ බ්‍රොනොස්කි

124

මගේ පහත සඳහන් දෑ ඇත .vimrc:

" Commenting blocks of code.
augroup commenting_blocks_of_code
  autocmd!
  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 = '" '
augroup END
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 කේතයෙන්ම සහතික විය නොහැක!
ගිඩියොන්

සාමාන්‍ය හෝ දෘශ්‍ය ප්‍රකාරයේදී, වත්මන් රේඛාව අදහස් දැක්වීමට ", සීසී" (අක්ෂර 3 අනුක්‍රමය) සහ වත්මන් රේඛාව විවර කිරීමට ", කියු" භාවිතා කරන්න.
ඩෑන්

8
මම එයට කැමතියි :)! ස්තූතියි! පැති සටහනක මට එය පැහැදිලි කිරීමට අපහසු නැත. a) එය විධානයක් ප්‍රතිනිර්මාණය කරයි (පුනරාවර්තී නොවන [මෙය බලන්න] ( stackoverflow.com/questions/3776117/… ) එබැවින් දැන් ඔබ එබූ විට cc the: ... දෙයක් ක්‍රියාත්මක වේ. b) දැන් මෙය මූලික වශයෙන් sed (s) / what / towhat / where) විධානය වෙනස් කිරීම line (පේළියේ ආරම්භය) ඔබ විවෘත කර ඇති ගොනුවේ වර්ගය මත පදනම්ව නිවැරදිව සකසා ඇති විවරණ අක්‍ෂරයට ඇ) ඇ) නිහ silent දේවල් සඳහා ඔවුන් විධාන වලින් ප්‍රතිදානය යටපත් කරයි. d): සෙවුම් සෙවීම ඉස්මතු කිරීමෙන් නොල්සර්ච් එය නවත්වයි
ramrunner

14
ස්වයංක්‍රීයව පැටවීම සඳහා නිවැරදි ක්‍රමය මෙය නොවන බව සලකන්න. ඒවා සමූහයක් තුළ විය යුතුය, එසේ නොමැති නම් ඒවා කිහිප වතාවක්ම වයිම් වලට එකතු වන අතර මන්දගාමී වීමට හේතු වේ. බලන්න: learnvimscriptthehardway.stevelosh.com/chapters/14.html . මම මෙම ප්‍රශ්නයට මගේ පිළිතුර එකතු කර ඇත්තෙමි.

හොඳයි. ඔබට වාරණ තේරීමක් තිබියදී අදහස් දැක්විය යුතු ආකාරය පිළිබඳ මා සතුව තිබූ ප්‍රශ්නයට මෙය සත්‍ය පිළිතුරකි.
අර්වින් රූයිජකර්ස්

123

Vim හි අදහස් දැක්විය යුතු රේඛා සඳහන් කරන්න:

රේඛා අංක හෙළි කරන්න:

:set number

එවිට

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

හෝ මෙය:

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

11
ඔබ එක් එක් පේළියේ 1 වන වර්‍ගය වෙනස් කරන බැවින්, අවසානයේ ඔබට “g” අවශ්‍ය නොවේ
මැග්නස්

1
කාවැද්දූ පෙට්ටිවල සමහර විම්ස් (ඕපන් වර්ට් වැනි) දෘශ්‍ය මාදිලියක් නොමැත .. එබැවින් මෙය විස්මයජනක ය :)
kim0

:%s/^/#/gසියලු රේඛා අදහස් දක්වන්නේ මන්දැයි ඔබට පැහැදිලි කළ හැකිද? මම කල්පනා කළේ ප්‍රතිශත ලකුණයි%
බින්

18
මෙම රේඛා නිරවුල් කිරීම සඳහා ඔබට ලිවිය හැකිය: 5,17s / ^ # /
ඉරක්ලිස් මවුටිඩිස්

මහා! බ්ලොක් තේරීම සමඟ එය සැබවින්ම හොඳින් ක්‍රියාත්මක වේ: va{හෝ varරූබී සමඟ .
අර්තූර් මැසේකි

59

මෙන්න මම එය කරන්නේ කෙසේද:

  1. ඔබට අදහස් දැක්වීමට අවශ්‍ය පළමු පේළියේ පළමු අක්‍ෂරයට යන්න.

  2. පහර Ctrl+ qGVIM හෝ Ctrl+ vවිම් දී, එසේ නම් සිදු අදහස් දැක්වීමට පිලිවෙත් මත පළමු අක්ෂරය තෝරා ගැනීමට යන්න.

  3. ඉන්පසු ඔබන්න c, සහ විවරණ අක්‍ෂරය එක් කරන්න.

අවිධිමත් කිරීම එකම ආකාරයකින් ක්‍රියා කරයි, අදහස් දැක්වීමේ අක්‍ෂරය වෙනුවට ඉඩක් ටයිප් කරන්න.


45
cපළමු චරිතය ද මකා දමයි. CMS හි පිළිතුර නිවැරදිව ඇත, එනම් එබීමෙන් Iපසුව විවරණ අක්‍ෂර (ය) ටයිප් කර Esc(මෙය වින්ඩෝස්
වයිම්

6
මෙය ක්‍රියාත්මක වන්නේ 'r' හැර තුන්වන පියවරේදී එබිය යුතු අතර 'c' නොවේ.
ඩේවිඩ් බොකුම්

විකල්පයක් ලෙස ESCඑබීමෙන් පසු ඔබට දෙවරක් එබිය හැකි cඅතර එය කළ යුත්තේ
උපක්‍රමයයි

මෙම සියලු විකල්පයන් පේළියේ පළමු අක්‍ෂරය විනාශකාරී ය.
ජොෂියා

37

මගේ .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>

සටහන:

ලිපිගොනු වර්ග / පැටවීම් වලට මම කිසිදු ඇමතුමක් හෝ කොක්කක් භාවිතා නොකරමි, මන්ද ඒවා .vimrcස්ථිතික ක්‍රියාකාරිත්වයට / සිතියමට වඩා Vim හි ආරම්භය මන්දගාමී වන බව මට පෙනේ, නමුත් එය මගේ මනාපය පමණි. මම එය සරල හා කාර්ය සාධනය තබා ගැනීමට උත්සාහ කර ඇත. ඔබ ස්වයංක්‍රීය විධානයන් භාවිතා කරන්නේ නම් ඒවා ස්වයංක්‍රීයව කන්ඩායම් සමූහයකට ඇතුළත් කිරීමට වග බලා ගත යුතුය. එසේ නොමැතිනම් ඇමතුම් ලබා ගැනීම එක් ගොනුවකට කිහිප වතාවක් ගොනු වර්ගයට එකතු වන අතර කාර්ය සාධනය පිරිහීමට හේතු වේ.


1
සිතියම්ගත කිරීමේ කාර්යය ටොගල කිරීමට මා කුමන බොත්තම එබිය යුතුද? <leader><Space>පතුලේ එම ප්‍රකාශය කුමක්ද?
ජෙන්ස් කෝල්

2
ඔබට <,> වැනි යතුරකින් <leader> ආදේශ කළ හැකිය. එවිට ඔබ SPACE ඔබන්න, එය රේඛාවේ විවරණ තත්වය ටොගල් කරයි. නායකයා යනු ඔබේ නායකයා කුමක් වුවත්, විම්ගේ පෙරනිමිය <leader> is, නමුත් ඔබට "ඉඩ දෙන්න mapleader = ',' වැනි සැකසිය හැකිය

හොඳ පිළිතුරක්, එක් කරදරයක් වුවද, දැනටමත් යම් අදහස් ඇති බ්ලොක් අදහස් දැක්වීම, අදහස් නොදක්වන රේඛා සඳහා අදහස් හුවමාරු කර ගනී. QtCreator උදා: සියලු හිස් නොවන රේඛාවලට ප්‍රමුඛ අදහස් තිබේ නම් පමණක් අදහස් ඉවත් කරයි, එසේ නොමැතිනම් ප්‍රමුඛ සටහනක් එක් කරන්න.
ideasman42

1
මම තරමක් වෙනස් අනුවාදයක් භාවිතා \zsකර \zeරීජෙක්ස් උපක්‍රම භාවිතා කර ඇත , කේතය ටිකක් කුඩා විය. ඔබට එය මෙතැනින්
SergioAraujo

35

අදහස් ටොගල කරන්න

ඔබට අවශ්ය සියලුම නම් ටොගල අදහස් වඩා මම එක්ක යන්න කියලා commentary.vim විසින් tpope .

රූප විස්තරය මෙහි ඇතුළත් කරන්න

ස්ථාපනය

රෝග කාරකය:

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

vim-plug:

Plug 'tpope/vim-commentary'

Vundle:

Plugin 'tpope/vim-commentary'

තවදුරටත් අභිරුචිකරණය

මෙය ඔබගේ .vimrc ගොනුවට එක් කරන්න: noremap <leader>/ :Commentary<cr>

උත්කෘෂ්ට හා පරමාණු මෙන් Leader+ එබීමෙන් ඔබට දැන් අදහස් ටොගල් කළ හැකිය /.


ස්තූතියි! අනාගතයේ දී එය html තුළ css අදහස් දැක්වීමට සහාය වනු ඇත්ද?
ඩෑන් ඕක්

25

පෙළෙහි සෘජුකෝණාස්රා තෝරා ගැනීමට Control-V භාවිතා කරන්න: පළමු #අක්‍ෂරයට යන්න, 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.
සන්තෝෂ් කුමාර්


16

මම vim 7.4 භාවිතා කරන අතර මෙය මට වැඩ කරයි.
අපි පේළි 3 ක් අදහස් දක්වමු / නොගැලපේ යැයි උපකල්පනය කරමු.

අදහස් දැක්වීමට:

: රේඛාව ආරම්භයේදී කිසිදු ටැබ් / ඉඩකඩ ඇති නම්
ctrl + Vඑවිට jjjඉන් shift + I (cappital i)පසුව //එවකට esc esc
රේඛාව ඔබ තවමත් ඉහත හෝ ස්වැප් වෙනුවෙන් කළ හැකි ආරම්භයේදී ටැබ් / ඉඩකඩ ඇති නම් c:
ctrl + Vඉන් jjjපසුව cඑවකට //පසුව esc esc

uncomment කිරීම සඳහා:

රේඛා ආරම්භයේදී කිසිදු ටැබ් / අවකාශය තිබේ නම්:
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, ., ආදිය ... uncomment කිරීම සඳහා, ඉවත් #(ඔබ පහර හැකි xපුරා #), සහ භාවිතා ආපසු කරන්න k, .ආදිය, ...


1
ආරම්භකයකුට පවා තේරුම් ගත හැකි හා භාවිතා කළ හැකි ඉතා සරල පිළිතුරකි. කෙසේ වෙතත්, අදහස් දැක්වීමට විශාල රේඛා ප්‍රමාණයක් මත එය සෙමින් ක්‍රියා කරයි. ඒ සඳහා වැඩ කිරීමට ඔබට I#<Esc>jබෆරයට ලිවිය හැකිය - කියන්න, c- ඉන්පසු කරන්න 10@c, හෝ ඔබට ගැලපෙන රේඛා ගණන.
ඩර්ඩෙමන්ඩ්

9

Vi හි පහත දැක්වෙන පේළි තුන නිරාකරණය කරන්නේ කෙසේද:

#code code
#code
#code code code

කර්සරය ඉහළ වම් #සංකේතයට ඉහළින් තබා ඔබන්න CtrlV. මෙය ඔබව දෘශ්‍ය වාරණ මාදිලියට යොමු කරයි. Jපේළි තුනම තේරීමට පහළ ඊතලය හෝ තුන් වරක් ඔබන්න . ඉන්පසු ඔබන්න D. සියලුම අදහස් අතුරුදහන් වේ. අහෝසි කිරීමට, ඔබන්න U.

Vi හි පහත දැක්වෙන පේළි තුන අදහස් කරන්නේ කෙසේද:

code code
code
code code code

කර්සරය ඉහළ වම් අක්ෂරයට ඉහළින් තබන්න, ඔබන්න CtrlV. මෙය ඔබව දෘශ්‍ය වාරණ මාදිලියට යොමු කරයි. මාධ්ය හෝ Jතුන් වතාවක් සියලු මාර්ග තුනක් තෝරා ගැනීමට. ඉන්පසු ඔබන්න:

I//Esc

එය I, //, සහ Escape යන ප්‍රාග්ධනයකි.

ඔබ එබූ විට ESC, තෝරාගත් සියලුම රේඛාවලට ඔබ නියම කළ අදහස් සංකේතය ලැබෙනු ඇත.


1
ඔබ "ඉහළ වාම" එහි පූරක නැතුව පාලුයි නම්, ඔබ විසින් හැකි o දෘශ්ය මාදිලිය දී "අනෙක් පැත්තේ" වෙත කර්සරය ගෙන යන්න සඳහා.
dylnmc

මම හිතන්නේ මෙය භාවිතා කිරීම වඩාත් සුදුසුයි. තෙවන පාර්ශවයක් අවශ්‍ය නැත, ස්වදේශික vim භාවිතා කරන්න
Ardi Nusawan

හොඳම පිළිතුර, සරල හා ඕනෑම තෙවන පක්ෂ තොරව
AZE

8

ඔව්, මෙම ප්‍රශ්නයට දැනටමත් පිළිතුරු 33 ක් (බොහෝ විට පුනරාවර්තන) ඇත.

Vim: චලන වලින් රේඛා විවරණය කරන්නේ කෙසේද යන්න පිළිබඳ තවත් ප්‍රවේශයක් මෙන්න . මූලික අදහස නම්, ඡේද yip2 ක් ටයිප් කිරීමෙන් හෝ මකා දැමීමෙන් ඡේදයක් යැවීම වැනි එකම ක්‍රමය භාවිතා කරමින් අදහස් දැක්වීම හෝ නොගැලපීම dj.

මෙම ප්‍රවේශය මඟින් ඔබට මෙවැනි දේ කිරීමට ඉඩ දෙනු ඇත:

  • ccjඊළඟ පේළි දෙක විවරණය කිරීමට සහ cukඒවා නිරවුල් කිරීමට;

  • cci{අවහිරයක් ගැන අදහස් දැක්වීමට සහ cui{එය නිරවුල් කිරීමට;

  • ccipසම්පූර්ණ ඡේදයක්ම අදහස් දැක්වීමට සහ cuipඑය නිරවුල් කිරීමට.

  • ccGඅන්තිම පේළිය දක්වා සෑම දෙයක්ම අදහස් දැක්වීමට සහ cuggපළමු පේළිය දක්වා සියල්ල නිරවුල් කිරීමට.

ඔබට අවශ්‍ය වන්නේ චලිතයන් හරහා ක්‍රියාත්මක වන ශ්‍රිත 2 ක් සහ එක් එක් ශ්‍රිතය සඳහා සිතියම් 2 ක් පමණි. පළමුව, සිතියම්කරණය:

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 ප්ලගීන දෙකම චලිතයන් භාවිතයෙන් අදහස් දැක්වීමට ඔබට ඉඩ සලසයි.
පොහොසත්

හොඳ දේවල්! ඉහළට. (මා කලින් භාවිතා කළ ප්ලගිනය වෙනුවට මෙම ප්‍රවේශය භාවිතා කිරීමට පටන් ගත හැකි යැයි මම සිතමි, එබැවින් එය ලිවීමට ස්තූතියි!)
පොහොසත්

7

ඔබ දැනටමත් රේඛා අංක දන්නවා නම්, එවිට ක්‍රියා n,ms/# //කරනු ඇත.


ඔබ සුදු අවකාශය ප්රමුඛ විය හැකිය සහ එක් සමග එහි පූරක අනුගමනය නොකළ හැකි නිසා n, ms / ^ \ හි # //: ඇත්තටම සමහර විට විය යුතුය.
මගහරින්න Huffman

7

මම පළමු හා අවසාන පේළි (ma සහ mb) සලකුණු කර පසුව කරන්න: 'a,' bs / ^ # //


7

මම ෆිල් සහ ජක්නෝගේ පිළිතුර ඒකාබද්ධ කර අවකාශයන් සමඟ නොවරදින අදහස් දැක්වුවෙමි:

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/\([^ ]\)/' . escape(b:comment_leader,'\/') . ' \1/'
    execute ':silent! s/^\( *\)' . escape(b:comment_leader,'\/') . ' \?' . escape(b:comment_leader,'\/') . ' \?/\1/'
endfunction
map <F7> :call CommentToggle()<CR>

එය ක්‍රියාත්මක වන ආකාරය:

අපි # -comments සමඟ වැඩ කරමු යැයි උපකල්පනය කරමු.

පළමු විධානය මඟින් s/\([^ ]\)/# \1/පළමු අභ්‍යවකාශ නොවන අක්‍ෂරය සොයන අතර එය + [^ ]සමඟ ප්‍රතිස්ථාපනය කරයි . තමන් විසින්ම ප්‍රතිස්ථාපනය කිරීම සිදු කරනු ලබන්නේ සෙවුම් රටාව සහ ප්‍රතිස්ථාපන රටාවෙනි.# itself\(..\)\1

දෙවන විධානය s/^\( *\)# \?# \?/\1/ද්විත්ව විවරණයකින් ආරම්භ වන රේඛා සොයයි ^\( *\)# \?# \?(අදහස් අතර අවකාශ 0 හෝ 1 ක් පිළිගැනීම) සහ ඒවා විවරණය නොකරන කොටස සමඟ ප්‍රතිස්ථාපනය කරයි \( *\)(එයින් අදහස් කරන්නේ පෙර අවකාශ ගණන සමාන වේ).

Vim රටා පිළිබඳ වැඩි විස්තර සඳහා මෙය පරීක්ෂා කරන්න .


6

මම EnhancedCommentify භාවිතා කරමි . එය මට අවශ්‍ය සියල්ල අදහස් දක්වයි (ක්‍රමලේඛන භාෂා, ස්ක්‍රිප්ට්, වින්‍යාස ගොනු). මම එය දෘශ්‍ය මාදිලියේ බන්ධන සමඟ භාවිතා කරමි. ඔබට අදහස් දැක්වීමට අවශ්‍ය පෙළ තෝරාගෙන co / cc / cd ඔබන්න.

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

5

tpopeකැඳවීම මගින් මෙම ජීවිතය වෙනස් කරන ප්ලගිනය තිබේvim-commentary

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

මෙම ප්ලගිනය සපයයි :

  • සනීපාරක්ෂාව
  • නිසි ලෙස ඇතුළත් කළ අදහස්
  • හිස් / අනවශ්‍ය රේඛා ගැන අදහස් දක්වන්නේ නැත

භාවිතය :

  • Vundle හරහා ස්ථාපනය කරන්න (හෝ මම අනුමාන කරන රෝග කාරකය).
  • ඔබගේ පා ​​text ය ඉස්මතු කර :පෙන්වන්න:<,'>
  • අටුවාව මෙහි ටයිප් :<,'>Commentaryකර ඔබන්න Enter.
  • උත්පාතය. ඔබ කළ අංකුරය.

vim-commentary(tpope හි සියලුම ප්ලගීන මෙන්) idiomatic vim වීමේ ප්‍රසාදයක් ඇත. gc= "යන්න අදහස් gcap
දක්වන්න

මෙය ජිම් ස්ටුවර්ට්ගේ ටිම් පාප්තුමාගේ පිළිතුර සංස්කරණය කිරීමක් විය හැකිද?
jdk1.0

5

ඔබට ප්ලගීන ස්ථාපනය කිරීමට නොහැකි නම් මෙම පිළිතුර වඩාත් ප්‍රයෝජනවත් වේ, නමුත් ඔබේ අදහස් දැක්වීම් අක්ෂර දැනට පවතින ඉන්ඩෙන්ටේෂන් මට්ටම් අනුගමනය කිරීමට ඔබට අවශ්‍යය.

මේ පිළිතුර බවට ඇලවීම සඳහා නිවැරදි කේතය පෙන්වන්න) 1 මෙහි .vimrcලබා ගැනීමට vim 7.4+අදහස් / එය පැහැදිලි කිරීම සඳහා දෘශ්ය මාදිලිය හා 2 1 කෙටිමං සමග එබුම මට්ටමේ තබා ඇති අතර) 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='//': මෙය විචල්යයේ විචල්යයක් නිර්මාණය කරයි. මෙම bමෙතන දැනට විවෘත ගොනු අර්ථය, මෙම අවස්ථාවේදී ප්රේරක කිරීමට අඩංගු වන විෂය පථය, සඳහන් කරයි. ඔබගේ අදහස් දැක්වීම් අක්ෂර වන අතර ඒවා මිල ගණන් වලින් ඔතා තිබිය යුතුය, උපුටා දැක්වීම් ටොගල් කිරීමේදී ආදේශ කළ යුතු දේවල කොටසක් නොවේ.

  • autocmd BufNewFile,BufReadPost *...: ස්වයංක්‍රීය විධාන විවිධ දේ මත අවුලුවන, මේ අවස්ථාවේ දී, නව ගොනුවක් හෝ කියවූ ගොනුව යම් දිගුවකින් අවසන් වන විට මේවා අවුලුවන. ක්‍රියාත්මක වූ පසු, පහත දැක්වෙන විධානය ක්‍රියාත්මක කරන්න, එමඟින් commentCharගොනු වර්ගය අනුව වෙනස් කිරීමට අපට ඉඩ ලබා දේ . මෙය කිරීමට වෙනත් ක්‍රම තිබේ, නමුත් ඔවුන් නවකතාවන්ට (මා වැනි) වඩාත් ව්‍යාකූල වේ.

  • function! Docomment(): කාර්යයන් ප්‍රකාශයට පත් කරන්නේ ආරම්භයෙන් functionසහ අවසන් කිරීමෙන් ය endfunction. කාර්යයන් ප්‍රාග්ධනයකින් ආරම්භ කළ යුතුය. මෙම !මෙම ශ්රිතය පෙර ලෙස අර්ථ කිසිදු කාර්යයක් මත ලියනු බව සහතික Docomment()මෙම සංස්කරණය සමග Docomment(). නොමැතිව !, මට දෝෂ තිබේ, නමුත් එයට හේතුව විය හැක්කේ විම් විධාන රේඛාව හරහා මම නව කාර්යයන් නිර්වචනය කිරීමයි.

  • execute '''<,''>s/^\s*/&'.escape(b:commentChar, '\/').' /e': ක්‍රියාත්මක කරන්න ඇමතුම් විධානයක්. මෙම අවස්ථාවෙහිදී, අපි ක්‍රියාත්මක කරන්නේ substitute, %මුළු බෆරය '<,'>සඳහා හෝ උද්දීපනය කළ කොටස වැනි පරාසයක් ගත හැකි (පෙරනිමියෙන් මෙය වත්මන් රේඛාවයි) . ^\s*රේඛාවක ආරම්භයට අනුරූප වන පරිදි රීජෙක්ස් වන අතර පසුව ඕනෑම සුදු අවකාශයක් ඇති අතර එය පසුව (හේතු කොට ගෙන &) එකතු වේ. මෙම .සිට මෙහි, නූල් අකාර සඳහා භාවිතා කරනු ඇත escape()හැකි මිල කැඳවීම් ඔතා යුතු නෑ. (මෙම අවස්ථාවේ දී, සහ ) තර්ක escape()සමඟ ගැලපෙන අක්‍ෂර වලින් ගැලවීමට ඔබට ඉඩ දෙයි . මෙම පසු, අපේ අවසානය නැවත concatenate මෙම ඇති නූල්,commentChar\/\substituteeධජ. මෙම ධජය අපට නිශ්ශබ්දව අසමත් වීමට ඉඩ සලසයි, එයින් අදහස් කරන්නේ යම් රේඛාවක ගැලපීමක් අපට සොයාගත නොහැකි නම්, අපි ඒ ගැන කෑගසන්නේ නැති බවයි. සමස්තයක් ලෙස, මෙම පේළිය මඟින් අදහස් දැක්වීමේ අක්ෂරයක් පළමු පෙළට මඳක් ඉදිරියෙන් තැබීමට අපට ඉඩ සලසයි, එයින් අදහස් කරන්නේ අප අපගේ ඉන්ඩෙන්ටේෂන් මට්ටම තබා ගන්නා බවයි.

  • execute '''<,''>s/\v(^\s*)'.escape(b:commentChar, '\/').'\v\s*/\1/e': මෙය අපගේ අවසාන විශාල දිගු විධානයට සමානය. මෙයට අද්විතීය, අපට ඇති අතර \v, එයින් අපට පැන යාමට අවශ්‍ය නොවන බවට සහතික ()වන අතර 1, එයින් අදහස් කරන්නේ අප සමඟ අප සෑදූ කණ්ඩායමයි (). මූලික වශයෙන්, අපි ඕනෑම සුදු අවකාශයකින් ආරම්භ වන රේඛාවකට ගැලපෙන අතර පසුව අපගේ අදහස් දැක්වීමේ චරිතය පසුව ඕනෑම සුදු අවකාශයක් ඇති අතර, අපි තබා ගන්නේ පළමු සුදු අවකාශය පමණි. නැවතත්, eඅපට එම රේඛාවේ අදහස් දැක්වීමේ චරිතයක් නොමැති නම් නිහ ly ව අසමත් වීමට ඉඩ දෙන්න.

  • 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 වේ (මෙම සිතියම්ගත කිරීම සමඟ සාමාන්‍ය මාදිලියේ "නැවත කිරීම" සඳහා ඔබට තවමත් Cr භාවිතා කළ හැකි බව සලකන්න). C-uතරමක් අවුල් සහගත ය, නමුත් මූලික වශයෙන් එය ඔබගේ දෘශ්‍ය උද්දීපනය පිළිබඳ තොරතුරු ඔබට අහිමි නොවන බවට වග බලා ගනී ( මෙම පිළිතුරට අනුව එය ඔබගේ විධානය ආරම්භ කිරීමට '<,'>අපට අවශ්‍ය දේ සමඟ ආරම්භ කරයි ).callමෙන්න අපි නම් කළ ශ්‍රිතය ක්‍රියාත්මක කිරීමට vim ට පවසන <cr>අතර enterබොත්තම එබීම යන්නෙන් අදහස් කෙරේ . ඇත්ත වශයෙන්ම ශ්‍රිතය ඇමතීමට අපට එය වරක් පහර දිය යුතුය (එසේ නොමැති නම් අපි call function()විධාන රේඛාවේ ටයිප් කර ඇති අතර, අපගේ ආදේශක සියල්ලම හරහා යාමට අපට එය නැවත පහර දිය යුතුය (ඇත්ත වශයෙන්ම ඇයිදැයි නොදනී, නමුත් කුමක් වුවත්).

කෙසේ වෙතත්, මෙය උපකාරී වේ යැයි බලාපොරොත්තු වෙමු. මෙම කිසිවක් සමග ඉස්මතු ගන්නා v, Vහෝ C-v, චෙක් පළමු පෙළ අදහස් කරන්නේ නම්, ඔව් නම්, uncomment සියලු උත්සාහ කරන්න රේඛා ඉස්මතු, සහ එසේ නොමැති නම්, එක් එක් පේලිය අදහස් චරිත ස්තරයක් එක් කරන්න. මෙය මාගේ අපේක්ෂිත හැසිරීමයි; බ්ලොක් එකේ සෑම පේළියක්ම අදහස් දැක්වුවද නැද්ද යන්න ටොගල් කිරීමට මට අවශ්‍ය නොවීය, එබැවින් මෙම විෂය පිළිබඳව බහුවිධ ප්‍රශ්න ඇසීමෙන් පසුව එය මට හොඳින් ක්‍රියාත්මක වේ.



3

මෙම සරල ස්නිපටය මගේ .vimrc වෙතින්:

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

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

එය // සඳහා - අදහස්, නමුත් ඔබට එය වෙනත් අක්ෂර සඳහා පහසුවෙන් අනුවර්තනය කළ හැකිය. Jqno යෝජනා කළ පරිදි නායකයෙකු සැකසීමට ඔබට autocmd භාවිතා කළ හැකිය.

මෙය ස්වාභාවිකවම පරාසයන් සහ දෘශ්‍ය මාදිලිය සමඟ වැඩ කරන ඉතා සරල හා කාර්යක්ෂම ක්‍රමයකි.


මේ සුන්දර වන අතර, විසින් බහු තෝරාගත් මාර්ග සඳහා වැඩ Vමෙන්ම
මාකස් Dutschke

3

ඔබට tpope ( https://github.com/tpope/vim-commentary ) මගින් 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තර්කයක් පිළිගෙන වත්මන් තේරීමේදී සෑම පේළියකම ආරම්භයේ දී තර්කය තබන විධානයක් නිර්මාණය කිරීම සඳහා මෙම රේඛාව ඔබට එක් කරන්න .

උදා: පහත පා text ය තෝරාගෙන තිබේ නම්:

1
2

ඔබ මෙය ක්‍රියාත්මක කරන්නේ : :Comment //, ප්‍රති result ලය වනු ඇත්තේ:

//1
//2

3

මෙහි පිළිතුරු වල අදහස් වලින් පටන් ගෙන මම මගේම අදහස් දැක්වීමේ කාර්යයක් ආරම්භ කළෙමි. එය විවරණ සහ අක්‍රීය කරයි. එයට //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>

1
මම ඔබේ විසඳුමේ තරමක් වෙනස් අනුවාදයක් සාදා ඇති අතර එය කර්සරයේ පිහිටීම යථා තත්වයට පත් කරයි, ඒ පිළිබඳ ඔබේ මතයට මම කැමතියි. on github
SergioAraujo

සිසිල්. ඔබට මගේ ලිපිය සංස්කරණය කර ඔබේ විසඳුම එක් කළ හැකිය (සමානකම නිසා)!
මයික්

සී, සීපීපී, ජාවා බැක්ස්ලෑෂ් කිරීම වළක්වා ගැනීම සහ ඊ 488 වළක්වා ගැනීම සඳහා ආදේශකවල වෙනත් බෙදුම්කරුවෙකු භාවිතා කිරීම වළක්වා ඇත. ජාවා, සීපීපී සඳහා පරතරය වෙනස් වන බැවින් අදහස් දැක්වීම් අක්ෂර තුනක් ඇත, // ප්ලස් අවකාශය, මෙය සිදු කරන්නේ l: අවකාශයෙනි.
සර්ජියෝ අරාජෝ

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 ++ හෝ PHP , 4-අවකාශය එබුම් සමග:

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

අවාසි නම් ඔබට අහිමි වීම (සහ )වාක්‍ය චලනය සඳහා (නමුත් dasඑහි පුරවා ගත හැකිය), ඔබ වරින් වර තෝරාගත් හා ප්‍රතිස්ථාපනය කිරීමට හෝ CtrlVදිගු කොටස් හැසිරවීමට පසුබසිනු ඇත . නමුත් එය ඉතා දුර්ලභ ය.

සී-ස්ටයිල් සඳහා, දිගු අදහස් වඩාත් හොඳින් හසුරුවනු ලබන්නේ:

set cindent
set formatoptions=tcqr

... V[move]gqවචන එතීම නැවත කිරීමට භාවිතා කිරීම සමඟ හොඳින් සංයුක්ත වේ .


2

මම කැමතියි /* ... */(සී ඇන්සි අදහස්), එබැවින් මෙන්න එය ඔබ වෙනුවෙන් මගේ උපක්‍රමයයි. ඇත්ත වශයෙන්ම, ඔබට එය විවිධ අවස්ථාවන්හිදී භාවිතා කිරීමට අනුවර්තනය කළ හැකිය.


/ * ... * / සමඟ අදහස් දක්වන්න

පෙළ තෝරන්න (ආරම්භයට යන්න, දෘශ්‍ය කොටස ආරම්භ කරන්න, සමඟ පනින්න }):

<c-V>}

තේරීමේදී යෙදිය යුතු විධානය ටයිප් කරන්න

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

විධානය පෙනෙනු ඇත: :'<,'>norm i /* ^[$a */

විස්තර සඳහා (i *) බලන්න.


/ * ... * /

පෙළ තෝරන්න (පෙර මෙන් හෝ ඔබ කැමති වෙනත් ආකාරයකින්):

<c-V>}

තේරීමේදී යෙදිය යුතු විධානය ටයිප් කරන්න

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

විධානය පෙනෙනු ඇත: :'<,'>norm :s-\s*/\*\s*-^M$bbld$

විස්තර සඳහා (ii *) බලන්න.


ප්‍රති ult ලය

බලපෑම යනු අදහස් දැක්වීම් රේඛාව අනුව ය:

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 *) බලන්න.


ප්‍රති ult ලය

බලපෑම බහු පේළි සඳහා තනි විවරණයකි:

Comment block
Comment block
Comment block

බවට පත්වේ (සහ අනෙක් අතට):

/* Comment block
Comment block
Comment block */

පැහැදිලි කිරීම්

(i *) එය ක්‍රියාත්මක වන්නේ normතෝරාගත් සෑම පේළියකම එකම විධානය නැවත නැවතත් අදාළ කර ගැනීමෙනි. විධානය සරලව a ඇතුළු කර /*, එම රේඛාවේ අවසානය සොයාගෙන a ඇතුළු කිරීමෙන් අවසන් වේ*/

: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 *) මැද ඇති ඕනෑම තැනක, පිටුපසට a සොයාගෙන /*එය මකා දමයි; ඉදිරියට සොයා ගනී */, එය මකා දමයි.

?/\*<enter>xx/\*/<enter>xx
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.