Markdown中的评论

Bet*_*mos 1277 syntax markdown comments

将注释存储在markdown文件中的语法是什么,例如文件顶部的CVS $ Id $注释?降价项目我什么都没发现.

Mag*_*nus 1322

我相信所有先前提出的解决方案(除了需要特定实现的解决方案之外)导致注释包含在输出HTML中,即使它们未被显示.

如果你想要一个严格意义上的评论(转换文档的读者不应该看到它,即使使用"查看源")你可以(ab)使用链接标签(用于参考样式链接)可用于Markdown核心规范:

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

那是:

[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.)
Run Code Online (Sandbox Code Playgroud)

或者你可以走得更远:

[//]: <> (This is also a comment.)
Run Code Online (Sandbox Code Playgroud)

为了提高平台兼容性(并保存一个击键),还可以使用#(这是一个合法的超链接目标)而不是<>:

[//]: # (This may be the most platform independent comment)
Run Code Online (Sandbox Code Playgroud)

为了获得最大的可移植性,在此类注释之前和之后插入一个空行很重要,因为当定义与常规文本相比时,某些Markdown解析器无法正常工作.Babelmark最近的研究表明,前后的空白线都很重要.如果之前没有空行,一些解析器将输出注释,并且如果之后没有空行,则一些解析器将排除以下行.

通常,这种方法应该适用于大多数Markdown解析器,因为它是核心规范的一部分.(即使定义了多个链接时的行为,或者定义了链接但从未使用过时,也未严格指定).

  • `[//]:#"Comment"`和`[//]:#(Comment)`似乎适用于更广泛的实现,因为`#`是一个有效的相对URI.例如,GitHub拒绝`<>`,整条线变得可见.值得注意的是,链接标签通常需要通过空行与其他内容分开. (124认同)
  • 为了与平台无关,它还需要在评论之前使用空行.请参阅测试:http://stackoverflow.com/a/32190021/2790048 (6认同)
  • 这可以用于多行评论吗? (6认同)
  • 仅供参考,但如果您使用Pandoc创建TOC,则会生成有关重复链接引用的警告.(这些只是警告,TOC仍然会被创建.) (4认同)
  • 我经常在方括号内写评论:`[Comment test]::` (4认同)
  • @RovingRichard是的,至少在Pandoc中,如果注释块中没有空行(单行换行正常),这适用于多行注释.我使用Magnus的方法进行块注释,使用chl的HTML方法进行内联注释(尽管通常只有2个破折号).这样我就可以阻止注释掉已包含内联HTML注释的段落. (3认同)
  • 这是[babelmark]的结果(http://johnmacfarlane.net/babelmark2/?text=This+text+has+a+comment%0A%0A [%2F%2F]%3A +%23 +%28This + may +在+的+最+平台+独立+评论%29%0A%0AYea !!) (2认同)
  • 只是想指出,此答案中列出的选项均不适用于此库:https://github.com/rexxars/react-markdown 但是,我可以通过用引号替换括号来使其工作。(如第一条评论和其他答案中提到的) (2认同)
  • @anapsix:你的解决方案(`[这是一条评论]::`)最适合我(例如,即使评论中有空格,在 vscode 的预览模式下也会消失);您想将其作为答案发布并解释其为何有效吗? (2认同)

chl*_*chl 925

我使用标准的HTML标签

<!---
your comment goes here
and here
-->
Run Code Online (Sandbox Code Playgroud)

请注意三重破折号.优点是它在生成TeX或HTML输出时与pandoc一起使用.有关pandoc-discuss组的更多信息,请参阅.

  • 如果我理解正确,三重破折号会在解析markdown文件时使_pandoc_忽略注释.但是如果你使用另一个降价引擎,评论将显示在生成的HTML中(因此可以通过"查看源"显示).所以你必须小心你在评论中提出的内容;) (69认同)
  • 如果三重短划线很重要,那么这些不是"标准HTML"注释. (31认同)
  • 对于Google员工的注意事项:遗憾的是,这在GitHub Markdown中无效,我最终使用了Magnus的解决方案. (14认同)
  • 你能解释一下Pandoc如何对待三重破折号与双重破折号的区别吗?当我试验它们时,它们似乎以同样的方式处理.此外,[Pandoc用户指南](http://johnmacfarlane.net/pandoc/README.html#raw-html)只是说"原始HTML在HTML,S5,Slidy,Slideous,DZSlides,EPUB中保持不变, Markdown和纺织品产量,以及其他形式的抑制." 三重破折号似乎没有比双重破折号更高的特权. (5认同)
  • 使用“pandoc”(v2.5)测试了这两个(“&lt;!---”和“&lt;!--”变体),两者都以 HTML 形式注释结尾,并且在渲染视图中不可见。此外,*Gitlab* 和 *GitHub* 当前的上游实例接受这些。 (5认同)
  • @dkim 带有三重破折号的注释将被忽略并从 HTML 输出中丢弃。插入到 HTML 文件中的双虚线注释不是这种情况。最新版本的 Pandoc (1.10) 仍然如此。 (3认同)
  • 这适用于VSCode Markdown Preview (3认同)
  • @DanielBuckmaster 也许你对“工作”的定义与我不同(即我想要的只是渲染时未显示的东西,与 Gist-vim 一起使用),或者也许他们在你发布后进行了更新,但是它对我在 Gist 上有用。 (2认同)
  • **此答案在 GitHub 上有效!** 其他答案无效。 (2认同)
  • 我喜欢经得起时间考验的答案。正在寻找一个 GitHub 的解决方案,该解决方案也可以通过 Markdown Preview 增强版在 VSCode 中工作,你瞧,这个 10 年前的答案仍然有效。为什么我需要答案?`&lt;!-- cSpell:禁用 --&gt;` (2认同)

Nic*_*kin 181

这项小型研究证明并改进 了马格努斯的答案

与平台无关的语法最多

(empty line)
[comment]: # (This actually is the most platform independent comment)
Run Code Online (Sandbox Code Playgroud)

这两个条件都很重要:

  1. 使用#(而不是<>)
  2. 在评论前用空行.注释后的空行对结果没有影响.

严格的Markdown规范CommonMark只能按照这种语法工作(而不是<>和/或空行)

为了证明这一点,我们将使用由John MacFarlane编写的Babelmark2.此工具检查28 Markdown实现中特定源代码的呈现.

(+- 通过测试,-- 没有通过,?- 留下一些未呈现的HTML垃圾).

这证明了上述陈述.

这些实现失败了所有7个测试.没有机会对它们使用带有渲染的排除注释.

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

  • 优秀,全面的测试工具!看起来你是对的`#`[除了GFM之外的所有人都有效](http://johnmacfarlane.net/babelmark2/?text=above%0A%0A%5Bcomment%5D%3A+%23+(THIS + SHOULD) + BE + REMOVED)%0Aowow)和`<>`[适用于GFM](http://johnmacfarlane.net/babelmark2/?text=above%0A%0A%5Bcomment%5D%3A+%3C%3E+(THIS +应该+被删除)%0以下)但不是其他几个人.太糟糕的GFM既是一个角落的情况,也是**非常流行的味道. (2认同)
  • @JacobLee 它确实具有重要意义。此黑客利用了[链接引用定义语法](https://spec.commonmark.org/0.30/#link-reference-definitions) 以及 LRD 本身不会呈现为任何内容的事实。但是,如果[参考链接](https://spec.commonmark.org/0.30/#re​​ference-link)出现在文档中的任何位置,且文本与链接标签相同,则会导致呈现链接,而您不会这样做不想发表评论。所以使用`[//]`比`[comment]`安全得多。 (2认同)

uir*_*han 51

如果您正在使用Jekyll或octopress,也可以使用.

{% comment %} 
    These commments will not include inside the source.
{% endcomment %}
Run Code Online (Sandbox Code Playgroud)

{% comment %}在MarkDown处理器进入之前,首先解析Liquid标签并将其删除.访问者在尝试从浏览器中查看源时将看不到.

  • Jinja2 =`{#`multiline comments here`#}` (2认同)

小智 31

另一种方法是将注释放在程式化的HTML标记中.这样,您可以根据需要切换其可见性.例如,在CSS样式表中定义注释类.

.comment { display: none; }

然后,增强MARKDOWN以下

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

在浏览器中显示如下

We do support comments

  • 复制/粘贴可能最终会复制"已注释"文本以及常规文本,因此在使用时请小心.对于复制文本块的人来说,它很容易产生意想不到的结果. (5认同)
  • 辅助功能支持引擎将正确跳过显示:无文本。 (3认同)
  • @Eilon对此的可访问性也很糟糕 (2认同)

jom*_*omo 29

这适用于GitHub:

[](Comment text goes here)
Run Code Online (Sandbox Code Playgroud)

生成的HTML看起来像:

<a href="Comment%20text%20goes%20here"></a>
Run Code Online (Sandbox Code Playgroud)

这基本上是一个空链接.显然你可以在渲染文本的源代码中读到它,但无论如何你都可以在GitHub上做到这一点.

  • 它肯定是,但它实际上是迄今为止唯一的答案,它始终适用于GitHub,例如在列表中. (5认同)
  • 自 2019 年 3 月 8 日起,这不再适用于 github,它按原样呈现`[](评论文本在此处)` (5认同)
  • 如果只有 GitHub 很重要,那么 `&lt;!-- comment --&gt;` 就可以了。 (3认同)

Ker*_*rim 18

另请参阅Critic Markup,由越来越多的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.
Run Code Online (Sandbox Code Playgroud)

  • 我认为这种"伪"标准的一个问题是它们不可移植.在某些网站上,这些将完美,而在其他网站上则不然. (5认同)

ale*_*lex 18

Vim Instant-Markdown用户需要使用

<!---
First comment line...
//
_NO_BLANK_LINES_ARE_ALLOWED_
//
_and_try_to_avoid_double_minuses_like_this_: --
//
last comment line.
-->
Run Code Online (Sandbox Code Playgroud)


Edo*_*iel 13

使用mkdocs时,请添加mkdocs.yml

  - pymdownx.striphtml:
      strip_comments: true
      strip_js_on_attributes: false
Run Code Online (Sandbox Code Playgroud)

然后在任何 Markdown 文件中添加普通的 html 注释,如下所示

<!-- this is a comment -->
Run Code Online (Sandbox Code Playgroud)

将从 html 输出中删除。


Dav*_*man 12

如何将注释放在非eval,非echo R块中?即

```{r echo=FALSE, eval=FALSE}
All the comments!
```
Run Code Online (Sandbox Code Playgroud)

似乎对我有用.

  • 另外,在"注释掉"的代码块中随意做"cat("#Some Header")`并使用`results ="asis"`,你可以在你的代码中添加整个注释掉的部分.可以通过切换"eval = FALSE"来打开/关闭,因为R评估是在pandoc编译之前完成的.谢谢你的想法! (2认同)

Ryn*_*ett 11

披露:我写了插件.

由于问题没有指定具体的降价实现我想提的评论插件蟒蛇,降价,它实现上述相同pandoc评论风格.


Bra*_*ter 9

<!--- ... --> 
Run Code Online (Sandbox Code Playgroud)

在Pandoc Markdown(Pandoc 1.12.2.1)中不起作用.评论仍然出现在HTML中.以下工作:

Blank line
[^Comment]:  Text that will not appear in html source
Blank line
Run Code Online (Sandbox Code Playgroud)

然后使用+脚注扩展名.它本质上是一个永远不会被引用的脚注.


Ax_*_*Ax_ 8

此 Markdown 评论不会在使用 Jekyll 的 GitHub Pages 网站上呈现

[whatever]: text
Run Code Online (Sandbox Code Playgroud)

由于 Jekyll 使用 Liquid 模板语言来处理模板,因此此 Liquid 注释也不会在使用 Jekyll 的 GitHub Pages 网站上呈现

{% comment %}
This is a long comment string 

Newline

Stuff
{% endcomment %}
Run Code Online (Sandbox Code Playgroud)


小智 5

你可以试试

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


joe*_*lom 5

对于pandoc,阻止评论的一种好方法是使用yaml metablock,如pandoc作者所建议的那样.我注意到,这使评论的更适当的语法高亮相对于很多其他提出的解决方案,至少在我的环境(vim,vim-pandoc,和vim-pandoc-syntax).

我将yaml块注释与html-inline注释结合使用,因为html-comments不能嵌套.不幸的是,没有办法在yaml metablock中进行块注释,因此每行必须单独进行注释.幸运的是,软包装段落中应该只有一行.

在我~/.vimrc,我已经设置了块注释的自定义快捷方式:

nmap <Leader>b }o<Esc>O...<Esc>{ji#<Esc>O---<Esc>2<down>
nmap <Leader>v {jddx}kdd
Run Code Online (Sandbox Code Playgroud)

我用,我的<Leader>-键,所以,b,v评论,并取消段落,分别.如果我需要评论多个段落,我会映射j,b到一个宏(通常Q)并运行<number-of-paragraphs><name-of-macro>(例如(3Q).同样的工作用于取消注释.


vos*_*d01 5

kramdown - 基于Ruby的markdown引擎,它是Jekyll的默认设置,因此GitHub Pages- 通过其扩展语法提供了内置的注释支持:

{::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{:/}
Run Code Online (Sandbox Code Playgroud)

这有利于允许在线评论,但不能移植到其他Markdown引擎的缺点.


ana*_*six 5

The following works very well

<empty line>
[whatever comment text]::
Run Code Online (Sandbox Code Playgroud)

that method takes advantage of syntax to create links via reference
since link reference created with [1]: http://example.org will not be rendered, likewise any of the following will not be rendered as well

<empty line>
[whatever]::
[whatever]:whatever
[whatever]: :
[whatever]: whatever
Run Code Online (Sandbox Code Playgroud)

  • 现在是 2022 年。使用并排 md 查看器在 VSCode 中进行测试,这不允许单词之间有空格。'[whatever]:whatever' 有效,但 '[whatever]:whatever foo' 无效。如果我添加“#”,则它允许空格。'[whatever]: # 不管 foo bar' 有效。 (3认同)
  • 这(测试的第一个变体)适用于“pandoc”以及 *Gitlab* 和 *GitHub* 的当前在线实例。 (2认同)
  • 目前,带有空行的方法通过了 Babelmark 的所有 31 种口味(借用 Baskin-Robbins 的一句话)。我不是 Markdown 专家,但今晚我需要评论以防止 Markdown 预览窗口出现性能问题。如果您将此处的整个代码框复制到 Babelmark 中,则任何注释都不会呈现在 HTML 中。这个答案还需要大约 1,000 个赞成票。 (2认同)