เป็นไปได้ไหมที่จะเพิ่มเครื่องหมายที่จะแสดงในคอลัมน์สัญญาณเมื่อใดก็ตามที่บรรทัดมีกลุ่มสิ่งที่ต้องทำ (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
ความคิดเห็นถูกลบไปแล้ว?