การเน้นเป็นกลุ่มแบบกำหนดเอง


12

ตอนนี้ฉันกำลังแก้ไข xml อยู่และฉันทิ้งความคิดเห็นบางอย่างไว้ในสิ่งที่จะกลับมา แบบนี้

<!-- Question: bla bla -->

ตอนนี้ฉันกำลังแก้ไขด้วย vim และฉันต้องการให้ vim เน้นคำถามตอนนี้เพื่อให้ฉันสามารถดูรหัสของฉันและค้นหาสถานที่ทั้งหมดที่ฉันต้องการดูได้อย่างง่ายดาย ฉันรู้ว่าฉันต้องเพิ่มบางสิ่งบางอย่างใน vimrc ของฉัน แต่ฉันคิดว่าฉันอาจกำลังค้นหาสิ่งที่ผิด

ปรับปรุง

ฉันพยายามใส่ในของฉัน.vimrcแต่มันไม่มีผล:

syn keyword JakeAnnotation      Question

hi JakeAnnotation gui=bold term=bold cterm=bold

อัปเดต 2

ที่จริงฉันเห็นว่าสิ่งที่ฉันทำมาก่อนมีผลบางอย่างเพราะเมื่อฉันทำสิ่งนี้:

:hi

มันแสดงให้ฉันเห็นทุกสิ่งที่มันกำลังเน้นและหนึ่งในรายการคือ:

JakeAnnotation xxx term=bold cterm=bold ctermbg=6

( และรูปแบบ xxx ถูกต้อง )

สิ่งนี้ทำให้ฉันรู้สึกว่าฉันไม่ได้กำหนดคำถามอย่างเหมาะสม คำถามต้องอยู่ในบรรทัดด้วยตัวเองหรือไม่?

อัปเดต 3

ตกลงเพื่อโพสต์ของผู้ใช้ 22303ฉันมีสิ่งนี้ทำงาน:

highlight MyQuestion cterm=bold term=bold ctermbg=blue ctermfg=black
match MyQuestion /Question/

อย่างไรก็ตามฉันสงสัยว่าคุณได้รับอนุญาตให้มีหนึ่งคู่ต่อหนึ่งไฟล์เท่านั้น เพราะเมื่อฉันทำสิ่งนี้:

highlight MyQuestion cterm=bold term=bold ctermbg=blue ctermfg=black
match MyQuestion /Question/
highlight MyRelook cterm=bold term=bold ctermbg=blue ctermfg=black
match MyRelook /Another look/

คนแรกหยุดทำงาน (แต่อันที่สองใช้งานได้)

คำตอบ:


10

ฉันคิดว่าเราให้คำตอบกับคุณไม่ถูกต้อง นี่คือบางสิ่งที่ฉันควรลองบนเครื่องของฉัน

ขั้นแรกสร้างกลุ่มไฮไลต์ใหม่ของคุณเอง:

:highlight MyQuestions guifg=red guibg=green

ตอนนี้ให้ระบุว่ากลุ่มไฮไลต์จะมีอยู่ทุกครั้งที่จับคู่รูปแบบ:

:syntax match MyQuestions /Question/

ซึ่งควรเริ่มแสดงจุดเด่นของข้อความ 'คำถาม' ในแต่ละบรรทัดที่มีข้อความนั้น หากต้องการขยายเพื่อแสดงทั้งบรรทัดคุณจะเปลี่ยนข้อความค้นหาเพื่อให้มีอักขระตัวแทนที่ตรงกันทั้งบรรทัดบางอย่างดังนี้:

:syntax match MyQuestions /.*Question.*/


ที่จริงแล้วการเรียงลำดับใช้งานได้เท่านั้น ... ฉันสงสัยว่าคุณได้รับอนุญาตให้มีการแข่งขันครั้งละหนึ่งรายการเท่านั้นดูการอัปเดต # 3 ...
sixtyfootersdude

