2012-04-03 63 views
18

Tôi hiện có tệp HTML lớn không có ngắt dòng và chỉ xuất hiện trong một dòng.HTML định dạng và thụt lề trong Vim

Tôi muốn định dạng trong vim (đặc biệt là macvim). Tôi đã thử các tùy chọn sau, nhưng không ai trong số họ đã làm việc cho tôi.

  • Chọn văn bản và nhấn =. Điều này sẽ chỉ tự động có ý định mã. Nhưng vì toàn bộ mã có mặt trong một dòng, nó không làm bất cứ điều gì
  • Tôi đã thử Plugin này http://www.vim.org/scripts/script.php?script_id=3613 Loại tác phẩm này nhưng sẽ chèn dòng giới hạn chỉ cho thẻ hiện tại. Tôi muốn toàn bộ tệp được định dạng

Có cách nào để thực hiện việc này bằng cách sử dụng Plugin hay không?

Cảm ơn!

+2

bản sao có thể có của [Làm cách nào để dọn dẹp thụt lề của tệp HTML trong VI?] (Http://stackoverflow.com/questions/815548/how-do-i-tidy-up-an-html-files-indentation -in-vi) –

Trả lời

37

Một cách để bắt đầu là chia tất cả các thẻ thành các dòng của riêng chúng.

:s/<[^>]*>/\r&\r/g 
:g/^$/d 

Nếu bạn đã nổi < hoặc > ký tự (ví dụ HTML không hợp lệ, toán tử so sánh Javascript, CSS trực tiếp phần hậu duệ selector), điều này sẽ không hoạt động đúng và bạn có thể chuyển sang một cái gì đó giống như chỉ làm thẻ kết thúc - <\/[^>]*> . Nó cung cấp một khởi đầu vững chắc, anyway.

diễn:

Với một tài liệu lý tưởng như thế này,

<!DOCTYPE html><html><head><title>hello</title></head><body>world</body></html> 

này tạo này:

<!DOCTYPE html> 
<html> 
<head> 
<title> 
hello 
</title> 
</head> 
<body> 
world 
</body> 
</html> 

Sau đó, = sẽ tạo ra những gì bạn muốn:

<!DOCTYPE html> 
<html> 
    <head> 
     <title> 
      hello 
     </title> 
    </head> 
    <body> 
     world 
    </body> 
</html> 
+0

Tôi thích cách tiếp cận của bạn. Nhưng có một vấn đề. Lệnh ': s/<[^>] *>/\ r & \ r/g' chỉ đặt thẻ đầu tiên trong dòng mới. Có thể làm cho nó chạy đệ quy? – Sudar

+0

Tôi đoán rằng bạn đã bỏ qua '/ g' ở cuối. –

+0

Không, tôi đã không bỏ qua/g ở cuối. Tôi đoán kể từ khi dòng đếm thay đổi sau khi thay thế đầu tiên nó không tiếp tục. Tôi thậm chí đã thử nó trên html mẫu mà bạn có – Sudar

0

Sẽ tốt hơn nếu sử dụng tiện ích gọn gàng, as described in this answer.

Các công cụ tốt đã được viết cho công việc này

+0

Thật không may, gọn gàng không _not_ đặt mỗi thẻ trên một dòng mới, cũng không phải nó có thể được cấu hình để làm điều đó. Ví dụ: '' sẽ không được chia nhỏ (nhưng trên thực tế, sẽ được cô đặc nếu nó được tách trong tài liệu gốc). – cemper93

+0

Thật tuyệt vời về nguyên tắc, nhưng trong thực tế, có nhiều vấn đề xác thực HTML bạn có thể sẽ gặp phải ở đây. Sử dụng Tidy làm cơ sở của bạn vẫn có mùi giống như con đường bên phải. Định dạng và thụt lề từ đó. –

3

Để có kết quả tốt hơn, bạn nên sử dụng các chương trình định dạng bên ngoài chuyên biệt.

Bạn có thể tích hợp cả tự động tidyhtml-beautify bằng cách cài đặt plugin vim-autoformat. Sau đó, bạn có thể thực thi bất kỳ trình định dạng nào được cài đặt chỉ bằng một lần nhấn phím.

+0

Tôi đang sử dụng addon vim-autoformat mà bạn đã đề cập trong những ngày này. – Sudar

Các vấn đề liên quan