Nhận xét trong Markdown


1402

Cú pháp lưu trữ nhận xét trong tệp đánh dấu, ví dụ: nhận xét CVS $ Id $ ở đầu tệp là gì? Tôi không tìm thấy gì trong dự án markdown .


10
Đọc giữa các dòng, có vẻ như bạn muốn đính kèm siêu dữ liệu vào Markdown của mình. Vì lý do đó, tôi khuyên bạn nên sử dụng bộ tiền xử lý cho phép bạn thêm tiêu đề. Ví dụ, xem Front Matter của Jekyll . Đối với một ví dụ khác, hãy xem cách Basho sử dụng Middman cho tài liệu của họ . (Lưu ý: Đây không phải là câu trả lời trực tiếp cho câu hỏi, đó là lý do tại sao tôi chia sẻ nó dưới dạng nhận xét.)
David J.


Dưới đây là điểm chuẩn của các loại nhận xét khác nhau với các trình phân tích cú pháp khác nhau trên Babelmark .
Ulysse BN

Câu trả lời:


1456

Tôi tin rằng tất cả các giải pháp được đề xuất trước đây (ngoài các giải pháp yêu cầu triển khai cụ thể) dẫn đến các nhận xét được đưa vào HTML đầu ra, ngay cả khi chúng không được hiển thị.

Nếu bạn muốn một nhận xét hoàn toàn dành cho chính mình (người đọc tài liệu đã chuyển đổi sẽ không thể nhìn thấy nó, ngay cả với "nguồn xem"), bạn có thể (ab) sử dụng nhãn liên kết (để sử dụng với liên kết kiểu tham chiếu) có sẵn trong đặc tả Markdown cốt lõi:

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

Đó là:

[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.)

Hoặc bạn có thể đi xa hơn:

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

Để cải thiện khả năng tương thích nền tảng (và để lưu một tổ hợp phím), bạn cũng có thể sử dụng #(đó là mục tiêu siêu liên kết hợp pháp) thay vì <>:

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

Để có tính di động tối đa, điều quan trọng là chèn một dòng trống trước và sau loại nhận xét này, bởi vì một số trình phân tích cú pháp Markdown không hoạt động chính xác khi các định nghĩa cọ sát với văn bản thông thường. Nghiên cứu gần đây nhất với Babelmark cho thấy các dòng trống trước và sau đều quan trọng. Một số trình phân tích cú pháp sẽ đưa ra nhận xét nếu không có dòng trống nào trước đó và một số trình phân tích cú pháp sẽ loại trừ dòng sau nếu không có dòng trống nào sau đó.

Nói chung, cách tiếp cận này sẽ hoạt động với hầu hết các trình phân tích cú pháp Markdown, vì nó là một phần của đặc tả cốt lõi. (ngay cả khi hành vi khi nhiều liên kết được xác định hoặc khi một liên kết được xác định nhưng không bao giờ được sử dụng, không được chỉ định nghiêm ngặt).


