--- 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:

Tiêu đề bài viết

Đâ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à *heading* (tiêu đề), `

` 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 ;)