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.
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/nanolrwxr-xr-x 1 root wheel 4 Apr 12 14:16 /usr/bin/nano -> picoQuan 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 nano3. Cấu hình cho nano
Tạo file ~/.nanorc:
touch ~/.nanorcMở 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ẵninclude /usr/local/share/nano/*.nanorc
# Hiển thị số dòngset linenumbersKiể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.nanorcautoconf.nanorc groff.nanorc nanorc.nanorc sh.nanorcawk.nanorc guile.nanorc nftables.nanorc sql.nanorcc.nanorc html.nanorc objc.nanorc tcl.nanorcchangelog.nanorc java.nanorc ocaml.nanorc tex.nanorccmake.nanorc javascript.nanorc patch.nanorc texinfo.nanorccss.nanorc json.nanorc perl.nanorc xml.nanorcdefault.nanorc lua.nanorc php.nanorc yaml.nanorcelisp.nanorc makefile.nanorc po.nanorcemail.nanorc man.nanorc python.nanorcextra markdown.nanorc ruby.nanorcĐể 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 ~/.nanoBộ đị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.nanorcDockerfile.nanorc genie.nanorc makefile.nanorc sed.nanorcRnw.nanorc gentoo.nanorc man.nanorc sh.nanorcapacheconf.nanorc git.nanorc markdown.nanorc sieve.nanorcarduino.nanorc gitcommit.nanorc moonscript.nanorc sls.nanorcasciidoc.nanorc glsl.nanorc mpdconf.nanorc solidity.nanorcasm.nanorc go.nanorc mutt.nanorc sparql.nanorcawk.nanorc godot.nanorc nanorc sql.nanorcbatch.nanorc gophermap.nanorc nanorc.nanorc subrip.nanorcbeancount.nanorc gradle.nanorc nginx.nanorc svn.nanorcbrainfuck.nanorc groff.nanorc nmap.nanorc swift.nanorcc.nanorc haml.nanorc ocaml.nanorc systemd.nanorcclojure.nanorc haskell.nanorc octave.nanorc tcl.nanorccmake.nanorc hcl.nanorc patch.nanorc tex.nanorccoffeescript.nanorc html.j2.nanorc peg.nanorc toml.nanorccolortest.nanorc html.nanorc perl.nanorc toolconf.nanorc i3.nanorc perl6.nanorc ts.nanorcconky.nanorc ical.nanorc php.nanorc twig.nanorccreole.nanorc ini.nanorc pkg-config.nanorc v.nanorccsh.nanorc inputrc.nanorc pkgbuild.nanorc vala.nanorccsharp.nanorc install.sh po.nanorc verilog.nanorccss.nanorc jade.nanorc pov.nanorc vhdl.nanorccsv.nanorc java.nanorc powershell.nanorc vi.nanorccython.nanorc jrnl.nanorc privoxy.nanorc x11basic.nanorcd.nanorc js.nanorc prolog.nanorc xml.nanorcdot.nanorc json.nanorc properties.nanorc xresources.nanorcdotenv.nanorc jsx.nanorc pug.nanorc yaml.nanorcelixir.nanorc julia.nanorc puppet.nanorc yum.nanorcemail.nanorc keymap.nanorc python.nanorc zeek.nanorcerb.nanorc kickstart.nanorc reST.nanorc zig.nanorcetc-hosts.nanorc kotlin.nanorc readme.md zsh.nanorcexpect.nanorc ledger.nanorc rego.nanorc zshrc.nanorcfish.nanorc license rpmspec.nanorcfortran.nanorc lisp.nanorc ruby.nanorcfsharp.nanorc lua.nanorc rust.nanorcChỉ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ẵninclude "~/.nano/*.nanorc
# Hiển thị số dòngset linenumbers5. 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.nanorcNhập vào nội dung sau và lưu lại
syntax "caddyfile" "Caddyfile$"magic "Caddyfile configuration"
# Commentscolor 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 quotescolor brightwhite "\"[^\"]*\""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!