145
[//]: # "Comment"[//]: # (Comment)dường như hoạt động trên nhiều loại triển khai hơn, bởi vì #là một URI tương đối hợp lệ. GitHub, ví dụ, từ chối <>và toàn bộ dòng sẽ hiển thị. Cũng đáng lưu ý rằng các nhãn liên kết thường cần được phân tách khỏi nội dung khác bằng một dòng trống.
Zenexer

6
Để độc lập với nền tảng nhất, nó cũng cần một dòng trống trước khi bình luận. Xem các bài kiểm tra: stackoverflow.com/a/32190021/2790048
Nick Volynkin

6
Điều này có thể được sử dụng cho ý kiến ​​đa dòng?
crypdick

4
@RovingRichard Có, ít nhất trong Pandoc, công cụ này hoạt động cho các nhận xét đa dòng nếu không có dòng trống nào trong khối nhận xét (ngắt dòng đơn là ổn). Tôi sử dụng phương pháp của Magnus cho các bình luận khối và cách tiếp cận HTML của chl cho các bình luận nội tuyến (mặc dù thường chỉ có 2 dấu gạch ngang). Bằng cách này, tôi có thể chặn nhận xét các đoạn đã chứa các nhận xét HTML nội tuyến.
joelostblom

4
Chỉ là FYI, nhưng nếu bạn đang tạo TOC bằng Pandoc, điều này sẽ tạo ra một cảnh báo về các tham chiếu liên kết trùng lặp. (Đây chỉ là những cảnh báo, TOC vẫn sẽ được tạo.)
Karl Giesing

995

Tôi sử dụng các thẻ HTML tiêu chuẩn, như

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

Lưu ý dấu gạch ngang ba. Ưu điểm là nó hoạt động với pandoc khi tạo đầu ra TeX hoặc HTML. Thông tin thêm có sẵn về nhóm thảo luận pandoc .


73
Nếu tôi hiểu chính xác, dấu gạch ngang ba làm cho pandoc bỏ qua nhận xét khi phân tích tệp đánh dấu. Nhưng nếu bạn sử dụng một công cụ đánh dấu khác, bình luận SILL hiển thị trong HTML được tạo (và do đó sẽ hiển thị với "nguồn xem"). Vì vậy, bạn phải cẩn thận với những gì bạn đưa vào nhận xét đó;)
cberzan

5
Bạn có thể giải thích cách Pandoc đối xử với ba dấu gạch ngang khác với dấu gạch đôi không? Khi tôi thử nghiệm với chúng, chúng dường như được xử lý theo cùng một cách. Ngoài ra, hướng dẫn của người dùng Pandoc chỉ nói rằng "HTML thô được truyền qua không thay đổi trong HTML, S5, Slidy, Slideous, DZSlides, EPUB, Markdown và Dệt, và bị chặn ở các định dạng khác." Dấu gạch ngang ba dường như không có đặc quyền nào cao hơn dấu gạch đôi.
dkim

1
@dkim Nhận xét với dấu gạch ngang ba được bỏ qua và loại bỏ khỏi đầu ra HTML. Đây không phải là trường hợp với các bình luận hai mặt được chèn vào tệp HTML. Đây vẫn là trường hợp với phiên bản mới nhất của Pandoc (1.10).
chl

32
Nếu dấu ba chấm có ý nghĩa thì đây không phải là các nhận xét "HTML tiêu chuẩn".
tripleee

17
Lưu ý cho nhân viên Google: điều này không may không hoạt động trong GitHub Markdown và cuối cùng tôi đã sử dụng giải pháp của Magnus.
Daniel Buckmaster

198

Nghiên cứu nhỏ này chứng minh và hoàn thiện câu trả lời của Magnus

Cú pháp độc lập với nền tảng nhất là

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

Cả hai điều kiện đều quan trọng:

  1. Sử dụng #(và không <>)
  2. Với một dòng trống trước khi bình luận . Dòng trống sau khi nhận xét không có tác động đến kết quả.

Đặc tả kỹ thuật Markdown nghiêm ngặt CommonMark chỉ hoạt động như dự định với cú pháp này (chứ không phải với <>và / hoặc một dòng trống)

Để chứng minh điều này, chúng ta sẽ sử dụng Babelmark2, được viết bởi John MacFarlane. Công cụ này kiểm tra kết xuất mã nguồn cụ thể trong 28 triển khai Markdown.

( +- đã vượt qua bài kiểm tra, -- không vượt qua, ?- để lại một số rác không được hiển thị trong HTML được hiển thị).

Điều này chứng minh các tuyên bố trên.

Những triển khai này thất bại tất cả 7 bài kiểm tra. Không có cơ hội sử dụng các nhận xét loại trừ khi kết xuất với họ.

  • cebe / markdown 1.1.0
  • cebe / markdown MarkdownExtra 1.1.0
  • cebe / markdown GFM 1.1.0
  • s9e \ TextFormatter (Giảm béo / PHP)

