เป็นไปได้ไหมที่จะเพิ่มเครื่องหมายที่จะแสดงในคอลัมน์สัญญาณเมื่อใดก็ตามที่บรรทัดมีกลุ่มสิ่งที่ต้องทำ (ToDo, FIXME ... )
ปรับเปลี่ยนสีของฉันฉันเปลี่ยนไฮไลต์ของกลุ่มสิ่งที่ต้องทำ แต่ต้องการมีตัวบ่งชี้ในคอลัมน์สัญญาณเช่นข้อผิดพลาดและคำเตือนของ Syntastic
เป็นไปได้ไหมที่จะเพิ่มเครื่องหมายที่จะแสดงในคอลัมน์สัญญาณเมื่อใดก็ตามที่บรรทัดมีกลุ่มสิ่งที่ต้องทำ (ToDo, FIXME ... )
ปรับเปลี่ยนสีของฉันฉันเปลี่ยนไฮไลต์ของกลุ่มสิ่งที่ต้องทำ แต่ต้องการมีตัวบ่งชี้ในคอลัมน์สัญญาณเช่นข้อผิดพลาดและคำเตือนของ Syntastic
คำตอบ:
ลองใช้ฟังก์ชั่นนี้:
function! SignKeyword()
silent! sign undefine todo
sign define todo text=>> texthl=Search
g/\v\C(<TODO>|<FIXME>)/execute "sign place 9999 line=" . line('.')
\ . " name=todo buffer=" . bufnr('')
nohlsearch
endfunction
ตอนนี้เรียกใช้ฟังก์ชันบนบรรทัดคำสั่ง:
:call SignKeyword()
หรือเพิ่มการแมปใน~/.vimrcการโทรของคุณ:
nnoremap <your mapping> :call SignKeyword()<cr>
หรือเพิ่ม autocmd ตัวอย่างเช่นหากคุณต้องการให้เรียกใช้ฟังก์ชันโดยอัตโนมัติเมื่อเปิดไฟล์ที่มีไฟล์ประเภท markdown:
autocmd FileType markdown call SignKeyword()
บรรทัดแรกของฟังก์ชั่นsilent! sign undefine todoจะลบเครื่องหมาย todo หากมีอยู่แล้วดังนั้นหากสัญญาณของคุณถูกวางผิดที่หลังจากลบหรือเพิ่มบรรทัดคุณสามารถเรียกคืนฟังก์ชันเพื่อแก้ไขได้ทันที
บรรทัดที่สองกำหนดสัญลักษณ์ที่มีชื่อเป็นสิ่งที่ต้องทำซึ่งข้อความคือ>>(คุณสามารถเปลี่ยนให้เหมาะกับความต้องการของคุณ) และใช้กลุ่มค้นหาไฮไลต์ (สิ่งเดียวกัน)
บรรทัดที่สามใช้คำสั่งโกลบอล:
:g/pattern/command
คำสั่งส่วนกลางดำเนินการคำสั่งในทุกบรรทัดที่ตรงกับรูปแบบ
นี่คือรูปแบบ\v\C(<TODO>|<FIXME>)ซึ่งหมายความว่าเส้นใด ๆ ที่มีทั้งคำว่าสิ่งที่ต้องทำหรือFIXME
regex มีอะตอม\Cเพื่อให้การค้นหาเคารพกรณี (ไม่ว่าตัวเลือก 'เพิกเฉย' ของคุณคืออะไร) \cหากคุณต้องการค้นหาเพื่อไม่เคารพกรณีที่เปลี่ยนไป
เมื่อใดก็ตามที่พบบรรทัดดังกล่าวบรรทัดต่อไปนี้จะถูกดำเนินการโดยฟังก์ชัน:
execute "sign place 9999 line=" . line('.')
\ . " name=todo buffer=" . bufnr('')
มันดำเนินการ (ด้วย:executeคำสั่ง) เนื้อหาของสตริงต่อไปนี้:
"sign place 9999 line=" . line('.') . " name=todo buffer=" . bufnr('')
สตริงรวมถึงสองกลุ่มในตัวฟังก์ชั่น: และline() ส่งคืนจำนวนบรรทัดปัจจุบันเมื่อพบการจับคู่โดยคำสั่งโกลบอลและส่งคืนจำนวนบัฟเฟอร์ปัจจุบันbufnr()
line('.')bufnr('.')
ตัวอย่างเช่นหากคำสั่งโกลบอลพบการจับคู่บนบรรทัดที่ 10 ในบัฟเฟอร์ 5 คำสั่งนั้นจะให้:
"sign place 9999 line=" . 10 . " name=todo buffer=" . 5
จุดต่อกันสตริงและในที่สุดมันก็จะประเมินว่า:
"sign place 9999 line=10 name=todo buffer=5"
ซึ่งเป็น:signคำสั่งที่วางเครื่องหมายบนบรรทัดที่ 10 ในบัฟเฟอร์ 5
9999 เป็นรหัสสุ่มที่เลือกสำหรับสัญญาณ (คุณสามารถเลือกอีกอันได้)
บรรทัดที่สี่ของฟังก์ชั่น:nohlsearchปิดใช้งานการเน้นของรูปแบบที่ตรงกัน
แก้ไข: ฉันแก้ไข regex ต้นฉบับผิด ผมเขียนแต่ผมคิดว่ามันควรจะเป็น^[TODO|FIXME] \v\C(<TODO>|<FIXME>)ขออภัยในความไม่สะดวกฉันยังคงเรียนรู้ vimscript
todoสัญญาณทั้งหมดแต่เพียงแค่สังเกตเห็นว่าการลบเส้นที่มีการลบเครื่องหมายดังนั้นก็โอเค
silent! sign undefine todoตกลงฉันได้เพิ่มบรรทัดนี้ที่จุดเริ่มต้นของการทำงาน: มันลบเครื่องหมายสิ่งที่ต้องทำถ้ามันมีอยู่แล้วเพื่อให้ถ้าสัญญาณของคุณถูกวางผิดที่หลังจากลบบรรทัดที่มีคำหลักที่ต้องทำหรือ FIXME คุณสามารถเรียกคืนฟังก์ชั่นเพื่อแก้ไขได้ทันที
^[TODO|FIXME] \v(TODO|FIXME)regex ใหม่จะตรงกับสายที่มีหนึ่งในคำหลัก some code # FIXME this line needs to be fixedแต่ไม่เริ่มต้นของบรรทัดเนื่องจากผมคิดว่าสายอาจมีรหัสบางอย่างก่อนที่ความคิดเห็นสำหรับตัวอย่างเช่นนี้ regex ก่อนหน้านี้เป็นความผิดพลาดอย่างสมบูรณ์ขอโทษสำหรับความไม่สะดวกที่ฉันยังคงเรียนรู้ vimscript ...
คุณสามารถใช้ปลั๊กอินDynamicSignsของฉัน สิ่งนี้อนุญาตให้เรียกว่า "SignExpression" ซึ่งคล้ายกับนิพจน์การพับ
ดังนั้นคุณสามารถทำได้ :SignExpression getline(v:lnum)=~'TODO'?'Warning':0
อ่านความช่วยเหลือสำหรับตัวอย่างเพิ่มเติมของสิ่งที่เป็นไปได้
ข้อได้เปรียบของการใช้ปลั๊กอินของฉันคือมันจะติดตามการเปลี่ยนแปลงของบัฟเฟอร์และปรับสัญญาณตาม
TODOความคิดเห็นถูกลบไปแล้ว?