سؤال

لدي هدف بسيط: خريطة Ctrl-C ، أمر لا أعتقد أنني اعتدت على قتله على الإطلاق ، لإدراج تلقائي في بداية الخط (الشخصيات) الصحيحة للتعليق على هذا الخط وفقًا ل fileType في الملف.

كنت أحسب أنه يمكنني استخدام التوزيع التلقائي للتعرف على نوع الملف وتعيين متغير VIM على حرف التعليق الصحيح عندما يكون الملف مفتوحًا. لذلك جربت شيئًا مثل:

" Control C, which is NEVER used. Now comments out lines!
autocmd BufNewFile,BufRead *.c let CommentChar = "//"
autocmd BufNewFile,BufRead *.py let CommentChar = "#"
map <C-C> mwI:echo &CommentChar<Esc>`wll

تمثل هذه الخريطة موقعي الحالي ، يذهب إلى بداية الخط في وضع إدراج ، يردد شخصية التعليق في تلك المرحلة, ، يدخل وضع الأوامر ، ويعود إلى علامة المجموعة ، ويذهب إلى حرفين في تعويض أحرف التعليق المدرجة (على افتراض تعليق C -Style).

الجزء المائل هو الجزء الذي أواجه مشكلة معهم ؛ هناك فقط كحامل مكان لتمثيل ما أريد القيام به. هل يمكنك مساعدتي في معرفة كيفية تحقيق ذلك؟ نقاط المكافأة إذا كنت تستخدم Strlen (CommentChar) لتخفيف العدد الصحيح من المساحات إلى اليمين! نقاط مكافأة إضافية لـ Vim-Master تتضمن كيفية القيام بتعليقات على غرار الكتلة إذا كنت في وضع مرئي !!

ما زلت جديدًا إلى حد ما في برنامج VIM Scripting ؛ بلدي .vimrc هو طول 98 سطرا ، لذلك إذا كنت تستطيع مساعدتي من خلال شرح أي إجابات تقدمها! شكرًا.

هل كانت مفيدة؟

المحلول

يمكنك استخدام <C-r> هنا:

noremap <C-c> mwI<C-r>=g:CommentChar<CR><Esc>`wll

نرى :h i_CTRL-R.

انظر أيضا nerdcommenter البرنامج المساعد ، مع تعيينه سيبدو هكذا:

" By default, NERDCommenter uses /* ... */ comments for c code.
" Make it use // instead
let NERD_c_alt_style=1
noremap <C-c> :call NERDComment(0, "norm")<CR>

ولن تضطر إلى تحديد شخصيات التعليق بنفسك.

نصائح أخرى

لقد سحبت هذا من نصائح VIM Wiki في مرحلة ما واستخدمته بنفسي. الجانب السلبي الوحيد هو أنه يضيف مساحة إلى نهاية الخط (الخطوط) لسبب ما ، وربما شيء صغير تم تجاهله.

" Set comment characters for common languages
autocmd FileType python,sh,bash,zsh,ruby,perl,muttrc let StartComment="#" | let EndComment=""
autocmd FileType html let StartComment="<!--" | let EndComment="-->"
autocmd FileType php,cpp,javascript let StartComment="//" | let EndComment=""
autocmd FileType c,css let StartComment="/*" | let EndComment="*/"
autocmd FileType vim let StartComment="\"" | let EndComment=""
autocmd FileType ini let StartComment=";" | let EndComment=""

" Toggle comments on a visual block
function! CommentLines()
    try
        execute ":s@^".g:StartComment." @\@g"
        execute ":s@ ".g:EndComment."$@@g"
    catch
        execute ":s@^@".g:StartComment." @g"
        execute ":s@$@ ".g:EndComment."@g"
    endtry
endfunction

" Comment conveniently
vmap <Leader>c :call CommentLines()<CR>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top