--- layout: post title: Ghi chép tất cả mọi thứ bằng Markdown tags: markdown, blogging, programming description: "Sơ sơ về ngôn ngữ đánh dấu văn bản Markdown và các công dụng của nó." --- ## Markdown là gì? Về định nghĩa thì *Markdown là một ngôn ngữ đánh dấu*. **Wtf??** Thế ngôn ngữ đánh dấu là gì? Ngôn ngữ đánh dấu rất đơn giản là một cách để làm cho một vài đoạn văn bản có ý nghĩa khác với các đoạn khác. **VD:** Đây là một chữ *nghiêng*. Rõ ràng chúng ta đã đánh dấu chữ "nghiêng" có ý nghĩa khác với các chữ còn lại trong câu. Ngôn ngữ đánh dấu chỉ đơn giản là vậy thôi. Có nhiều kiểu ngôn ngữ đánh dấu khác nhau phục vụ nhiều mục đích khác nhau. Trong đó loại nổi tiếng nhất là **HTML** (và **XHTML**) dùng cho web. Demo một chút HTML:
Đây là một đoạn văn.
Đây là một đoạn văn khác, trong đó có chữ đậm và chữ nghiêng
Dù có chưa biết tí nào về HTML thì nhìn qua chắc các bạn cũng có thể hiểu ngay được ý nghĩa của các ký tự đánh dấu kia: `` là *paragraph*,
`` là *bold*, `` là *italic*. Nhưng mà phải nói thật HTML là ngôn ngữ **quá lằng nhằng,
rắc rối**. VD như một khi bạn đã dùng thẻ `` thì bạn phải đóng nó lại bằng thẻ `
`.
Với văn bản ngắn thì không sao nhưng nếu bạn phải viết văn bản hàng chục trang thì sao?
Lại còn rất nhiều tính năng thừa thãi so với một writer nữa, có ai nhớ được tất
cả các thẻ của HTML không? Thêm cả các thuộc tính riêng cho từng thẻ nữa?
Vì vậy đã có nhiều ngôn ngữ ra đời để thay thế HTML làm ngôn ngữ đánh dấu đơn giản tập trung vào nội dung cho writer.
Trong số đó thì nổi bật nhất là **Markdown**, chủ yếu do nó được lựa chọn làm ngôn ngữ
đánh dấu chính cho **[Github](http://github.com)** (hosting cho các dự án nguồn mở lớn nhất
thế giới). Gần đây Markdown trở nên khá nổi tiếng trong giới làm web, những blogger
và những người viết sách self-publishing nhờ tính đơn giản, gọn nhẹ, dễ học của nó.
Một khi đã quen thì bạn hoàn toàn có thể dùng Markdown thay thế cho MS Word.
Thực chất bài viết này và phần lớn nội dung trong blog được viết bằng Markdown.
Bạn có thể nghía qua code của nó ở [đây](https://raw.github.com/lewtds/lewtds.github.com/master/_posts/2013-01-03-markdown.md).
## Syntax cơ bản của markdown
OK, 'nuff said. Thế Markdown là ntn nào?
Ờ, rất đơn giản, cứ thế mà viết thôi. Phần cơ bản thì chỉ cần ngồi format thử một
đoạn văn trong 30 phút, save thành file **\*.md**:
- `*nghiêng*` hoặc `_nghiêng_` là _nghiêng_
- `**đậm**` hoặc `__đậm__` là **đậm**
- `[tên link](đường dẫn)` là [link](http://example.com)
- `![tên ảnh](link đến ảnh)` giống link nhưng cho ảnh
- `# Chương 1`, `## Mục 1`, `### Mục 1.1`
- Tạo list:
List gạch đầu dòng:
- Lorem ipsum
- Dolo sit amet
- Consecteur...
List đánh số:
1. Lorem ipsum
2. Dolo sit amet
3. Consecteur...
Còn rất nhiều điều thú vị trong syntax của ngôn ngữ như tạo table, dòng kẻ ngang ngắt
trang,... Các bạn có thể khám
phá ở **[trang chủ của Markdown][1]** hoặc **[cheatsheet][2]** của mashery.com hoặc **[cheatsheet khác][3]**
của warpedvisions.org.
Sau khi edit trên máy ngon oy thì bạn có thể cài công cụ cùng tên `markdown`
(`apt-get install markdown` trong Ubuntu)
để convert nó sang HTML test thử trong browser. Trên Windows bạn có thể thử **[MarkdownPad][4]**.
Trên Mac thì appstorm.com đã liệt kê danh sách **[35 công cụ hỗ trợ Markdown][5]** cho Mac.
Bạn cũng có thể dùng nhiều trình **[Markdown editor online][7]** rất tiện. Với Linux thì gần như tất cả
các editor thông dụng cài sẵn đều hỗ trợ Markdown (gedit, kate,...), **[ReText][6]** cũng là
một lựa chon đáng quan tâm. Thường thì mình edit bằng gedit rồi dùng lệnh `markdown`
convert ra HTML và check bằng Firefox/Chrome.
Có một chú ý nhỏ là Markdown không được thiết kế để thay thế hoàn toàn HTML. Có những
thứ Markdown cố ý bỏ qua để có được một ngôn ngữ đơn giản, dễ học. Nhưng những thứ
đó bạn vẫn hoàn toàn có thể sử dụng trong Markdown bằng syntax thông thường của HTML
vì Markdown cho phép mix code HTML vào giữa code Markdown (nhưng Markdown ở giữa HTML thì không).
Một chú ý nữa là vì Markdown được thiết kế để nhìn đẹp mắt cả khi render ra HTML
lẫn khi viết bằng plain text nên nó có một đặc điểm nho nhỏ có thể gây confusing
cho người mới bắt đầu là nếu muốn kết thúc một đoạn văn (xuống dòng) trong Markdown
thì bạn phải gõ 2 dấu xuống dòng. Đơn giản là vì khi viết file plain text thì bạn phải tự
ngắt dòng bằng tay, tức là nếu bạn có một câu dài quá kích thước của màn hình thì bạn
phải tự thêm dấu xuống dòng để ngắt nó thành nhiều dòng cho gọn. Thế nên nếu chỉ có
một dấu xuống dòng thì Markdown sẽ bỏ qua.
[1]: http://daringfireball.net/projects/markdown/
[2]: http://support.mashery.com/docs/customizing_your_portal/Markdown_Cheat_Sheet
[3]: http://warpedvisions.org/projects/markdown-cheat-sheet/
[4]: http://markdownpad.com/
[5]: http://mac.appstorm.net/roundups/productivity-roundups/35-markdown-apps-for-the-mac/
[6]: http://sourceforge.net/p/retext/home/ReText/
[7]: https://www.google.com/search?q=online+markdown+editor&ie=utf-8&oe=utf-8
## Ứng dụng markdown
Như đã nói ở trên thì chúng ta có thể dùng Markdown với rất nhiều công dụng khác nhau
vì nó là một ngôn ngữ đánh dấu văn bản đa năng.
1. Trên **[github.com](http://github.com)** thì Markdown được
dùng làm ngôn ngữ chuẩn để viết các tập tin *README*, viết *wiki* cho các dự án nguồn mở
đặt trên Github. Họ cũng dùng Markdown trong các ô comment, gần như bất kỳ chỗ nào
viết được một đoạn văn trên Github thì cũng có thể viết bằng Markdown. Trang web **[stackoverflow.com](http://stackoverflow.com)**
(nơi chuyên để trao đổi các vấn đề về lập trình và máy tính) cũng dùng Markdown
cho mục đích tương tự. Github cũng có một dịch vụ gọi là **[Gist](gist.github.com)**
dùng để giúp mọi người chia sẻ dễ dàng các đoạn code/text ngắn. Điều tuyệt vời là
Gist cũng hỗ trợ render trực tiếp Markdown ra văn bản HTML đẹp mắt nên bạn có thể
sử dụng gist để nhanh chóng ghi lại những ý tưởng mới bùng nổ trong đầu hoặc một
bài báo cáo, một bài hướng dẫn ngắn,... giống như tính năng Notes trên Facebook vậy.
2. Markdown có thể dùng để viết sách, phần lớn sách, truyện đều có kết cấu (về mặt format)
đơn giản: phân thành các chương, phần đề mục chương, trong chương thì có các đoạn văn,
có các list gạch đầu dòng, có một vài tấm ảnh, chữ đậm, chữ nghiêng,... Markdown hoàn
toàn có thể xử lý những thứ này. Thực tế là có nhiều dịch vụ tự xuất bản sách đã hỗ trợ
in sách viết bằng Markdown, thậm chí một số dịch vụ như **[leanpub.com](https://leanpub.com/)** còn chỉ chấp nhận sách
viết bằng Markdown.
3. Markdown có thể dùng để viết blog, tin tức. Thực ra đây chính là mục đích ban đầu của Markdown.
HTML nói chung để viết content thì cũng được nhưng sẽ phức tạp, viết một bài báo
20 đoạn văn thì bạn sẽ biết nó khổ đến thế nào. Lại còn những distraction từ syntax
của ngôn ngữ nữa. Vì vậy nhiều trang tin tức và blog đã chuyển sang phương án code
khung sườn trang web bằng HTML (hoặc HAML) và viết nội dung hoàn toàn bằng Markdown.
Sau đó convert file Markdown sang HTML và đăng bài như thường.
4. Ngoài ra cũng có một số người tài giỏi đã kết hợp Markdown và [impress.js](http://bartaz.github.com/impress.js) (một thư viện
web nguồn mở để tạo slide presentation 3D như [prezi.com](http://prezi.com) - **seriously, press that impress.js link xD**) thành một công cụ presentation
vô cùng độc đáo là **[Hekyll](http://treehouseagency.com/blog/brian-mcmurray/2012/02/22/meet-hekyll-markdown-presentations-hackers)**. Một nhóm khác cũng viết một công cụ đơn giản hơn là **[Markdown Presenter](http://www.maclife.com/article/howtos/how_create_presentation_markdown)**.
5. Vì file Markdown render ra file HTML nên chúng ta có thể dùng nó như một file HTML
bình thường. Bạn có thể mở nó bằng LibreOffice Writer hoặc MS Word và edit như một
file **.doc**, save ra thành file **PDF** để gửi cho bạn bè, người thân,... Giới hạn chỉ
là sự sáng tạo của bạn.
Hy vọng sau bài viết này thì bạn sẽ bắt đầu sử dụng Markdown trong cuộc sống thường
ngày ;)