2012-04-03 11 views
18

Attualmente ho un enorme file HTML che non ha interruzioni di riga e appare in una sola riga.Formato e rientro HTML in Vim

Voglio formattarlo in vim (in particolare in macvim). Ho provato le seguenti opzioni, ma nessuna ha funzionato per me.

  • Selezionato il testo e premuto =. Questo solo auto intenderà il codice. Ma poiché l'intero codice è presente in una riga, non fa nulla
  • Ho provato questo plugin http://www.vim.org/scripts/script.php?script_id=3613 Questo tipo di funziona ma inserirà interruzioni solo per il tag corrente. Voglio che l'intero file sia formattato

C'è un modo per farlo usando un Plugin o altrimenti?

Grazie!

+2

possibile duplicato di [Come riordino il rientro di un file HTML in VI?] (Http://stackoverflow.com/questions/815548/how-do-i-tidy-up-an-html-files-indentation -in-vi) –

risposta

37

Un modo per avviarlo è suddividere tutti i tag sulle proprie linee.

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

Se avete galleggiante < o > simboli (ad esempio HTML non valido, operatori di confronto JavaScript, CSS diretta parte selettore di discendente), questo non funzionerà correttamente e si potrebbe passare a qualcosa di simile solo facendo tag di chiusura - <\/[^>]*> . Fornisce comunque un solido inizio.

Dimostrazione:

Con un documento idealizzato come questo,

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

Questo produce questo:

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

Poi, = produrrà ciò che si vuole:

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

Mi piace il tuo approccio. Ma c'è un problema. Il comando ': s/<[^>] *>/\ r & \ r/g' inserisce solo il primo tag nella nuova riga. È possibile eseguirlo in modo ricorsivo? – Sudar

+0

Presumo che hai lasciato fuori il '/ g' alla fine. –

+0

No, non ho lasciato il/g alla fine. Credo che dal momento che il conteggio delle righe cambia dopo la prima sostituzione, non continua. L'ho anche provato con l'html di esempio che hai – Sudar

0

È consigliabile utilizzare l'utilità di ordinamento, as described in this answer.

Buoni strumenti sono già stati scritti per questo lavoro

+0

Sfortunatamente, tidy non _non_ inserisce ogni tag su una nuova riga, né può essere configurato per farlo. Ad esempio, '' non sarà diviso (ma sarà, di fatto, condensato se è stato diviso nel documento originale). – cemper93

+0

Questo è fantastico in linea di principio, ma in pratica ci sono molti problemi di convalida HTML che probabilmente dovrai affrontare qui. Usando Tidy, la tua base ha ancora l'odore del percorso giusto. Formattazione e indentazione da lì. –

3

Per un risultato migliore, si consiglia di utilizzare i programmi in formato esterni specializzati.

È possibile integrare sia tidy e html-beautify automaticamente installando il plug-in vim-autoformat. Dopodiché, è possibile eseguire qualunque formattatore sia installato con una singola sequenza di tasti.

+0

Sto usando l'addon vim-autoformat che hai menzionato in questi giorni. – Sudar