Bisakah vim menyoroti tag HTML yang cocok seperti Notepad ++?

181

VIM memiliki dukungan untuk pasangan kurung keriting, tanda kurung, dan kurung siku yang cocok. Ini bagus untuk mengedit bahasa gaya-C seperti PHP dan Javascript. Tapi bagaimana dengan mencocokkan tag HTML?

Notepad ++ telah memiliki fitur ini selama saya telah menggunakannya. Mampu melihat di mana blok HTML dimulai dan berakhir sangat berguna. Yang saya cari adalah sesuatu seperti ini untuk vim (lihat tag div hijau):

(fitur bonus: menyoroti tag HTML tidak tertutup, seperti tag merah di tangkapan layar ini).

matchit telah diusulkan sebagai hal terbaik berikutnya, tetapi memerlukan penekanan tombol ekstra untuk menggunakan fungsinya. Saya ingin dapat melihat di mana blok HTML dimulai dan berakhir tanpa penekanan tombol ekstra.

Saya telah menjaring internet untuk menemukan sesuatu seperti ini untuk vim. Rupanya, saya bukan satu-satunya, menurut 2 pertanyaan StackOverflow lainnya dan nabble .

Saya hampir pasrah karena tidak bisa mencocokkan tag html secara visual. Apakah mungkin bagi vim untuk melakukan ini?

Tambahan: Jika saat ini tidak memungkinkan untuk melakukan hal ini dengan plugin yang ada, apakah wizard vimscript di luar sana memiliki petunjuk tentang cara pendekatan menulis plugin yang sesuai?

linqq
sumber
Bisakah Anda menjelaskan bagaimana fitur ini "sangat berguna"? Saya tidak benar-benar perlu tahu segalanya tentang segala hal setiap saat. Ketika saya perlu tahu sesuatu Vim dirancang untuk membuatnya sangat mudah diketahui dengan sedikit penekanan tombol.
romainl
17
Meskipun saya tidak perlu tahu segalanya, bisa dengan mudah mengetahui kapan tag HTML berakhir memungkinkan saya untuk memperbaiki struktur file yang sedang saya kerjakan. Saya juga berurusan dengan banyak kode yang ditulis dengan buruk, jadi kadang-kadang saya akan menemukan tag html tanpa tag penutup, yang selalu harus diperbaiki.
linqq
5
@romainl Saya sangat sering membaca jawaban Anda dan saya sangat suka sudut pandang Anda. Tapi kali ini aku harus tidak setuju. Saya dapat menganggap fitur ini tidak penting tetapi saya menemukan bahwa ini adalah pertanyaan yang cukup bagus. Tampak aneh bagi saya bahwa tidak ada cara mudah untuk mendapatkannya dengan Vim.
lucapette
1
@ lucapette, terima kasih. Saya juga suka pertanyaannya. Saya tidak pernah menggunakan fitur seperti itu dan saya tidak pernah merasa perlu untuk itu. Tapi itu mungkin salah satu dari hal-hal yang Anda tidak dapat hidup tanpa sekali Anda coba. Saya suka alur kerja dan ruang kerja saya bersih dan fokus, bebas dari "puing administrasi" dan saya pikir fitur seperti itu mungkin berlebihan. Kandidat yang sempurna untuk sebuah plugin. Seseorang mungkin mencoba mengambil inspirasi dari korek api sebagai titik awal, mungkin.
romainl
6
Sudahkah Anda melihat jawaban ini? stackoverflow.com/questions/1957083/…
Greg Sexton

Jawaban:

219

Saya harus bekerja dengan beberapa HTML hari ini, jadi saya pikir saya akan mengatasi ini. Menambahkan ftplugin ke vim.org yang seharusnya bisa menyelesaikan masalah Anda.

Anda bisa mendapatkannya di sini di vim.org .

Anda bisa mendapatkannya di sini di github .

Semoga ini berhasil untuk Anda. Beri tahu saya jika Anda memiliki masalah.

Greg Sexton
sumber
1
Terima kasih! Itulah fungsi yang saya cari. Hanya dua quibble minor, jika Anda ingin memperbaikinya: 1. Saat ini, hanya tag yang berlawanan yang cocok. Apakah mungkin untuk mencocokkan tag dengan kursor aktif? 2. Saat ini, jika tag html memiliki atribut, mereka dipilih juga. Apakah mungkin hanya untuk memilih nama tag, tanpa atribut?
linqq
Saran yang bagus Keduanya harus diurus dalam v1.2 di vim.org. Regex yang cocok lebih rumit sekarang, jadi beri tahu saya jika Anda menemukan bug.
Greg Sexton
1
Seperti yang diminta, saya telah menambahkan ftplugin ini ke github. Lihat jawaban saya yang diperbarui untuk tautannya.
Greg Sexton
1
@GregSexton, kamu secara resmi pahlawan sekarang;)
lucapette
7
Baru saja menemukan ini, terlihat bagus, tetapi perhatikan bahwa saya harus menambahkan "filetype plugin on" ke ~ / .vimrc saya untuk mengaktifkannya. Jika tidak berfungsi setelah Anda meletakkan plugin di folder ftplugin Anda, tambahkan yang di atas ke ~ / .vimrc Anda dan Anda harus siap.
Geoff
95

Plugin Greg's MatchTag.vim mengagumkan, tetapi saya menginginkan sesuatu yang lebih. Saya ingin agar tag penutup selalu disorot, bukan hanya ketika kursor ada di salah satu tag.

Jadi saya menulis MatchTagAlways yang melakukan segalanya seperti yang dilakukan Greg's MatchTag dan juga selalu menyoroti tag terlampir, di mana pun kursor berada dalam kode. Ini juga bekerja dengan tag tidak tertutup dan bahasa templat HTML seperti Jinja atau Setang.

Berikut adalah GIF yang menunjukkannya dalam aksi:

MTA beraksi

Valloric
sumber
4
Solusi keren - Saya mungkin akan menggunakan versi aslinya, tetapi saya bisa melihat bagaimana ini membantu. Saya berharap lebih banyak jawaban memiliki demo GIF, itu hebat!
Jason
3
Sepenuhnya setuju dengan Jason, +1 untuk peretasan GIF yang luar biasa.
Dan Bechard
Ini bekerja lebih baik daripada jawaban yang diterima. Tetapi saya masih tidak yakin bagaimana memverifikasi tag yang melebihi ketinggian layar vertikal. Saya tidak bisa memindahkan layar melewati kursor di vim dan layar split tidak menunjukkan tag aktif di kedua jendela.
radix07
1
Anda legenda absolut, hidup saya menjadi jauh lebih baik dari ini ... <3
Karl Glaser
1
Ini jauh lebih baik daripada jawaban karunia
MohitC
-2

Saya datang ke sini mencari tanda kurung sudut gaya html yang cocok di Vim. Ini sepertinya berhasil:

:set mps+=<:>
:help matchpairs
Chris X
sumber
7
Metode ini bukan solusi, hanya biarkan '<' cocok dengan '>'
Daniel YC Lin