เป็นกลุ่ม, พฤติกรรมการแสดงความคิดเห็นที่มีความอ่อนไหวตามบริบท / ไม่ใส่ข้อคิดเห็น


9

ฉันจะแก้ไขมากรหัส PHP .vimrcกับกลุ่มและผมเคยทำงานเป็นอุปสรรค์กับแมโครบางอย่างในของฉัน

ขณะนี้ฉันใช้มาโครสองตัวนี้เพื่อแสดงความคิดเห็น / ไม่แสดงความคิดเห็นในรูปแบบ C

"c-style (//) comment (press the [.] key)
au FileType php vnoremap . :s/^\(\s*\)\(.\+\)$/\1\/\/\2/<CR>:noh<CR>gv
"c-style (//) uncomment (press the [,] key)
au FileType php vnoremap , :s/^\(\s*\)\/\//\1/<CR>:noh<CR>gv

และทั้งสองเพื่อแสดงความคิดเห็น / uncomment ในสไตล์ HTML

"html-style (<!-- -->) comment (press the [.] key)
au FileType html vnoremap . :s/^\(\s*\)\(.\+\)$/\1<!-- \2 -->/g<CR>:noh<CR>gv
"html-style (<!-- -->) uncomment (press the [,] key)
au FileType html vnoremap , :s/^\(\s*\)<!-- \(.*\) -->/\1\2/g<CR>:noh<CR>gv

มาโครเหล่านี้ทำงานได้ดีเมื่อนำไปใช้กับประเภทไฟล์ที่ต้องการ แต่เนื่องจากมักจะมี HTML ฝังอยู่ภายในไฟล์ PHP รูปแบบการแสดงความคิดเห็น PHP จึงไม่มีประโยชน์

มีวิธีใดที่ Vim จะตรวจสอบว่ามันทำงานกับโค้ด HTML ในไฟล์ PHP หรือไม่จากนั้นจึงใช้พฤติกรรมการแสดงความคิดเห็นที่ถูกต้อง?

แก้ไข: ฉันรู้ว่าฉันสามารถตั้งค่าชนิดไฟล์ด้วยตนเองและมีปลั๊กอินสำหรับสิ่งนี้ฉันต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการเขียนแมโครที่ดีกว่า


คำตอบ:


2

ในการทำสิ่งที่คุณต้องการไม่มีวิธีใดในการเขียนฟังก์ชั่นและทำแผนที่ให้เป็นกุญแจที่คุณต้องการ

ในการเริ่มต้น:echo synIDattr(synID(line("."), col("."), 1), "name")จะพิมพ์ชื่อของกลุ่มไฮไลต์สำหรับคำปัจจุบันภายใต้เคอร์เซอร์

คุณสามารถใช้ข้อมูลนั้นเพื่อกำหนดสไตล์ความคิดเห็นที่จะใช้

ตัวอย่างคร่าวๆเพื่อให้คุณเริ่มต้น:

function! s:MyComment () range
    for i in range(a:firstline, a:lastline)
        exe "normal " . i . "gg"
        normal ^
        let stuff = synIDattr(synID(line("."), col("."), 1), "name")
        if strpart(stuff, 0, 4) == "html"
            normal I<!-- 
            normal A -->
        else
            normal I//
        endif
    endfor
endfunction
vmap <silent> . :call <SID>MyComment()<CR>

0

ในกรณีที่คุณสามารถยอมรับด้วยตนเองว่าคุณต้องการใช้ความคิดเห็นประเภทใดฉันจะแนะนำเคล็ดลับนี้

คุณจะต้องจำได้ 4 แบบ:

C-style:
,* comment  
,c uncomment

HTML style: 
,< comment 
,d uncomment
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.