Commenti in Markdown


1402

Qual è la sintassi per la memorizzazione di un commento in un file markdown, ad esempio un commento CVS $ Id $ nella parte superiore del file? Non ho trovato nulla nel progetto markdown .


10
Leggendo tra le righe, sembra che tu voglia allegare metadati al tuo Markdown. Per questo motivo, suggerirei di utilizzare un preprocessore che consente di aggiungere un'intestazione. Per un esempio, vedi Jekyll's Front Matter . Per un altro esempio, vedere come Basho utilizza Middleman per la loro documentazione . (Nota: questa non è una risposta diretta alla domanda, motivo per cui la condivido come commento.)
David J.,


Ecco un benchmark di diversi tipi di commenti con diversi parser su Babelmark .
Ulysse BN,

Risposte:


1456

Ritengo che tutte le soluzioni precedentemente proposte (tranne quelle che richiedono implementazioni specifiche) comportino l'inclusione dei commenti nell'HTML di output, anche se non vengono visualizzati.

Se vuoi un commento che sia strettamente per te (i lettori del documento convertito non dovrebbero essere in grado di vederlo, anche con "visualizza sorgente") potresti (ab) usare le etichette dei collegamenti (da usare con i collegamenti di stile di riferimento) che sono disponibile nelle specifiche core Markdown:

http://daringfireball.net/projects/markdown/syntax#link

Questo è:

[comment]: <> (This is a comment, it will not be included)
[comment]: <> (in  the output file unless you use it in)
[comment]: <> (a reference style link.)

Oppure potresti andare oltre:

