Esiste una funzione o un plug-in di rientro automatico HTML per Sublime Text (aka prettify / beautify / format)?


23

Ad esempio, qualcosa da cambiare:

<section><article><h1></h1><p></p></article></section>

a:

<section>
  <article>
    <h1></h1>
    <p></p>
  </article>
</section>

... che funziona su pagine intere e frammenti.

  • L' Edit > Line > Reindentimpostazione integrata non lo fa
  • Il plugin HTMLTidy aggiunge heade bodytag, quindi non funziona per i parziali, ha anche vari altri problemi
  • Il tag plugin ha vari problemi , abbastanza che sostanzialmente non funziona
  • Il plugin HTMLPrettify ha vari problemi , richiede node.js e non è stato aggiornato da mesi
  • gist.github.com/mcdonc/3898894 afferma di farlo, ma richiede Emacs

(Notepad ++ aveva il rientro automatico, Dreamweaver aveva Applica formattazione sorgente, Aptana ha Formato, ecc.)

Il plug-in Tag gestisce i tag incorporati in modo errato , ad esempio utilizzandolo su questo frammento:

<p>foo<a>bar<span>baz<span>qux</span></span></a></p>

risulta in:

<p>
    foo
    <a>
        bar
        <span>
            baz
            <span>qux</span>
        </span>
    </a>
</p>

Qual'è la domanda? Dal tuo post non è chiaro quale sia la domanda.
Brad Patton,

Titolo modificato per essere interrogativo. Sto cercando di trovare un modo per inserire automaticamente il rientro HTML in Sublime Text.
user110241


Grazie, ho provato ogni soluzione in quel thread, nessuno di loro funziona. Ho elencato i motivi per cui molti di loro non funzionano in questo thread.
user110241

Penso che questa sia la migliore soluzione funzionante: jsbeautifier.org Ho avuto lo stesso requisito di formattare più tag in linea. Questo funziona davvero bene. Crea un markup adeguato anche per il testo sublime che può chiudere blocchi. È anche disponibile su CLI come npmjs.com/package/js-beautify
Sai krishna Deep,

Risposte:


18

Il reindentnon funziona sempre per frammenti. Puoi usare il Tagplugin (installa dal controllo dei pacchetti). Quindi premi ctrl+ shift+ pe digita tag. Vedrai l'opzione Auto-Format tags on document. Seleziona e premi Enter. Lo farà.


1
Come ho detto nel post originale, il plugin Tag è rotto, in particolare nella gestione dei tag inline, tra gli altri bug molto cattivi. L'autore ha detto che ha bisogno di "riscrivere il tutto". Il reindent non funziona affatto per HTML, non corregge il rientro; allinea semplicemente i tag a un certo livello di rientro.
user110241

bene, Tag ha funzionato per me. Ho usato il tuo frammento HTML. Ha funzionato perfettamente. E reindent funziona per HTML ma a certe condizioni.
Bibhas,

prova a utilizzare il formato automatico di Tag su questo frammento: <p>foo<a>bar<span>baz<span>qux</span></span></a></p>per vedere cosa intendo. Inoltre, confonde la formattazione del tag HTML di apertura racchiuso nei commenti condizionali di IE che fa parte della Boilerplate HTML5 (e dei commenti in generale). Prova a utilizzare il built-in Line > Reindentsu questo frammento: jsfiddle.net/y8xXj per vedere come fallisce.
user110241

Cordiali saluti - Ho appena provato in Sublime Text 3 con uno snippet HTML e funziona davvero!
Steven,

2
Stesso problema. Ho usato innumerevoli editor in passato, Coda, Sublime, Espresso, Chocolat, TextMate ... ma nessuno è mai stato in grado di formattare in modo impeccabile il testo correttamente come la formattazione sorgente di Dreamweaver Applica. A cui la gente semplicemente suggerisce Tidy o qualche altro plugin che non funziona mai come Dreamweaver. Sono contento che qualcuno "Zootato" veda questo problema. È un peccato che non ci sia ancora soluzione. In Sublime Text 3 come Zooted Noted anche con Tag non funziona correttamente (come nell'esempio sopra). E la funzione Reindent nativa è piuttosto inutile.
cchiera,

6

Seleziona Tutto -> Modifica menu -> Linea -> Reindend farà. È possibile impostare una combinazione di collegamenti per lo stesso uso.

{"keys": ["ctrl + shift + r"], "command": "reindent", "args": {"single_line": false}}


1
Come ho detto nella domanda, questo non funziona. Provalo sul primo frammento che ho fornito: <section><article><h1></h1><p></p></article> </section>
user110241

Per me va bene. Sintassi impostata su HTML?
Manuel Arwed Schmidt,

2
Non funziona per me.
Derek 功夫 會 功夫

Sì, fa un ottimo lavoro, ma alla fine ha iniziato a cadere, nel mio caso <div>aprendo i tag.
ruffin,

0

Affinché la funzione Reindent funzioni, è necessario deselezionare l'opzione "Rientra usando gli spazi":

Visualizza >> Rientro >> Rientro mediante spazi

Una volta che questa opzione è stata deselezionata, puoi selezionare il tuo testo e Reindent:

Modifica >> Linea >> Reindent

Funzionerà con la sintassi HTML e XML. Non testato su nessun altro.


In realtà stavo già lavorando con quello deselezionato. Il comando che hai citato non fa assolutamente nulla a questo frammento in ST3:<html><head></head><body><div><p>foobar<span>baz</span></p></div></body></html>
user110241
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.