Vim có thể làm nổi bật các thẻ HTML phù hợp như Notepad ++ không?


181

VIM có hỗ trợ khớp cặp ngoặc vuông, dấu ngoặc đơn và ngoặc vuông. Điều này rất tốt để chỉnh sửa các ngôn ngữ kiểu C như PHP và Javascript. Nhưng những gì về khớp thẻ HTML?

Notepad ++ đã có tính năng này miễn là tôi đã sử dụng nó. Có thể nhận ra nơi các khối HTML bắt đầu và kết thúc rất hữu ích. Những gì tôi đang tìm kiếm là một cái gì đó như thế này cho vim (xem các thẻ div màu xanh lá cây):

(một tính năng phần thưởng: làm nổi bật các thẻ HTML không được tiết lộ, như thẻ màu đỏ trong ảnh chụp màn hình này).

matchit đã được đề xuất như là một điều tốt nhất tiếp theo, nhưng nó đòi hỏi một tổ hợp phím bổ sung để sử dụng chức năng của nó. Tôi muốn có thể thấy các khối HTML bắt đầu và kết thúc mà không cần nhấn phím thêm.

Tôi đã truy tìm internet để tìm một cái gì đó như thế này cho vim. Rõ ràng, tôi không phải là người duy nhất, theo 2 câu hỏicâu hỏi khó hiểu khác của StackOverflow .

Tôi gần như đã cam chịu bản thân mình để vim không thể khớp các thẻ html một cách trực quan. Có thể cho vim làm điều này?

Phụ lục: Nếu hiện tại không thể thực hiện điều này với bất kỳ plugin nào hiện có, có bất kỳ trình hướng dẫn vimscript nào ngoài đó có bất kỳ gợi ý nào về cách tiếp cận viết một plugin phù hợp không?


Bạn có thể giải thích theo cách mà tính năng này "rất hữu ích" không? Tôi không thực sự cần phải biết mọi thứ trên mọi lúc. Khi tôi cần biết một cái gì đó Vim được thiết kế để làm cho nó rất dễ dàng để biết trong rất ít lần nhấn phím.
romainl

17
Mặc dù tôi không cần biết tất cả mọi thứ, nhưng việc có thể dễ dàng biết khi thẻ HTML kết thúc cho phép tôi tìm hiểu cấu trúc của tệp tôi đang làm việc. Tôi cũng đối phó với rất nhiều mã được viết xấu, vì vậy đôi khi tôi sẽ gặp một thẻ html không có thẻ đóng, luôn cần phải sửa.
linqq

5
@romainl Tôi đọc câu trả lời của bạn rất thường xuyên và tôi thực sự thích quan điểm của bạn. Nhưng lần này tôi phải không đồng ý. Tôi có thể coi tính năng này không cần thiết nhưng tôi thấy rằng đây là một câu hỏi khá hay. Tôi thấy lạ là không có cách nào dễ dàng để có được nó với Vim.
lucapette

1
@lucapette, cảm ơn bạn. Tôi thực sự thích câu hỏi. Tôi chưa bao giờ sử dụng một tính năng như vậy và tôi chưa bao giờ cảm thấy cần thiết cho nó. Nhưng đó có lẽ là một trong những điều bạn không thể sống mà không cần một lần thử. Tôi thích quy trình làm việc và không gian làm việc của mình sạch sẽ và tập trung, không có "mảnh vụn hành chính" và tôi nghĩ rằng một tính năng như vậy có thể là thừa. Ứng cử viên hoàn hảo cho một plugin. Một người có thể cố gắng lấy cảm hứng từ matchit làm điểm khởi đầu, có lẽ.
romainl

6
Bạn đã thấy câu trả lời này? stackoverflow.com/questions/1957083/ Mạnh
Greg Sexton

Câu trả lời:


219

Tôi đã phải làm việc với một số HTML ngày hôm nay vì vậy tôi nghĩ rằng tôi sẽ giải quyết vấn đề này. Đã thêm một ftplugin vào vim.org sẽ giải quyết vấn đề của bạn.

