สามารถเน้นการจับคู่แท็ก HTML อย่าง Notepad ++ ได้หรือไม่?


181

VIM รองรับการจับคู่คู่ของวงเล็บปีกกา, วงเล็บ, และวงเล็บเหลี่ยม เหมาะสำหรับการแก้ไขภาษาสไตล์ C เช่น PHP และ Javascript แต่สิ่งที่เกี่ยวกับการจับคู่แท็ก HTML?

Notepad ++ มีคุณสมบัตินี้ตราบเท่าที่ฉันใช้งาน ความสามารถในการระบุจุดที่บล็อกของ HTML เริ่มต้นและสิ้นสุดนั้นมีประโยชน์มาก สิ่งที่ฉันกำลังมองหาคือสิ่งนี้สำหรับกลุ่ม (ดูแท็ก div สีเขียว):

(คุณสมบัติโบนัส: เน้นแถบแท็ก HTML ที่ไม่มีการปิดบังเช่นแท็กสีแดงในภาพหน้าจอนี้)

matchitได้รับการเสนอให้เป็นสิ่งที่ดีที่สุด แต่ต้องใช้การกดแป้นพิมพ์พิเศษเพื่อใช้ฟังก์ชันการทำงาน ฉันต้องการที่จะเห็นว่าบล็อกของ HTML เริ่มต้นและสิ้นสุดโดยไม่ต้องกดปุ่มพิเศษ

ฉันท่องอินเทอร์เน็ตเพื่อค้นหาสิ่งนี้เพื่อเป็นกลุ่ม เห็นได้ชัดว่าฉันไม่ใช่คนเดียวตามคำถามStackOverflow อื่น ๆ อีก 2 รายการและจับตัวกันอย่างรวดเร็ว

ฉันเกือบจะลาออกจากตำแหน่งตัวเองเพื่อเป็นกลุ่มไม่สามารถจับคู่แท็ก html ได้ เป็นไปได้สำหรับกลุ่มที่จะทำเช่นนี้?

ภาคผนวก: หากปัจจุบันยังไม่สามารถทำสิ่งนี้กับปลั๊กอินที่มีอยู่ตัวช่วยสร้าง vimscript นั้นมีพอยน์เตอร์เกี่ยวกับวิธีการเขียนปลั๊กอินที่เหมาะสมหรือไม่?


คุณช่วยอธิบายคุณลักษณะนี้ว่า "มีประโยชน์มาก" ได้อย่างไร? ฉันไม่จำเป็นต้องรู้ทุกอย่างเกี่ยวกับทุกสิ่งในทุกช่วงเวลา เมื่อฉันต้องการที่จะรู้ว่าบางสิ่งบางอย่างที่เป็นกลุ่มถูกออกแบบมาเพื่อทำให้มันมากง่ายที่จะรู้ในไม่กี่มากการกดแป้นพิมพ์
romainl

17
ในขณะที่ฉันไม่จำเป็นต้องรู้ทุกสิ่ง แต่การสามารถรู้ได้อย่างง่ายดายเมื่อแท็ก HTML สิ้นสุดลงทำให้ฉันสามารถคลานโครงสร้างของไฟล์ที่ฉันใช้งานได้ ฉันจัดการกับโค้ดที่เขียนไม่ดีจำนวนมากดังนั้นบางครั้งฉันจะพบแท็ก html ที่ไม่มีแท็กปิดซึ่งต้องแก้ไขเสมอ
linqq

5
@ ฉีดฉันอ่านคำตอบของคุณบ่อยมากและฉันชอบมุมมองของคุณมาก แต่คราวนี้ฉันต้องไม่เห็นด้วย ฉันสามารถพิจารณาคุณสมบัตินี้ไม่จำเป็น แต่ฉันพบว่านี่เป็นคำถามที่ค่อนข้างดี มันดูแปลกสำหรับฉันที่ไม่มีวิธีง่ายๆในการใช้ Vim
lucapette

1
@lucapette ขอบคุณ ฉันก็ชอบคำถามเช่นกัน ฉันไม่เคยใช้คุณสมบัติเช่นนี้มาก่อนและไม่เคยรู้สึกต้องการมันเลย แต่อาจเป็นหนึ่งในสิ่งเหล่านั้นที่คุณขาดไม่ได้หากคุณไม่ลอง ฉันชอบเวิร์กโฟลว์และพื้นที่ทำงานที่สะอาดและมุ่งเน้นปราศจาก "การจัดการของเสีย" และฉันคิดว่าคุณลักษณะดังกล่าวอาจไม่จำเป็น ผู้สมัครที่สมบูรณ์แบบสำหรับปลั๊กอิน อาจพยายามใช้แรงบันดาลใจจาก matchit เป็นจุดเริ่มต้นอาจ
romainl

6
คุณเห็นคำตอบนี้หรือไม่? stackoverflow.com/questions/1957083/…
Greg Sexton