1
@sixtyfootersdude: ขออภัยอีกครั้งมีข้อผิดพลาดเล็กน้อย คำสั่งจับคู่ทั้งหมดจะต้องเป็นคำสั่ง "จับคู่ไวยากรณ์" แทน ดังนั้นแทนที่จะเป็น [: จับคู่ MyQuestions /.*Question.*/] คุณต้องการใช้ [: ไวยากรณ์จับคู่ MyQuestions /.*Question.*/] ที่ช่วยให้คุณมีการแข่งขันที่แตกต่างกันมากเท่าที่คุณต้องการ อันที่จริงแล้วคำสั่งเหล่านี้เป็นประเภทคำสั่งที่พบบ่อยที่สุดที่อยู่ในไฟล์ไวยากรณ์ แต่คุณสามารถดำเนินการได้ทุกที่ที่คุณต้องการไม่ว่าจะเป็นบรรทัดคำสั่ง vimrc หรือสคริปต์อื่น ๆ
22303

การเพิ่มsyntaxinfront of match...ในไฟล์ vimrc ของฉันทำให้การจับคู่ไม่มีผลเลย นี่คือสิ่งที่ฉันควรจะทำ การทำเช่นนี้กับไฟล์ที่เปิดยังไม่มีผลกระทบ
sixtyfootersdude

1
@ Sixtyfooters: ไม่แน่ใจว่าเกิดอะไรขึ้นกับคุณ แต่นั่นเป็นวิธีที่จะทำ ทดสอบที่บรรทัดคำสั่งก่อนที่จะวางสคริปต์ เมื่อกำหนดแล้วให้ตรวจสอบว่ามีกลุ่มใดบ้างและมีการเน้นกลุ่มใดด้วยการออกคำสั่ง ": Highlight" (หรือเลือก "ไวยากรณ์", "ทดสอบการเน้น" จากเมนู gui ใน gvim) จำไว้ว่าคุณต้องการใช้คำสั่งไฮไลต์ก่อนเพื่อสร้างกลุ่มจากนั้นใช้ 'จับคู่ไวยากรณ์' เพื่อตั้งค่ารูปแบบการจับคู่
user22303

@sixtyfooters: ฉันสมมติว่าคุณกำลังเรียกใช้ vim ในเทอร์มินัล (เช่นไม่ใช่ gvim) ดังนั้นการตั้งค่าคุณสมบัติของคำควรใช้งานได้ ฟังดูแล้วเหมือนกับว่าคำสั่งไวยากรณ์กำลังได้รับการเคลียร์เมื่อมีการโหลดไฟล์ใหม่และไฟล์ไวยากรณ์ที่เชื่อมโยงนั้นกำลังทำงานและล้างคำสั่งไวยากรณ์ก่อนหน้าทั้งหมด ดังนั้นเพียงเพื่อตรวจสอบอีกครั้งเมื่อใช้บรรทัดคำสั่งคุณป้อนคำสั่งเหล่านี้ทุกครั้งที่คุณโหลดไฟล์หรือไม่ ฉันคิดว่าคุณสามารถลองทดสอบด้วยข้อความในบัฟเฟอร์ใหม่ที่ยังไม่ได้บันทึกและยังไม่ได้กำหนดชื่อไฟล์
22303

5

ไฟล์ที่คุณต้องการคือไฟล์ 'ไวยากรณ์' ลองดูในหรือ/usr/local/share/vim/syntax/ /usr/share/vim/syntax/ไฟล์ที่คุณต้องการคือ xml.vim

สิ่งที่ง่ายที่สุดที่จะทำคือหาบรรทัดที่มี

syn keyword xmlTodo         contained TODO FIXME XXX

และเปลี่ยนเป็น:

syn keyword xmlTodo         contained TODO FIXME XXX Question

นี้จะเพิ่ม 'สิ่งที่ต้องทำ' ไฮไลท์ที่จะแสดงความคิดเห็นใด ๆ Questionที่มีข้อความ

หากคุณกำลังจะใช้สิ่งนี้เพื่อ (เคย) มันจะเป็นการดีที่สุดที่จะคัดลอก xml.vim ลงในเครื่องของคุณ~/.vim/syntaxเพื่อให้การเปลี่ยนแปลง vim ไม่เขียนทับไฟล์ไวยากรณ์ที่กำหนดเองของคุณ

ปรับปรุง