Bạn có thể lấy nó ở đây trên vim.org .

Bạn có thể lấy nó ở đây trên github .

Hi vọng nó sẽ giúp ích cho bạn. Hãy cho tôi biết nếu bạn có bất kỳ vấn đề.


1
Cảm ơn bạn! Đó chính xác là chức năng tôi đang tìm kiếm. Chỉ có hai vấn đề nhỏ, nếu bạn muốn sửa chúng: 1. Hiện tại, chỉ có thẻ đối diện được khớp. Cũng có thể phù hợp với thẻ mà con trỏ đang bật? 2. Hiện tại, nếu thẻ html có các thuộc tính, chúng cũng được chọn. Có thể chỉ chọn tên thẻ, không có thuộc tính?
linqq

Gợi ý tốt. Cả hai nên được chăm sóc trong v1.2 trở lên trên vim.org. Hiện tại regex phức tạp hơn, vì vậy hãy cho tôi biết nếu bạn tìm thấy bất kỳ lỗi nào.
Greg Sexton

1
Theo yêu cầu, tôi đã thêm ftplugin này vào github. Xem câu trả lời cập nhật của tôi cho liên kết.
Greg Sexton

1
@Gregottton bạn chính thức là một anh hùng bây giờ;)
lucapette

7
Chỉ cần tìm thấy cái này, có vẻ tốt, nhưng lưu ý rằng tôi phải thêm "plugin filetype on" vào ~ / .vimrc của tôi để bật nó lên. Nếu nó không hoạt động sau khi bạn đặt plugin vào thư mục ftplugin của mình, hãy thêm phần trên vào ~ / .vimrc và bạn sẽ hoàn tất.
Geoff

95

Plugin MatchTag.vim của Greg rất tuyệt, nhưng tôi muốn một cái gì đó nhiều hơn nữa. Tôi muốn các thẻ kèm theo luôn được tô sáng, không chỉ khi con trỏ ở trên một trong các thẻ.

Vì vậy, tôi đã viết MatchTagAlways , thực hiện mọi thứ mà MatchTag của Greg làm và cũng luôn làm nổi bật thẻ kèm theo, bất kể con trỏ nằm ở đâu trong mã. Nó cũng hoạt động với các thẻ không được tiết lộ và các ngôn ngữ tạo khuôn mẫu HTML như Jinja hoặc Tay cầm.

Đây là một GIF cho thấy nó hoạt động:

MTA hoạt động


4
Giải pháp tuyệt vời - Có lẽ tôi sẽ sử dụng phiên bản gốc, nhưng tôi có thể thấy điều này hữu ích như thế nào. Tôi muốn nhiều câu trả lời hơn có bản demo GIF, thật tuyệt vời!
Jason

3
Hoàn toàn đồng ý với Jason, +1 cho các bản hack GIF tuyệt vời.
Dan Bechard

Điều này hoạt động tốt hơn so với câu trả lời được chấp nhận. Nhưng tôi vẫn không chắc chắn làm thế nào để xác minh các thẻ vượt quá chiều cao màn hình dọc. Tôi không thể di chuyển màn hình qua con trỏ trong vim và màn hình chia không hiển thị các thẻ hoạt động trong cả hai cửa sổ.
radix07

1
Bạn là huyền thoại tuyệt đối, cuộc sống của tôi đã trở nên tốt đẹp hơn rất nhiều từ điều này ... <3
Karl Glaser

1
Điều này tốt hơn nhiều so với câu trả lời tiền thưởng
MohitC

-2

Tôi đến đây để tìm kiếm dấu ngoặc góc kiểu html phù hợp trong Vim. Điều này dường như làm việc:

:set mps+=<:>
:help matchpairs

7
Phương pháp này không phải là giải pháp, nó chỉ để '<' khớp với '>'
Daniel YC Lin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.