Menulis definisi syntax sendiri di nanorc: memahami struktur blok syntax, direktif color, keyword, header dan comment rules, memilih warna yang tepat, serta membuat highlighting untuk format internal atau bahasa khusus yang tidak didukung nano bawaan

Setelah di episode 9 kalian memakai syntax bawaan dan di episode 20 mengonfigurasi linter per bahasa, episode ini menutup segitiga kustomisasi: menulis definisi syntax sendiri. Banyak organisasi punya format internal — file config proprietary, log format khusus, atau DSL sederhana — yang tidak punya highlighting di /usr/share/nano/. Di sinilah kemampuan menulis syntax dan color sendiri membayar.
Mengapa ini penting? Highlighting yang tepat membuat membaca file cepat; file tanpa highlighting membuat setiap error tersembunyi di lautan teks polos. Dan karena definisi syntax adalah regex murni (bukan parser), menulisnya lebih sederhana daripada yang kalian kira.
Sebuah blok syntax terdiri dari beberapa bagian:
syntax "ini" "\.ini$" "\.conf$"
header "^\[.*\]$"
color green "^\s*\[.*\]$"
color yellow "^\s*[A-Za-z_][A-Za-z0-9_]*\s*="
color red "\s+.*$"| Bagian | Fungsi |
|---|---|
syntax "nama" "pola..." | Nama syntax + pola nama file yang cocok |
header "regex" | Deteksi dari isi baris pertama (shebang dll) |
color Warna "regex" | Aturan pewarnaan |
icolor Warna "regex" | Sama, tapi case-insensitive |
comment "string" | Penanda komentar untuk justify |
Seperti episode 9, deteksi berjalan dua tingkat: nama file (dari pola syntax) lalu isi baris pertama (dari header). Contoh untuk script Python tanpa ekstensi:
syntax "py" "\.py$"
header "^#!.*python"File bernama deploy dengan baris pertama #!/usr/bin/env python otomatis dapat syntax py — meski tanpa ekstensi.
Inti pewarnaan adalah direktif color. Mari bangun syntax untuk format .env:
syntax "dotenv" "\.env(\.\w+)?$"
color brightcyan "^\s*[A-Za-z_][A-Za-z0-9_]*=" # nama variabel
color yellow "\"[^\"]*\"|'[^']*'" # nilai berkutip
color green "^\s*#.*$" # komentarprintf 'HOST=10.0.0.1\nUSER="admin"\n# kredensial\nPORT=3306\n' > ~/nano-lab/config.env
nano -Y dotenv ~/nano-lab/config.env| Warna | Elemen |
|---|---|
brightcyan | Nama variabel (HOST=) |
yellow | Nilai berkutip ("admin") |
green | Komentar (# ...) |
Tip
Warna tersedia: black, red, green, yellow, blue, magenta, cyan, white, plus prefix bright (terang) dan kata kunci normal untuk teks default. Gabungkan dua warna dengan koma color brightred,bold "..." untuk efek bold. Uji kontrasnya di tema terminal terang dan gelap.
Menyorot kata kunci spesifik lebih mudah dengan trik \b dan alternasi:
syntax "mysyntax" "\.xyz$"
color red "\b(error|fatal|critical)\b"
color yellow "\b(warn|warning)\b"
color green "\b(ok|success|passed)\b"Pola \b...\b memastikan error tidak cocok dengan errorhandling. Ini cara paling umum menyorot kata kunci tanpa tabel terpisah.
Untuk menyorot wilayah yang berpasangan (misalnya blok BEGIN/END atau [ ]), pakai start= dan end=:
syntax "block" "\.blk$"
color yellow start="\[" end="\]"
color red start="BEGIN" end="END"Syntax start=... end=... mewarnai seluruh wilayah di antara keduanya — berguna untuk format seperti systemd units atau file dengan section.
Definisi syntax bukan cuma warna — ia juga tempat mendaftarkan tool (melanjutkan episode 20):
syntax "dotenv" "\.env(\.\w+)?$"
color brightcyan "^\s*[A-Za-z_][A-Za-z0-9_]*="
color yellow "\"[^\"]*\"|'[^']*'"
color green "^\s*#.*$"
linter "dotenv-linter"Setelah ini, ^T ^Y di file .env langsung menjalankan dotenv-linter.
Warning
Regex di nano adalah POSIX extended. Karakter seperti (, ), [, { perlu di-escape (\(). Uji regex dengan grep -E atau rg sebelum menaruhnya di nanorc, dan ingat urutan aturan color — aturan yang lebih spesifik harus ditulis lebih dulu agar tidak tertutup aturan umum.
Agar ~/.nanorc tidak menggumpal, simpan setiap syntax di file sendiri lalu include:
mkdir -p ~/.config/nano/syntax
nano ~/.config/nano/syntax/dotenv.nanorcinclude ~/.config/nano/*.nanorcSekarang setiap file .nanorc di direktori itu otomatis dimuat — struktur yang sama dengan /usr/share/nano/.
Pada episode 22 ini, kalian telah menulis definisi syntax sendiri untuk format internal.
Inti yang harus dibawa pulang:
syntax "nama" "pola" + header untuk deteksi otomatis.color warna "regex" untuk aturan pewarnaan; icolor versi case-insensitive.\bkeyword\b menyorot kata kunci; start=... end=... untuk wilayah berpasangan.~/.config/nano/ dan include dari nanorc.Di episode 23 selanjutnya, kita akan membahas nano sebagai pager & stdin — membaca input dari pipe dengan nano -, menyaring dan mengedit output command, serta memahami penolakan nano 9.2 saat stdout bukan terminal. Nano tidak hanya editor, tapi juga filter interaktif!