bat là gì? Lệnh thay thế cat với tô màu cú pháp

bat là công cụ command line thay thế lệnh cat trên Linux và macOS, bổ sung tô màu cú pháp, tích hợp Git và hiển thị ký tự không in được. Với lập trình viên, chỉ một lệnh như bat main.rs giúp đọc code nhanh hơn nhiều so với cat thuần, đặc biệt khi file có hàng trăm dòng. Bài viết này hướng dẫn cài đặt, các tuỳ chọn thực dụng và cách tùy biến bat để nó thay thế hoàn toàn cat trong terminal của bạn.

Ảnh chụp bat hiển thị file mã nguồn với tô màu cú pháp và số dòng ở cột bên trái

bat là gì?

bat là một bản sao (clone) của lệnh cat(1) được viết bằng Rust, nổi tiếng với câu mô tả ngắn gọn trong dự án: “a cat clone with syntax highlighting and Git integration”. Dùng lệnh giống cat nên việc chuyển đổi gần như không tốn công sức, nhưng đầu ra lại giàu thông tin hơn nhiều.

Ba tính năng nổi bật nhất của bat:

  • Tô màu cú pháp cho hơn 200 ngôn ngữ lập trình và markup, tự nhận diện theo phần mở rội file.
  • Tích hợp Git, hiển thị thay đổi so với index bằng thanh bên trái và làm nổi bật dòng đã thêm hoặc sửa.
  • Hiện ký tự không in được với tùy chọn -A, giúp phát hiện khoảng trắng thừa, ký tự CRLF ẩn trong file văn bản.
Ảnh bat tích hợp Git hiển thị thanh thay đổi so với index bên trái từng dòng

Cài đặt bat trên Linux và macOS

Cách phổ biến nhất là dùng trình quản lý gói của hệ điều hành:

Hệ điều hành Lệnh cài đặt
Debian / Ubuntu sudo apt install bat
Fedora / RHEL sudo dnf install bat
Arch Linux sudo pacman -S bat
macOS (Homebrew) brew install bat

Trên Ubuntu và Debian, tên gói có thể là bat hoặc batcat tuỳ phiên bản. Nếu chạy bat báo lệnh không tồn tại, hãy thử batcat và tạo alias cho ngắn gọn.

Cài từ kho nguồn trực tiếp cũng rất đơn giản nhờ chỉ cần Rust:

cargo install bat

Cách dùng cơ bản

Cú pháp gần như giống hệt cat, nên chuyển sang bat không cần học lại:

bat README.md              # xem một file
bat src/ config.toml       # xem nhiều file, bat tự thêm đường dẫn
bat --style=numbers,grid   # thêm số dòng và khung
bat --language=rust main.rs # chỉ định thủ công ngôn ngữ
bat -p app.py              # in ra, không dùng trình phân trang

Khác biệt quan trọng so với cat: khi bat nhận ra output được chuyển qua pipe tới lệnh khác hoặc ghi ra file, nó tự động in nội dung thuần và tắt màu. Nhờ vậy bạn có thể an toàn thay cat trong script mà không sợ dính mã màu ANSI vào kết quả.

Ảnh bat dùng tùy chọn --show-all để tô sáng ký tự không in được như tab và khoảng trắng cuối dòng

Các tùy chọn hay dùng

  • --style=<thành phần>: quy định hiển thị. Ví dụ --style=plain chỉ giữ tô màu, bỏ khung và số dòng; --style=full dùng cho --diff.
  • -A hoặc --show-all: hiện tab, khoảng trắng cuối dòng, ký tự điều khiển.
  • -r hoặc --line-range: giới hạn khoảng dòng, ví dụ bat -r 100:150 main.rs.
  • -H hoặc --highlight: tô sáng từ khoá tìm kiếm trong file, cực hữu ích khi grep trong log dài.
  • --diff: dùng bat diff file1 file2 để xem khác biệt có màu.
  • -n hoặc --number: hiển thị số dòng trong mọi ngữ cảnh, kể cả khi pipe.
  • --map: xem toàn bộ ngôn ngữ bat nhận diện được.

Tùy biến bat bằng file cấu hình

bat đọc cấu hình từ $XDG_CONFIG_HOME/bat/config, mặc định là ~/.config/bat/config. Tạo file này nếu chưa có:

mkdir -p ~/.config/bat
touch ~/.config/bat/config

Sau đó thêm các dòng tuỳ chọn, ví dụ bỏ số dòng và bật đường kẻ:

--style=numbers,grid
--italic-text=always
--paging=always
--wrap=never
--tab-width=4
--theme="TwoDark"

Bạn cũng có thể xem các giao diện có sẵn bằng lệnh bat --list-themes, rồi thử nhanh bằng bat --theme=Dracula README.md trước khi ghi vào cấu hình.

Thay cat bằng bat trong terminal

Nhiều người dùng đặt alias để gõ quen tay. Cách này giữ nguyên hành vi cũ, nhưng bạn sẽ mất tô màu khi lệnh chạy trong môi trường không tương tác, nên cần chỉ định rõ chế độ phân trang:

# ~/.bashrc hoặc ~/.zshrc
alias cat='bat --paging=never'

Nếu bạn thích màu sắc hơn, có thể đặt --paging=auto để bat chỉ bật trình phân trang khi output dài hơn một màn hình. Với người dùng zsh có plugin oh-my-zsh, bạn có thể bật tự động qua plugin bat tích hợp sẵn.

bat kết hợp với ripgrep và fzf

Sức mạnh lớn nhất của bat đến từ việc ghép với các công cụ khác. Một ví dụ kinh điển: xem trước nội dung file ngay trong bộ lọc tương tác.

# xem trước file đang chọn trong fzf
fzf --preview 'bat --color=always --style=numbers,grid --line-range=:500 {}'

# tô sáng từ khoá sau khi grep
grep -rn "unwrap" src/ | fzf --preview 'bat --color=always -H {2} {1}'

Mẹo khác: dùng bat --number khi muốn lấy số dòng để nhảy tới editor, hoặc dùng bat -l rust khi file không có đuôi mở rộng đúng để bat không nhận diện được ngôn ngữ.

So sánh nhanh các lệnh xem file

Lệnh Tô màu Tích hợp Git Dùng được trong script
cat Không Không Có
bat Có Có Có, tự tắt màu khi pipe
less Có, tuỳ thiết lập Không Không phù hợp
most Có Không Không phù hợp

Lỗi thường gặp và cách xử lý

  • Không thấy màu: bat tự tắt màu khi output không phải terminal. Dùng --color=always khi pipe vào fzf, hoặc đặt --color=always trong config nếu muốn ép.
  • Không hiện thay đổi Git: bat chỉ so sánh với index khi chạy bên trong thư mục làm việc Git và file đã được track. File mới hoàn toàn sẽ không có dấu hiệu nào.
  • Lỗi font khi xem gạch dọc: một số font monospace không có ký tự vẽ đường kẻ. Chuyển sang --style=numbers hoặc dùng font hỗ trợ như JetBrains Mono, Fira Code.
  • Không nhận diện ngôn ngữ: kiểm tra bằng bat --map, sau đó chỉ định thủ công với -l.

bat là một ví dụ điển hình của việc thay thế công cụ cũ bằng bản hiện đại hơn mà không phá vỡ giao diện sử dụng: lệnh giống hệt cat, nhưng đầu ra có giá trị hơn nhiều. Dự án mã nguồn mở được phát triển tại kho sharkdp/bat trên GitHub, nếu bạn cần thêm công cụ tương tự cho quản lý file hãy xem bài viết về Neovim — trình soạn thảo cũng đi theo hướng cải tiến tương tự.

Nguồn tham khảo: tài liệu chính thức và các tùy chọn đầy đủ trong README của sharkdp/bat, kho gói tại crates.io.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Tối ưu pin iPhone: Cách giảm hao pin hiệu quả nhất

Điện thoại hết pin giữa chừng buổi sáng và bạn phải cắm sạc mỗi ngày là dấu hiệu cho thấy việc tối ưu pin iPhone của bạn chưa thực sự…

Xem thêm

Nginx là gì: Reverse proxy và load balancer phổ biến nhất

Nginx (đọc là “engine-x”) là một máy chủ web mã nguồn mở, reverse proxy và load balancer phổ biến nhất thế giới. Nhờ kiến trúc bất đồng bộ dựa trên…

Xem thêm
Sơ đồ trình tự Authorization Code Grant của OAuth 2.0 từ chủ tài nguyên tới truy cập API

OAuth 2.0 là gì: Chuẩn ủy quyền và bảo vệ API

OAuth 2.0 là gì và tại sao mọi ứng dụng hiện đại đều phụ thuộc vào nó? Nếu bạn đăng nhập Google, Facebook hay GitHub bằng tài khoản sẵn có,…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất