Code hay dở chưa biết, nhìn phải đẹp đã.
Hugo là một bộ sinh trang web tĩnh (SSG - Static Site Generator) mã nguồn mở. Được xây dựng trên ngôn ngữ Go, Hugo nổi tiếng bởi tốc độ build siêu nhanh (< 1ms mỗi trang) và các tính năng hỗ trợ xây dựng nội dung mạnh mẽ. Từ blog cá nhân, trang quảng bá, trang tài liệu đến trang thương mại điện tử, Hugo đáp ứng được đa dạng nhu cầu về nội dung và lĩnh vực. Bài viết sau đây dành cho người mới bắt đầu sử dụng Hugo.
Các cách tiếp cận#
Có 2 cách tiếp cận khi nói đến highlight code.
- Thực hiện ở phía browser, sử dụng Javascript ( Highlight.js, Prism.js).
- Thực hiện ở phía server, sinh sẵn mã HTML highlight bằng ngôn ngữ phía server.
Từ browser#
Nhiều theme Hugo hỗ trợ cách tiếp cận đầu tiên, chẳng hạn, theme Paper cho phép cấu hình sử dụng Highlight.js.
Từ server#
Cách tiếp cận số 2 trong Hugo sử dụng Chroma để highlight code. Chroma, viết bằng Go, thực hiện chuyển mã nguồn thành mã HTML có highlight cú pháp với hiệu năng cao. Chroma hỗ trợ nhiều ngôn ngữ và nhiều theme phổ biến. Thử nghiệm highlight code bằng Chroma tại đây.
Ưu điểm của cách tiếp cận này so với cách thứ nhất:
- Sử dụng được với mọi theme, do được hỗ trợ mặc định bởi Hugo
- Hiệu quả hơn, do mã HTML highlight được sinh sẵn ở build time, cũng như không cần tải thêm Javascript ở browser
Phần còn lại của bài viết tập trung hướng dẫn highlight code theo cách tiếp cận số 2.
Cấu hình mặc định#
Ta có thể đặt cấu hình mặc định cho hightlight code trong file config
.
# config.yml
markup:
highlight:
anchorLineNos: false # Nếu true, sinh ra link cho từng dòng code
guessSyntax: false
hl_Lines: ""
hl_inline: false # Nếu true, highlight thẻ `code` markdown
lineAnchors: ""
codeFences: true # Nếu true, cho phép truyền tham số vào code fence trong Markdown
lineNos: false # Nếu true, hiện số thứ tự dòng code
lineNoStart: 1 # Số thứ tự bắt đầu của dòng code
lineNumbersInTable: true
noClasses: true # Nếu false, sử dụng highlight bằng Javascript
noHl: false
style: monokai # Theme
tabWidth: 4 # Độ rộng tab
Sử dụng shortcode#
Hugo hỗ trợ sẵn shortcode highlight
để làm nhiệm vụ như tên gọi của nó.
{{< highlight go "linenos=true,hl_lines=11 20-26,linenostart=2" >}}
// ... code
{{< / highlight >}}
|
|
Sử dụng code fence#
Khi cấu hình codeFences: true
trong file config
, Hugo cho phép truyền tham số vào cú pháp code fence của Markdown.
```go {linenos=table,hl_lines=[11,"15-17"],linenostart=2}
// ... code
```
|
|