3
Tuyệt vời, công cụ kiểm tra kỹ lưỡng! Có vẻ như bạn đúng, phù hợp # với tất cả trừ GFM<> hoạt động cho GFM chứ không phải một vài người khác. Quá tệ GFM vừa là một trường hợp góc và cũng là một hương vị rất phổ biến.
hobs

1
Có vẻ như s9e \ TextFormatter hoạt động # kể từ ngày 21 tháng 1 năm 2016. Cebe vẫn không xử lý nó.
Troy Daniels

1
Thật kỳ lạ, nếu bình luận chứa (...)chính nó sẽ phá vỡ nó. Ít nhất là trên Visual Studio Code 1.19.
Royi

1
và do đó cho người dùng vim muốn nhận xét tất cả một tệp cùng một lúc:%s/^\(.*\)$/[comment]: # (\1)/g
Simon C.

Nó nói gì về markdown mà Bablemark2 tồn tại?
TC Proctor

54

Nếu bạn đang sử dụng Jekyll hoặc bạch tuộc sau đây cũng sẽ hoạt động.

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

Các thẻ Liquid {% comment %}được phân tích cú pháp trước và loại bỏ trước khi bộ xử lý MarkDown thậm chí được xử lý. Khách truy cập sẽ không nhìn thấy khi họ cố gắng xem nguồn từ trình duyệt của họ.


