1 điểm bởi GN⁺ 2026-01-04 | 1 bình luận | Chia sẻ qua WhatsApp
  • Có thể thực hiện hiệu quả việc duyệt tệp, tìm kiếm, lọc, đánh dấu trang và chuyển đổi tùy chọn nhờ nhiều tính năng và tổ hợp phím tắt đa dạng của lệnh less
  • Có thể mở đồng thời nhiều tệp và di chuyển, thêm, xóa giữa các tệp bằng các lệnh :n, :p, :e, :d
  • Có thể nhanh chóng tìm hoặc loại trừ các mẫu cụ thể bằng chức năng tìm kiếm (/, ?, n, N) và lọc (&, &!)
  • Có thể đơn giản hóa việc di chuyển vị trí trong tài liệu dài hoặc tệp mã bằng đánh dấu trang (m, ') và tính năng khớp dấu ngoặc
  • Có thể điều chỉnh môi trường ngay lập tức mà không cần thoát less thông qua chuyển đổi tùy chọn khi đang chạy (-S, -R, -N v.v.) và thực thi lệnh ngoài (!)

Xử lý nhiều tệp

  • less không chỉ là công cụ dùng ở cuối pipeline mà còn có thể mở trực tiếp nhiều tệp làm đối số
    • Ví dụ: less file1 file2 file3
  • Ngay cả khi đang chạy, cũng có thể thêm tệp mới bằng lệnh :e file.h
  • Có thể dùng :n để tới tệp tiếp theo, :p để về tệp trước đó, :x hoặc :rewind để quay về tệp đầu tiên
  • Có thể dùng lệnh :d để loại bỏ tệp hiện tại khỏi danh sách

Tính năng điều hướng

  • Nhập số + G như 3141G để di chuyển tới số dòng cụ thể
  • Dùng số + % như 75% để nhảy tới vị trí phần trăm trong tệp
  • Dùng /mẫu để tìm kiếm xuôi, ?mẫu để tìm kiếm ngược, và n/N để chuyển tới kết quả tiếp theo/trước đó
    • !mẫutìm dòng không khớp, *tìm kiếm qua nhiều tệp, @bắt đầu tìm từ tệp đầu tiên, @*tìm toàn bộ trên tất cả các tệp

Tính năng lọc

  • Dùng &mẫu để chỉ hiển thị các dòng khớp với mẫu đó, hoạt động như grep nội bộ
  • Dùng &!mẫu để chỉ hiển thị các dòng không khớp với mẫu, hữu ích khi duyệt tệp log

Đánh dấu trang và khớp dấu ngoặc

  • Dùng m + ký tự để đặt dấu trang, dùng ' + ký tự để di chuyển tới vị trí đó
    • Ví dụ: dùng mo để đánh dấu phần OPTIONS, me để đánh dấu phần EXAMPLES, sau đó dùng 'o, 'e để di chuyển
  • Nếu dấu ngoặc như (, [, { nằm ở dòng đầu tiên trên màn hình, thì nhập dấu ngoặc đó sẽ nhảy tới dấu ngoặc cặp tương ứng
    • Ngược lại, nếu dấu ngoặc đóng nằm ở dòng cuối cùng thì sẽ di chuyển tới dấu ngoặc mở
  • Có thể chỉ định cặp dấu ngoặc tùy chỉnh bằng alt+ctrl+b v.v.

Chuyển đổi tùy chọn và thực thi lệnh ngoài

  • Trong khi chạy, có thể nhập tùy chọn sau - để thay đổi thiết lập ngay lập tức
    • -S: bật/tắt xuống dòng
    • -G: tô sáng tìm kiếm
    • -i/-I: thiết lập phân biệt chữ hoa/thường
    • -R: hiển thị màu ANSI
    • -N/-n: hiện/ẩn số dòng
  • Có thể thực thi lệnh ngoài bằng lệnh ! (!date, !bc v.v.)

Biến môi trường và các tính năng khác

  • Có thể lưu các tùy chọn hay dùng vào biến môi trường $LESS
    • Ví dụ: LESS="-RNe" → hiển thị màu, hiện số dòng, tự động thoát ở cuối tệp
  • Có thể dùng lệnh v để mở tệp hiện tại bằng trình soạn thảo $VISUAL
  • Có thể dùng lệnh o hoặc O để lưu nội dung đã đọc từ đầu vào chuẩn vào tệp
  • less hỗ trợ chức năng nhảy theo tag dựa trên ctags, nhưng ít được sử dụng

1 bình luận

 
GN⁺ 2026-01-04
Ý kiến trên Hacker News
  • Khá bất ngờ là lại bỏ sót tính năng follow. Lúc đầu nó hơi mang cảm giác UX kỳ quặc, nhưng khi quen rồi thì nhiều trường hợp nó còn tốt hơn tail
    Chạy bằng less +F thì nó sẽ theo dõi và hiển thị luồng đầu vào hoặc tệp theo thời gian thực. Nhấn <C-c> để dừng follow và điều hướng như less bình thường, rồi nhấn lại F (chữ hoa) để tiếp tục follow

    • Khi follow đầu vào từ pipe (kubectl logs | less +F), nếu nhấn <C-c> thì toàn bộ tiến trình pipe sẽ kết thúc, nên sẽ không thể nhấn F để tiếp tục follow nữa. less có lựa chọn thay thế là dùng <C-x> để dừng follow, nhưng đa số shell sẽ chặn tổ hợp phím này
    • Trong tail, bạn có thể nhấn Enter để thêm một dòng trống dưới dòng cuối cùng. Vì tiện để phân tách kết quả của nhiều lần chạy nên riêng tính năng này vẫn khiến tôi dùng tail
    • Thay vì nói là “hơi kỳ quặc”, tôi nghĩ phải gọi là UX tệ. Đâu cần bắt người dùng chuyển mode; cứ có dữ liệu mới thì tự động cập nhật là được
    • Sẽ hay hơn nếu có một mode vừa tự động thêm đầu ra mới vừa cho phép điều hướng cùng lúc. Có lẽ chỉ cần một nút bật/tắt tự động cuộn như terminal là đủ
    • Trước đây tôi cứ nghĩ “follow” là một tính năng phức tạp liên quan đến cách xử lý đặc biệt với file descriptor, nhưng thực ra nó chỉ là tiếp tục polling sau EOF. Nói cách khác, giữa việc mở tệp bình thường và mode follow không có khác biệt bản chất nào, nên phần mềm hoàn toàn có thể chuyển đổi dễ dàng
  • Tùy chọn -X hoặc --no-init sẽ giúp không xóa màn hình khi thoát. Tôi thường thích giữ nguyên màn hình để có thể tham khảo nội dung trước đó hoặc copy-paste

    • Nếu chỉ thỉnh thoảng mới muốn dùng hành vi của -X, có thể tham khảo mẹo trong thread này
    • Dùng cùng -E thì sẽ thoát ngay nếu đầu ra nhỏ hơn kích thước terminal. Tôi hay dùng tổ hợp tùy chọn “less -SEXIER”. Cũng dễ nhớ nữa
  • Khi debug log dài, tôi dùng & để chỉ lọc những phần muốn đọc và &! để loại trừ những phần không cần. Nó cũng hỗ trợ biểu thức chính quy. Đôi khi chậm, nhưng rất hữu ích khi cần lọc ngay tại chỗ

  • Có hai mẹo hữu ích
    Tùy chọn -L sẽ bỏ qua bước tiền xử lý tệp đầu vào, nhờ đó tránh việc các tệp log quay vòng có tên như logfile.1, logfile.2 bị xử lý nhầm bằng nroff
    Ngoài ra, khi tìm kiếm, nếu nhập Ctrl-R làm ký tự đầu tiên thì có thể tìm theo chuỗi literal thay vì regex

  • Có thể cấu hình key binding bằng tệp ~/.lesskey. Tôi bind s để cuộn ngược, nhờ đó có thể page up/down nhanh bằng một tay với ds
    less mặc định trên macOS không có tính năng này nên phải cài qua Homebrew (ví dụ cấu hình, giải thích liên quan)

    • Tôi cũng bind N thành next-file. Việc macOS không có lesskey thực sự rất khó chịu
  • man trên OpenBSD truyền tag cho less, nên có thể nhảy thẳng tới một mục cụ thể bằng cú pháp như :t test. Đây là một tính năng thú vị, nhưng thực tế tôi hầu như không dùng.
    Chỉ cần tìm bằng / với một giao diện nhất quán là trực quan hơn nhiều.
    Nhân tiện, họ BSD dùng bộ macro mdoc để tạo tài liệu dựa trên ngữ nghĩa, và OpenBSD dùng chương trình mandoc để render chúng (tài liệu mdoc)

  • Có thể cấu hình để dùng ^q thoát less mà không xóa màn hình, còn q bình thường thì vẫn thoát và xóa màn hình như cũ

    echo '^q toggle-option -redraw-screen\nq' >> ~/.config/lesskey
    

    Cần chạy less mà không có -X, và điều này đặc biệt hữu ích khi cần tham chiếu đầu ra trước đó như với git log

  • less cũng có tính năng pipe sang lệnh bên ngoài.
    Ví dụ, dùng ma để đặt dấu mốc rồi |a để gửi nội dung từ vị trí hiện tại tới dấu mốc đó sang lệnh ngoài.
    Rất hữu ích khi muốn lưu một phần tin tức hoặc email.
    Ngoài ra, có thể dùng tùy chọn -j để chỉnh kết quả tìm kiếm sẽ hiển thị cách mép trên màn hình bao nhiêu dòng

    • Tôi cũng tận dụng tính năng pipe này với git log. Sau khi chọn commit, tôi dùng phím tắt để chạy git show hoặc trực tiếp thực hiện thao tác fixup.
      Tôi dùng debug trap của bashkeyd-application-mapper để phát hiện lệnh hiện đang chạy, rồi trích xuất hash của commit đó để xử lý bằng script
  • Regex engine của less(1) quá chậm. Khi làm việc với tệp lớn, tôi thường tìm bằng grep hoặc ripgrep trước rồi chuyển kết quả đó sang less để xem

  • Có thể dùng phím s để lưu dữ liệu từ pipe vào tệp. Tiện hơn copy-paste rất nhiều

    • Tôi cũng dùng tính năng này thường xuyên. Tôi xem đầu ra của các tiến trình chạy lâu bằng less, và chỉ khi kết quả hữu ích thì mới lưu bằng s.
      Có thể dùng tee, nhưng cách đó lúc nào cũng để lại tệp, nên trong những trường hợp không cần thì khá lãng phí