หากคุณต้องการความสามารถที่คล้ายกัน (sortof) ในไฟล์ใด ๆฉันจะใช้คำสั่ง 'goto' ฉันจะยอมรับว่านี่เป็นเหมือน hlsearch ซึ่งคุณบอกว่าทำให้คุณรำคาญ

ขณะแก้ไขเมื่อเคอร์เซอร์อยู่บนคำให้พิมพ์gdเพื่อค้นหาจากจุดปัจจุบันในไฟล์หรือgDเพื่อค้นหาตั้งแต่ต้น ทุกคำในไฟล์ของคุณที่ตรงกับคำปัจจุบันจะถูกเน้น คุณสามารถพิมพ์nเพื่อข้ามไปยังอินสแตนซ์ถัดไปของคำนั้น

ฉันมักจะทำเช่นนี้เพราะคุณจะได้รับไฮไลต์และการนำทางด้วยการพิมพ์ที่น้อยที่สุด คุณปิดไฮไลต์ตามปกติ::noh[lsearch]


ว้าว! เสียงเหมือนสิ่งที่ฉันต้องการจะทำ ฉันไม่มี~/.vim/ folder. If I created it and create the file ซินแท็กซ์ `ฉันต้องอ้างอิงมันที่ไหนสักแห่ง (อาจจะ.vimrc?) เพื่อบอกให้ใช้เป็นกลุ่ม?
sixtyfootersdude

1
Nope เสียงเรียกเข้าจะค้นหาโดยอัตโนมัติ (และไดเรกทอรีอื่นสองสาม - ตัวอย่าง: ปลั๊กอิน, สี, คอมไพเลอร์) และหากไฟล์ไวยากรณ์มีอยู่ในพื้นที่บ้านของคุณมันจะมีความสำคัญของการเริ่มต้นของระบบ
DaveParillo

1
นอกจากนี้เพื่อให้ชัดเจนคุณต้องการสร้างไดเรกทอรี syntaxและใส่ชื่อไฟล์ไว้ในนั้นxml.vim
DaveParillo

ฉันควรใส่. vimrc ของฉันลงใน. vim dir ของฉันหรือไม่
sixtyfootersdude

1
ไฟล์ไวยากรณ์จะอยู่ใน. vim dir ของคุณ การเน้นไวยากรณ์มีวัตถุประสงค์เพื่อเป็นภาษาเฉพาะ หากคุณต้องการความสามารถที่คล้ายกัน (sortof) ในไฟล์ใด ๆฉันจะใช้คำสั่ง 'goto' ฉันจะเพิ่มเข้าไปในคำตอบของฉัน
DaveParillo

2

คุณสามารถทำได้

:set hlsearch

จากนั้นค้นหาคำถาม


นั่นคือสิ่งที่ฉันได้ทำ แต่ hlsearch ทำให้ฉันรำคาญ +1 ขอบคุณสำหรับคำแนะนำ
sixtyfootersdude

2

คุณมีหลายทางเลือก
- หนึ่งตามที่ Dominik พูดถึง ... คุณสามารถค้นหาสิ่งเหล่านี้ทีละตัว (ไม่ใช่แบบที่ปฏิบัติได้)
- สองคุณสามารถทำ ": g / <- คำถาม" เพื่อรับ "รายการ" ของพวกเขาทั้งหมด (ดีขึ้นเล็กน้อย ให้ภาพรวม)
- สามคุณสามารถตั้งกลุ่มที่เน้นได้หากคุณใช้ความคิดเห็นแบบนั้นในไฟล์ xml (ฉันไม่รู้ว่าหน้าตาเป็นอย่างไร xml ดังนั้นฉันไม่รู้ว่ามีบางอย่างหรือไม่ ความคิดเห็นประเภทอื่นในพวกเขาเช่นกัน) สิ่งนี้จะดีถ้าคุณตั้งค่าเป็น vimrc เนื่องจากเมื่อคุณรีเฟรช vim ด้วยเวอร์ชันที่ใหม่กว่าไฟล์ xlm.vim ของคุณจะหายไป


+1 ฉันชอบ:g/คำแนะนำ แต่อาจเป็นเรื่องยากที่จะนำไปใช้หาก 'คำถาม' ไม่ได้ติดตามแท็กความคิดเห็นทันที
DaveParillo

@DaveParillo - อ่าใช่ อย่างที่ฉันพูดฉันไม่รู้อะไรเกี่ยวกับ xml ดังนั้นฉันคิดว่ามันเป็นแบบนั้นเสมอ
โกง

ฉันจะตั้งค่ากลุ่มไฮไลต์ได้อย่างไร
sixtyfootersdude

1
@sixtyfootersdude - ดู ": help e410"
โกง

@Idigas: ขอบคุณสำหรับการอ้างอิง ลองดู แต่ก็ยังไม่สามารถแก้ปัญหาของฉันได้ ฉันเพิ่มการอัปเดตในคำถาม ขอบคุณ
sixtyfootersdude

1

คุณไม่จำเป็นต้องใส่คำสั่งลงใน vimrc ของคุณ คุณสามารถป้อนได้ที่บรรทัดคำสั่งแล้วล้างเมื่อคุณไม่ต้องการเน้นอีกต่อไป คำสั่งจะเป็นดังนี้:

: hi Question guifg = red guibg = blue gui = ตัวหนา

ใน gvim (เช่น vim with gui) ที่จะตั้งค่าฉากหน้า (guifg), พื้นหลังและการตั้งค่าตัวอักษรทั่วไป

หากคุณต้องการกำจัดการไฮไลต์นั้นให้ทำดังนี้:

: สวัสดีคำถามที่ชัดเจน

การใช้ vim ภายในเทอร์มินัลคุณสามารถแก้ไขเพื่อใช้คำสั่งนี้:

: hi Question ctermfg = red ctermbg = คำศัพท์สีน้ำเงิน = ตัวหนา

แน่นอนว่าคุณสามารถใส่สิ่งเหล่านี้ลงใน vimrc ของคุณและคุณสามารถรวมค่า gui และค่าสถานะเป็นคำสั่ง hi เดี่ยว


[เพิ่มด้านล่างหลังจากฉันอ่านคำตอบโปสเตอร์อื่น]

ขออภัยฉันสมมติว่าไวยากรณ์ของบรรทัดคำถามของคุณตรงกับการตั้งค่าไฟล์ไวยากรณ์ของคุณสำหรับแท็กไฮไลต์ 'คำถาม' ในตัวของ Vim เพียงแค่ดูคำตอบอื่น ๆ ที่กล่าวถึงไฟล์ไวยากรณ์ xml สำหรับ vim และจากนั้นคุณสามารถออกคำสั่งด้านบนโดยใช้กลุ่มเน้นสิ่งที่ต้องทำแทนคำถาม


พยายาม: สวัสดีคำถาม ctermfg = red ctermbg = คำศัพท์สีน้ำเงิน = ตัวหนา แต่ไม่มีผลใด ๆ
sixtyfootersdude

ขออภัยคำสั่ง: hi เป็นเพียงการกำหนดวิธีการเน้นกลุ่มคำถาม ตอนนี้คุณต้องระบุว่าส่วนใดของเอกสารที่เป็นส่วนหนึ่งของกลุ่มคำถาม คุณสามารถทำได้ด้วยคำสั่งจับคู่:: จับคู่คำถาม / [รูปแบบการค้นหา] / หรือในกรณีของคุณ:: จับคู่คำถาม / คำถาม /
user22303

0

ฉันไปงานปาร์ตี้สาย แต่ฉันใช้TODOและFIXMEสำหรับสถานการณ์นี้อย่างแน่นอน

ส่วนใหญ่ถ้าไม่ใช่ทั้งหมด colorschemes จะเน้นสีTODOในตัวอย่างต่อไปนี้ด้วยการผสมสีพื้นหลังขีดเส้นใต้และตัวเอียง:

<tree>
  <!--TODO : do I have to add a trunk tag ?-->
  <branch>
    <leaf>caterpillar</leaf>
    <leaf>caterpillar</leaf>
  </branch>
</tree>

มันไม่เหมาะกับความหมายจริงๆ แต่มันใช้งานได้ดีมากจากมุมมองที่ใช้งานได้อย่างหมดจด

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