2
Jinja2 = {#bình luận đa dòng tại đây#}
John Mee

29

Một cách khác là đặt bình luận trong các thẻ HTML cách điệu. Bằng cách này, bạn có thể chuyển đổi tầm nhìn của họ khi cần thiết. Ví dụ: định nghĩa một lớp nhận xét trong biểu định kiểu CSS của bạn.

.comment { display: none; }

Sau đó, MarkDOWN nâng cao sau đây

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

xuất hiện như sau trong BROWSER

We do support comments


5
Sao chép / dán có thể sẽ sao chép văn bản "đã nhận xét" cũng như văn bản thông thường, vì vậy hãy cẩn thận khi sử dụng. Nó có thể dễ dàng tạo ra kết quả bất ngờ cho ai đó sao chép một khối văn bản.
Eilon

4
@Eilon cũng khả năng tiếp cận cho điều này sẽ rất tệ
Ethan

Công cụ hỗ trợ trợ năng sẽ bỏ qua đúng cách hiển thị: không có văn bản.
aredridel

28

Điều này hoạt động trên GitHub:

[](Comment text goes here)

HTML kết quả trông giống như:

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

Mà về cơ bản là một liên kết trống. Rõ ràng bạn có thể đọc nó trong nguồn của văn bản được hiển thị, nhưng dù sao bạn cũng có thể làm điều đó trên GitHub.


6
Đó chắc chắn là, nhưng thực sự đó là câu trả lời duy nhất cho đến nay luôn hoạt động trên GitHub, ví dụ như trong danh sách.
jomo

Tôi đến cùng một giải pháp. Đó là người duy nhất tôi có thể làm việc cho các bình luận nội tuyến, vd some text [](hidden text) blah blah.
c24w

3
Điều này không còn hoạt động trên github kể từ 2019-03-08, nó được hiển thị như là[](Comment text goes here)
dogmatic69

19

Người dùng Vim Instant-Markdown cần sử dụng

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

18

Đồng thời xem Critic Markup, được hỗ trợ bởi số lượng công cụ Markdown ngày càng tăng.

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
Tôi nghĩ một trong những vấn đề với tiêu chuẩn "giả" như vậy là chúng không thể mang theo được. Trên một số trang web, những trang này sẽ hoạt động hoàn hảo, trên những trang khác, chúng sẽ không.
Willem Van Onsem

14

Làm thế nào về việc đưa các ý kiến ​​trong một khối R không eval, không echo? I E,

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

Có vẻ làm việc tốt cho tôi.


2
Ngoài ra, hãy thoải mái làm những việc như cat("# Some Header")trong khối mã "đã nhận xét" và sử dụng results = "asis", và bạn có thể thêm toàn bộ các phần nhận xét vào mã của mình để có thể bật / tắt bằng cách bật eval = FALSE, vì việc đánh giá R được thực hiện trước khi biên soạn pandoc. Cảm ơn ý kiến!
MichaelChirico

11

Tiết lộ: Tôi đã viết plugin.

Vì câu hỏi không chỉ định triển khai đánh dấu cụ thể, tôi muốn đề cập đến Plugin Nhận xét cho python-markdown , thực hiện cùng một kiểu nhận xét pandoc đã đề cập ở trên.


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

Không hoạt động trong Pandoc Markdown (Pandoc 1.12.2.1). Bình luận vẫn xuất hiện trong html. Sau đây đã làm việc:

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

Sau đó sử dụng phần mở rộng + chú thích. Nó thực chất là một chú thích không bao giờ được tham khảo.


Tôi thích điều này nhất, bởi vì nó không tạo ra bất kỳ đầu ra nào cả. Đối với Bitbucket, tiền tố này là đủ : [#]: .
ceving

7

Sau đây hoạt động rất tốt

<empty line>
[whatever comment text]::

phương thức đó tận dụng cú pháp để tạo liên kết thông qua tham chiếu
tham chiếu liên kết được tạo [1]: http://example.orgsẽ không được hiển thị, do đó, bất kỳ điều nào sau đây cũng sẽ không được hiển thị

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

Điều này (biến thể đầu tiên được thử nghiệm) hoạt động cho các phiên bản pandoctrực tuyến hiện tại của GitlabGitHub .
doak

5

Đối với pandoc, một cách tốt để chặn bình luận là sử dụng siêu dữ liệu yaml, theo đề xuất của tác giả pandoc . Tôi đã nhận thấy rằng điều này sẽ cho làm nổi bật cú pháp đúng đắn hơn về những ý kiến so với rất nhiều các giải pháp đề xuất khác, ít nhất là trong môi trường của tôi ( vim, vim-pandocvim-pandoc-syntax).

Tôi sử dụng các bình luận khối yaml kết hợp với các bình luận nội tuyến html , vì các bình luận html không thể được lồng nhau . Thật không may, không có cách nào để bình luận khối trong siêu dữ liệu yaml , vì vậy mỗi dòng phải được nhận xét riêng. May mắn thay, chỉ nên có một dòng trong một đoạn văn mềm.

Theo tôi ~/.vimrc, tôi đã thiết lập các phím tắt tùy chỉnh cho các nhận xét chặn:

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

Tôi sử dụng ,như <Leader>-key của mình , vì vậy ,b, ,vbình luận và bỏ ghi chú một đoạn tương ứng. Nếu tôi cần bình luận nhiều đoạn văn, tôi ánh xạ j,btới một macro (thường Q) và chạy <number-of-paragraphs><name-of-macro>(ví dụ ( 3Q). Công việc tương tự cho việc bỏ ghi chú.


5

kramdown Công cụ đánh dấu dựa trên Ruby là mặc định cho Jekyll và do đó GitHub Pages Wap đã hỗ trợ nhận xét tích hợp thông qua cú pháp mở rộng của nó :

{::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{:/}

Điều này có lợi ích là cho phép nhận xét nội tuyến, nhưng nhược điểm của việc không thể di chuyển sang các công cụ Markdown khác.


4

Bạn co thể thử

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

4

Bạn có thể làm điều này (khối YAML):

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

Tôi đã thử với đầu ra latex, xin vui lòng xác nhận cho những người khác.


Nó cũng hoạt động với đầu ra HTML.
petzi

Tôi không chắc liệu xác nhận đầu ra html của Daniel có đúng không. Tôi đã làm điều đó với một tệp đầu ra html và chạy "pandoc --bibliography paper.bib -o paper.html paper.md" và HTML hiển thị các dòng bình luận.
markgalassi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.