Khi làm việc với giao diện dòng lệnh (CLI), nano là trình soạn thảo văn bản mình thường xuyên sử dụng để tạo và chỉnh sửa nhanh các file cấu hình, file php, html, css,… Một trong những tính năng hữu ích của nano là tô sáng cú pháp (syntax highlighting), giúp làm nổi bật các thành phần trong mã nguồn, chẳng hạn như từ khóa, biến, hoặc chuỗi ký tự, bằng cách sử dụng màu sắc và định dạng khác nhau. Nhờ đó giúp dễ dàng phát hiện lỗi và làm việc hiệu quả hơn.
Mục Lục
1. Nano trên macOS không hỗ trợ syntax highlighting
Tuy nhiên, khi sử dụng nano trên macOS, mình nhận ra nó không hỗ trợ syntax highlighting như nano bên Linux. Chẳng hạn bên dưới là nội dung 1 file php khi mình mở bằng lệnh nano web.php

Lý do vì nano
trên macOS chỉ là một đường dẫn tắt đến 1 ứng dụng khác có tên gọi pico
– trình soạn thảo mặc định của macOS từ Mac OS X 10.0 Cheetah (2001) tới giờ. Trong hình ở trên, các bạn có thể thấy nó hiển thị UW Pico 5.09 ở góc trái phía trên.
Khi kiểm tra lệnh nano bằng lệnh, sẽ thấy nó được trỏ về pico
ls -l /usr/bin/nano
Code language: Nginx (nginx)
lrwxr-xr-x 1 root wheel 4 Apr 12 14:16 /usr/bin/nano -> pico
Code language: YAML (yaml)
Quan trọng là Pico không hỗ trợ tính năng syntax highlighting.
Dưới đây là hướng dẫn cách kích hoạt tính năng syntax highlighting khi sử dụng nano trên macOS.
2. Cài đặt nano bản mới nhất
Mình sẽ cài đặt phiên bản mới nhất của nano bằng Homebrew để thay thế cho bản nano “fake”
brew install nano
Code language: Nginx (nginx)
3. Cấu hình cho nano
Tạo file ~/.nanorc
:
touch ~/.nanorc
Code language: Nginx (nginx)
Mở file ~/.nanorc
và thêm các dòng sau:
# Bao gồm tất cả các định nghĩa tô sáng cú pháp có sẵn
include /usr/local/share/nano/*.nanorc
# Hiển thị số dòng
set linenumbers
Code language: Bash (bash)
Kiểm tra lại file web.php
, giờ nó đã hiển thị màu sắc theo cú pháp, giúp file dễ nhìn hơn hẳn. Ngoài ra, nhờ có thông số set linenumbers
trong file cấu hình ở trên nên giờ nano hiển thị thêm số dòng ở rìa trái. Nếu không muốn hiển thị số dòng, bạn có thể xóa dòng set linenumbers
trong file ~/.nanorc

4. Cải thiện syntax highlighting
Mặc định, nano chỉ hỗ trợ syntax highlighting cho các định dạng file phổ biến như go, php, yaml, xml, css, json, html,… Có thể kiểm tra danh sách hỗ trợ bằng lệnh ls /usr/local/share/nano/
, nó sẽ hiển thị danh sách file nanorc, mỗi file tương ứng với một định nghĩa syntax highlighting cho từng loại file.
asm.nanorc go.nanorc nanohelp.nanorc rust.nanorc
autoconf.nanorc groff.nanorc nanorc.nanorc sh.nanorc
awk.nanorc guile.nanorc nftables.nanorc sql.nanorc
c.nanorc html.nanorc objc.nanorc tcl.nanorc
changelog.nanorc java.nanorc ocaml.nanorc tex.nanorc
cmake.nanorc javascript.nanorc patch.nanorc texinfo.nanorc
css.nanorc json.nanorc perl.nanorc xml.nanorc
default.nanorc lua.nanorc php.nanorc yaml.nanorc
elisp.nanorc makefile.nanorc po.nanorc
email.nanorc man.nanorc python.nanorc
extra markdown.nanorc ruby.nanorc
Code language: CSS (css)
Để nano hỗ trợ nhiều ngôn ngữ và định dạng hơn, mình sẽ cài đặt bộ bộ định nghĩa nâng cao từ GitHub:
git clone https://github.com/galenguyer/nano-syntax-highlighting.git ~/.nano
Code language: PHP (php)
Bộ định nghĩa này cung cấp tô sáng cú pháp cho nhiều ngôn ngữ hơn như Dockerfile, Git, SQL, Python,…
Brewfile.nanorc gemini.nanorc m3u.nanorc scala.nanorc
Dockerfile.nanorc genie.nanorc makefile.nanorc sed.nanorc
Rnw.nanorc gentoo.nanorc man.nanorc sh.nanorc
apacheconf.nanorc git.nanorc markdown.nanorc sieve.nanorc
arduino.nanorc gitcommit.nanorc moonscript.nanorc sls.nanorc
asciidoc.nanorc glsl.nanorc mpdconf.nanorc solidity.nanorc
asm.nanorc go.nanorc mutt.nanorc sparql.nanorc
awk.nanorc godot.nanorc nanorc sql.nanorc
batch.nanorc gophermap.nanorc nanorc.nanorc subrip.nanorc
beancount.nanorc gradle.nanorc nginx.nanorc svn.nanorc
brainfuck.nanorc groff.nanorc nmap.nanorc swift.nanorc
c.nanorc haml.nanorc ocaml.nanorc systemd.nanorc
clojure.nanorc haskell.nanorc octave.nanorc tcl.nanorc
cmake.nanorc hcl.nanorc patch.nanorc tex.nanorc
coffeescript.nanorc html.j2.nanorc peg.nanorc toml.nanorc
colortest.nanorc html.nanorc perl.nanorc tool
conf.nanorc i3.nanorc perl6.nanorc ts.nanorc
conky.nanorc ical.nanorc php.nanorc twig.nanorc
creole.nanorc ini.nanorc pkg-config.nanorc v.nanorc
csh.nanorc inputrc.nanorc pkgbuild.nanorc vala.nanorc
csharp.nanorc install.sh po.nanorc verilog.nanorc
css.nanorc jade.nanorc pov.nanorc vhdl.nanorc
csv.nanorc java.nanorc powershell.nanorc vi.nanorc
cython.nanorc jrnl.nanorc privoxy.nanorc x11basic.nanorc
d.nanorc js.nanorc prolog.nanorc xml.nanorc
dot.nanorc json.nanorc properties.nanorc xresources.nanorc
dotenv.nanorc jsx.nanorc pug.nanorc yaml.nanorc
elixir.nanorc julia.nanorc puppet.nanorc yum.nanorc
email.nanorc keymap.nanorc python.nanorc zeek.nanorc
erb.nanorc kickstart.nanorc reST.nanorc zig.nanorc
etc-hosts.nanorc kotlin.nanorc readme.md zsh.nanorc
expect.nanorc ledger.nanorc rego.nanorc zshrc.nanorc
fish.nanorc license rpmspec.nanorc
fortran.nanorc lisp.nanorc ruby.nanorc
fsharp.nanorc lua.nanorc rust.nanorc
Code language: CSS (css)
Chỉnh sửa lại file ~/.nanorc
như bên dưới
# Bao gồm tất cả các định nghĩa tô sáng cú pháp có sẵn
include "~/.nano/*.nanorc
# Hiển thị số dòng
set linenumbers
Code language: PHP (php)
5. Tạo thêm định nghĩa mới
Mình có thể tạo định nghĩa syntax highlighting cho các định dạng file không có sẵn, như Caddyfile (file cấu hình của Caddy web server).
Tạo thêm file caddyfile.nanorc
nano ~/.nano/caddyfile.nanorc
Code language: JavaScript (javascript)
Nhập vào nội dung sau và lưu lại
syntax "caddyfile" "Caddyfile$"
magic "Caddyfile configuration"
# Comments
color brightgreen "#.*$"
# Directives (common Caddy directives)
color brightcyan "^[ \t]*(file_server|reverse_proxy|tls|root|redir|try_files|en>
# Matchers (paths, wildcards, etc.)
color brightyellow "[ \t](/[a-zA-Z0-9_/.*-]*|\*|\{[^}]+\})[ \t]*"
# Values (strings, ports, URLs, placeholders)
color brightwhite "[ \t]([a-zA-Z0-9_.-]+(:[0-9]+)?|https?://[a-zA-Z0-9_.-]+|loc>
# Block delimiters (curly braces)
color brightred "[{}]"
# Snippets (e.g., (snippet_name))
color brightmagenta "\([a-zA-Z0-9_-]+\)"
# Keywords within blocks (sub-directives)
color brightblue "[ \t]*(to|from|upstream|dial|load_balance|header_up|header_do>
# Numbers (e.g., status codes, timeouts)
color brightmagenta "[ \t][0-9]+[ \t]"
# Strings in quotes
color brightwhite "\"[^\"]*\""
Code language: Markdown (markdown)
Mở file Caddyfile bằng nano, syntax highlighting giờ đã được hiển thị ngon lành.

Nếu muốn tạo thêm định nghĩa cho các định dạng khác, bạn dùng Grok / Gemini / ChatGPT để nhờ chúng nó tạo, ví dụ: “Can you generate nanorc file for Caddyfile ?“
Vậy là xong. Nano trên macOS giờ đã tiện lợi hơn nhiều so với ban đầu.
Ngoài macOS, các bạn có thể áp dụng bước 4 và 5 cho Linux để bổ sung syntax highlighting cho nhiều định dạng file mới.
Chúc bạn cài đặt thành công!
Nếu bạn cần hỗ trợ kỹ thuật miễn phí, vui lòng gửi câu hỏi trực tiếp ở phần Thảo luận bên dưới, mình sẽ trả lời trong thời gian sớm nhất.
Bạn cần hỗ trợ kỹ thuật chuyên sâu?
Khám phá các gói dịch vụ giúp bạn tối ưu công việc và vận hành hệ thống hiệu quả hơn. Từ chăm sóc website đến hỗ trợ kỹ thuật, mọi thứ đều linh hoạt và phù hợp với nhu cầu của bạn.