[//]: <> (This is also a comment.)

Per migliorare la compatibilità della piattaforma (e salvare una sequenza di tasti) è anche possibile utilizzare #(che è un target di collegamento ipertestuale legittimo) invece di <>:

[//]: # (This may be the most platform independent comment)

Per la massima portabilità è importante inserire una riga vuota prima e dopo questo tipo di commenti, poiché alcuni parser Markdown non funzionano correttamente quando le definizioni vengono rimosse con il testo normale. La ricerca più recente con Babelmark mostra che le righe vuote prima e dopo sono entrambe importanti. Alcuni parser genereranno il commento se prima non ci sono righe vuote e alcuni parser escluderanno la riga seguente se non ci sono righe vuote dopo.

In generale, questo approccio dovrebbe funzionare con la maggior parte dei parser Markdown, poiché fa parte delle specifiche di base. (anche se il comportamento quando sono definiti più collegamenti o quando un collegamento è definito ma mai utilizzato, non è specificato).


145
[//]: # "Comment"e [//]: # (Comment)sembra funzionare su una più ampia varietà di implementazioni, perché #è un URI relativo valido. GitHub, ad esempio, rifiuta <>e l'intera riga diventa visibile. Vale anche la pena notare che le etichette dei collegamenti spesso devono essere separate dagli altri contenuti da una riga vuota.
Zenexer,

6
Per essere più indipendente dalla piattaforma, è necessario anche una riga vuota prima del commento. Vedi i test: stackoverflow.com/a/32190021/2790048
Nick Volynkin,

6
Può essere usato per commenti multilinea?
Crypdick,

4
@RovingRichard Sì, almeno in Pandoc funziona con commenti multilinea se non ci sono righe vuote nel blocco commentato (le interruzioni di una sola riga vanno bene). Uso l'approccio di Magnus per i commenti a blocchi e l'approccio HTML di chl per i commenti incorporati (sebbene di solito solo 2 trattini). In questo modo posso bloccare i commenti che contengono già commenti HTML incorporati.
Joelostblom,

4
Cordiali saluti, ma se stai creando un sommario usando Pandoc, questo genererà un avviso sui riferimenti di link duplicati. (Questi sono solo avvertimenti, il sommario verrà comunque creato.)
Karl Giesing,

995

Uso tag HTML standard, come

<!---
your comment goes here
and here
-->

Nota il trattino triplo. Il vantaggio è che funziona con pandoc durante la generazione di output TeX o HTML. Ulteriori informazioni sono disponibili sul gruppo di discussione pandoc .


73
Se ho capito bene, il trattino triplo fa sì che pandoc ignori il commento quando analizza il file markdown. Ma se usi un altro motore di markdown, il commento comparirà nel codice HTML generato (e quindi sarà visibile con "visualizza sorgente"). Quindi devi stare attento a ciò che hai inserito in quel commento;)
cberzan il

5
Puoi spiegare come Pandoc tratta i trattini tripli in modo diverso da quello doppio? Quando li ho sperimentati, sembravano essere trattati allo stesso modo. Inoltre, la guida per l'utente di Pandoc dice semplicemente "L'HTML grezzo viene trasmesso invariato in HTML, S5, Slidy, Slideous, DZSlides, EPUB, Markdown e output tessile e soppresso in altri formati". I trattini tripli non sembrano avere privilegi più alti di quelli doppi.
dkim

1
@dkim I commenti con trattino triplo vengono ignorati e scartati dall'output HTML. Questo non è il caso dei commenti a doppio trattino che vengono inseriti nel file HTML. Questo è ancora il caso dell'ultima versione di Pandoc (1.10).
chl

32
Se il trattino triplo è significativo, questi non sono commenti "HTML standard".
Tripleee

17
Nota per i googler: questo purtroppo non funziona in GitHub Markdown e alla fine ho usato la soluzione di Magnus.
Daniel Buckmaster,

198

Questa piccola ricerca dimostra e affina la risposta di Magnus

La sintassi più indipendente dalla piattaforma è

(empty line)
[comment]: # (This actually is the most platform independent comment)

Entrambe le condizioni sono importanti:

  1. Usare #(e non <>)
  2. Con una riga vuota prima del commento . La riga vuota dopo il commento non ha alcun impatto sul risultato.

La specifica rigorosa Markdown CommonMark funziona solo come previsto con questa sintassi (e non con <>eo una riga / vuoto)

Per dimostrarlo utilizzeremo Babelmark2, scritto da John MacFarlane. Questo strumento controlla il rendering di un particolare codice sorgente in 28 implementazioni Markdown.

( +- superato il test, -- non superato, ?- lascia un po 'di immondizia che non viene mostrato in HTML renderizzato).

Ciò dimostra le affermazioni di cui sopra.

Queste implementazioni falliscono tutti e 7 i test. Non c'è alcuna possibilità di utilizzare i commenti esclusi nel rendering con loro.

  • cebe / markdown 1.1.0
  • cebe / markdown MarkdownExtra 1.1.0
  • cebe / markdown GFM 1.1.0
  • s9e \ TextFormatter (Fatdown / PHP)

3
Strumento di test eccellente e completo! Sembra che tu abbia ragione, che # funziona per tutti tranne GFM e <> funziona per GFM ma non per un paio di altri. Peccato che GFM sia sia un caso angolare che anche un sapore molto popolare.
Piani cottura

1
Sembra che s9e \ TextFormatter # funzioni con dal 21 gennaio 2016. Cebe ancora non lo gestisce.
Troy Daniels,

1
Stranamente, se il commento contiene (...)da solo, lo rompe. Almeno su Visual Studio Code 1.19.
Royi,

1
e quindi per gli utenti di vim che vogliono commentare tutti i file contemporaneamente:%s/^\(.*\)$/[comment]: # (\1)/g
Simon C.

Cosa dice del markdown che esiste Bablemark2?
TC Proctor,

55

Se stai usando Jekyll o octopress, funzionerà anche il seguente.

{% comment %} 
    These commments will not include inside the source.
{% endcomment %}

I tag Liquid {% comment %}vengono prima analizzati e rimossi prima che anche il processore MarkDown riesca ad accedervi. I visitatori non vedranno quando provano a visualizzare la fonte dal loro browser.


2
Jinja2 = {#commenti multilinea qui#}
John Mee,

29

Un'alternativa è inserire commenti all'interno di tag HTML stilizzati. In questo modo, puoi attivare la loro visibilità secondo necessità. Ad esempio, definisci una classe di commenti nel tuo foglio di stile CSS.

.comment { display: none; }

Quindi, il seguente MARKDOWN migliorato

We do <span class="comment">NOT</span> support comments

appare come segue in un BROWSER

We do support comments


5
Copia / incolla probabilmente finirà per copiare il testo "commentato" e il testo normale, quindi fai attenzione quando lo usi. Potrebbe facilmente produrre risultati inaspettati per qualcuno che copia un blocco di testo.
Eilon,

4
@Eilon anche l'accessibilità per questo sarebbe terribile
Ethan,

I motori che supportano l'accessibilità salteranno correttamente la visualizzazione: nessun testo.
Aredridel,

28

Questo funziona su GitHub:

[](Comment text goes here)

Il codice HTML risultante è simile a:

<a href="Comment%20text%20goes%20here"></a>

Che è fondamentalmente un link vuoto. Ovviamente puoi leggerlo nella fonte del testo renderizzato, ma puoi farlo comunque su GitHub.


6
Lo è sicuramente, ma in realtà è l'unica risposta finora che funziona sempre su GitHub, ad esempio nelle liste.
jomo,

Sono arrivato alla stessa soluzione. È l'unico che posso ottenere lavorando per commenti in linea, ad es some text [](hidden text) blah blah.
c24w,

3
Questo non funziona più su Github a partire dal 08-03-2019, ma viene visualizzato così com'è[](Comment text goes here)
dogmatic69

19

Gli utenti di Vim Instant-Markdown devono utilizzare

<!---
First comment line...
//
_NO_BLANK_LINES_ARE_ALLOWED_
//
_and_try_to_avoid_double_minuses_like_this_: --
//
last comment line.
-->

18

Vedi anche Critic Markup, supportato da un numero crescente di strumenti Markdown.

http://criticmarkup.com/

Comment {>> <<}

Lorem ipsum dolor sit amet.{>>This is a comment<<}

Highlight+Comment {== ==}{>> <<}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. {==Vestibulum at orci magna. Phasellus augue justo, sodales eu pulvinar ac, vulputate eget nulla.==}{>>confusing<<} Mauris massa sem, tempor sed cursus et, semper tincidunt lacus.

5
Penso che uno dei problemi con tali standard "pseudo" sia che non sono portatili. In alcuni siti Web funzioneranno perfettamente, in altri no.
Willem Van Onsem,

14

Che ne dici di mettere i commenti in un blocco R non-valutazione, non-eco? vale a dire,

```{r echo=FALSE, eval=FALSE}
All the comments!
```

Sembra funzionare bene per me.


2
Inoltre, sentiti libero di fare cose come cat("# Some Header")all'interno dei blocchi di codice "commentati" e utilizzali results = "asis", e puoi aggiungere intere sezioni commentate al tuo codice che possono essere attivate / disattivate attivando / disattivando eval = FALSE, poiché la valutazione R viene eseguita prima del compilazione pandoc. Grazie per l'idea!
MichaelChirico,

11

Divulgazione: ho scritto il plugin.

Poiché la domanda non specifica un'implementazione specifica di markdown, vorrei menzionare il plug -in Commenti per python-markdown , che implementa lo stesso stile di commento pandoc menzionato sopra.


11
<!--- ... --> 

Non funziona in Pandoc Markdown (Pandoc 1.12.2.1). I commenti sono ancora apparsi in html. Di seguito ha funzionato:

Blank line
[^Comment]:  Text that will not appear in html source
Blank line

Quindi utilizzare l'estensione + nota a piè di pagina. È essenzialmente una nota a piè di pagina a cui non viene mai fatto riferimento.


Mi piace di più, perché non genera alcun output. Per Bitbucket questo prefisso è sufficiente: [#]: .
ceving

7

Quanto segue funziona molto bene

<empty line>
[whatever comment text]::

quel metodo sfrutta la sintassi per creare collegamenti tramite riferimento
poiché il riferimento di collegamento creato con [1]: http://example.orgnon verrà reso, allo stesso modo anche uno dei seguenti non verrà reso

<empty line>
[whatever]::
[whatever]:whatever
[whatever]: :
[whatever]: whatever

Questa (prima variante testata) funziona pandoccosì come per le attuali istanze online di Gitlab e GitHub .
Doak

5

Per pandoc, un buon modo per bloccare il commento è usare un metablock yaml, come suggerito dall'autore pandoc . Ho notato che questo dà più adeguata evidenziazione della sintassi dei commenti rispetto a molte delle altre soluzioni proposte, almeno nel mio ambiente ( vim, vim-pandoc, e vim-pandoc-syntax).

Uso i commenti di blocco yaml in combinazione con i commenti html-inline, poiché i commenti html non possono essere nidificati . Sfortunatamente, non c'è modo di bloccare i commenti all'interno del metablock di yaml , quindi ogni riga deve essere commentata singolarmente. Fortunatamente, ci dovrebbe essere solo una riga in un paragrafo a capo morbido.

Nel mio ~/.vimrc, ho impostato scorciatoie personalizzate per i commenti di blocco:

nmap <Leader>b }o<Esc>O...<Esc>{ji#<Esc>O---<Esc>2<down>
nmap <Leader>v {jddx}kdd

Io uso ,il mio <Leader>tasto, quindi ,be ,vcommento e rimuovere il commento di un paragrafo, rispettivamente. Se ho bisogno di commentare più paragrafi, mi associo j,ba una macro (di solito Q) ed eseguo <number-of-paragraphs><name-of-macro>(ad esempio ( 3Q). Lo stesso vale per il commento.


5

kramdown - il motore di markdown basato su Ruby che è l'impostazione predefinita per Jekyll e quindi GitHub Pages - ha il supporto commenti incorporato attraverso la sua sintassi di estensione :

{::comment}
This text is completely ignored by kramdown - a comment in the text.
{:/comment}

Do you see {::comment}this text{:/comment}?
{::comment}some other comment{:/}

Ciò ha il vantaggio di consentire commenti in linea, ma il rovescio della medaglia è di non essere portatile con altri motori Markdown.


4

Puoi provare

[](
Your comments go here however you cannot leave
// a blank line so fill blank lines with
//
Something
)

4

Puoi farlo (blocco YAML):

~~~
# This is a
# multiline
# comment
...

Ho provato solo con output in lattice, per favore conferma per altri.


Funziona anche con l'output HTML.
Petzi,

Non sono sicuro che la conferma di Daniel dell'output HTML sia corretta. L'ho fatto con un file di output html ed ho eseguito "pandoc --bibliography paper.bib -o paper.html paper.md" e l'HTML ha mostrato le righe dei commenti.
markgalassi l'
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.