คำตอบ:


219

ฉันต้องทำงานกับ HTML ในวันนี้ดังนั้นคิดว่าฉันจะแก้ไขปัญหานี้ เพิ่ม ftplugin ใน vim.org ที่ควรแก้ปัญหาของคุณ

คุณจะได้รับที่นี่ใน vim.org

คุณจะได้รับมันนี่บน GitHub

หวังว่ามันจะเหมาะกับคุณ แจ้งให้เราทราบหากคุณมีปัญหาใด ๆ


1
ขอบคุณ! นั่นคือฟังก์ชั่นที่ฉันกำลังมองหา เพียงสอง quibbles เล็กน้อยถ้าคุณรู้สึกว่าต้องการแก้ไข: 1. ในปัจจุบันเฉพาะแท็กตรงข้ามที่ถูกจับคู่ เป็นไปได้ไหมที่จะตรงกับแท็กที่เคอร์เซอร์เปิดอยู่? 2. ปัจจุบันหากแท็ก html มีคุณสมบัติเหล่านั้นจะถูกเลือกเช่นกัน เป็นไปได้หรือไม่ที่จะเลือกชื่อแท็กโดยไม่มีแอตทริบิวต์
linqq

คำแนะนำที่ดี พวกเขาควรได้รับการดูแลใน v1.2 บน vim.org regex ที่ตรงกันมีความซับซ้อนมากขึ้นในขณะนี้ดังนั้นแจ้งให้เราทราบหากคุณพบข้อบกพร่องใด ๆ
เกร็กเซกซ์ตัน

1
ตามที่ขอฉันได้เพิ่ม ftplugin นี้ไปยัง github ดูคำตอบล่าสุดของฉันสำหรับลิงค์
เกร็กเซกซ์ตัน

1
@ GregSexton ตอนนี้คุณเป็นฮีโร่อย่างเป็นทางการแล้ว)
lucapette

7
เพิ่งพบสิ่งนี้ดูดี แต่โปรดทราบว่าฉันต้องเพิ่ม "filetype plugin on" ใน ~ / .vimrc ของฉันเพื่อเปิดใช้งาน หากมันไม่ทำงานหลังจากที่คุณวางปลั๊กอินในโฟลเดอร์ ftplugin ของคุณให้เพิ่มข้างต้นใน ~ / .vimrc ของคุณและคุณควรจะตั้งค่าทั้งหมด
เจฟฟ์

95

ปลั๊กอิน MatchTag.vim ของ Greg นั้นยอดเยี่ยม แต่ฉันต้องการอะไรมากกว่านี้ ฉันต้องการให้แท็กที่ล้อมรอบถูกไฮไลต์อยู่เสมอไม่ใช่เฉพาะเมื่อเคอร์เซอร์อยู่บนหนึ่งในแท็ก

ดังนั้นฉันจึงเขียนMatchTagAlwaysซึ่งทำทุกอย่างที่ MatchTag ของ Greg ทำและยังเน้นแท็กที่ล้อมรอบเสมอไม่ว่าเคอร์เซอร์จะอยู่ที่ใดในโค้ด นอกจากนี้ยังทำงานกับแท็ก unclosed และ HTML templating language เช่น Jinja หรือ Handlebars

นี่คือ GIF ที่แสดงให้เห็นจริง:

กำลังดำเนินการ MTA


4
วิธีแก้ปัญหายอดเยี่ยม - ฉันอาจใช้รุ่นดั้งเดิม แต่ฉันเห็นได้ว่าสิ่งนี้มีประโยชน์อย่างไร ฉันหวังว่าคำตอบเพิ่มเติมจะมีการสาธิต GIF นั่นยอดเยี่ยม!
เจสัน

3
เห็นด้วยอย่างสิ้นเชิงกับ Jason, +1 สำหรับแฮ็ก GIF ที่น่าทึ่ง
Dan Bechard

วิธีนี้ใช้ได้ดีกว่าคำตอบที่ยอมรับ แต่ฉันก็ยังไม่แน่ใจวิธียืนยันแท็กที่เกินความสูงของหน้าจอแนวตั้ง ฉันไม่สามารถย้ายหน้าจอผ่านเคอร์เซอร์ในกลุ่มและหน้าจอแยกไม่แสดงแท็กที่ใช้งานอยู่ในทั้งสองหน้าต่าง
radix07

1
คุณเป็นตำนานที่แน่นอนชีวิตของฉันดีขึ้นกว่านี้มาก ... <3
Karl Glaser

1
นี่เป็นคำตอบที่ดีกว่าคำตอบมากมาย
MohitC

-2

ฉันมาที่นี่เพื่อค้นหาการจับคู่วงเล็บเหลี่ยมมุมสไตล์ HTML ใน Vim ดูเหมือนว่าจะใช้งานได้:

:set mps+=<:>
:help matchpairs

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