- 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ẫu là tìm dòng không khớp, * là tìm kiếm qua nhiều tệp, @ là bắt đầu tìm từ tệp đầu tiên, @* là 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
Ý 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ơntailChạy bằng
less +Fthì 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ưlessbình thường, rồi nhấn lạiF(chữ hoa) để tiếp tục followkubectl 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ấnFđể tiếp tục follow nữa.lesscó 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àytail, 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ùngtailTùy chọn
-Xhoặc--no-initsẽ 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-X, có thể tham khảo mẹo trong thread này-Ethì 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ữaKhi 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
-Lsẽ 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.2bị xử lý nhầm bằngnroffNgoài ra, khi tìm kiếm, nếu nhập
Ctrl-Rlàm ký tự đầu tiên thì có thể tìm theo chuỗi literal thay vì regexCó thể cấu hình key binding bằng tệp
~/.lesskey. Tôi bindsđể cuộn ngược, nhờ đó có thể page up/down nhanh bằng một tay vớidvàslessmặ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)Nthành next-file. Việc macOS không có lesskey thực sự rất khó chịumantrên OpenBSD truyền tag choless, 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ìnhmandocđể render chúng (tài liệu mdoc)Có thể cấu hình để dùng
^qthoátlessmà không xóa màn hình, cònqbình thường thì vẫn thoát và xóa màn hình như cũCần chạy
lessmà 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ớigit loglesscũ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ònggit log. Sau khi chọn commit, tôi dùng phím tắt để chạygit showhoặc trực tiếp thực hiện thao tác fixup.Tôi dùng debug trap của
bashvàkeyd-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 scriptRegex 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ằnggrephoặcripgreptrước rồi chuyển kết quả đó sanglessđể xemCó 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ềuless, và chỉ khi kết quả hữu ích thì mới lưu bằngs.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í