Câu hỏi Nhận màu sắc ít hoặc nhiều hơn


Khi tôi đọc một tập tin trong Linux với lệnh less hoặc là more, làm thế nào tôi có thể lấy nội dung bằng màu sắc?


343
2018-03-09 10:44


gốc


Điều này có vẻ liên quan: superuser.com/questions/36022/less-and-grep-color - nó có giúp được không? - Jonik


Các câu trả lời:


Bạn có thể sử dụng sức mạnh của việc tự kỷ hóa với ít tự động hơn! (Không cần phải ống bằng tay.)

cài đặt, dựng lên pygments với người quản lý gói hoặc pip của bạn (có thể được gọi là python-pygments) hoặc tải nó ở đây http://pygments.org/download/.

Viết một tập tin ~/.lessfilter

#!/bin/sh
case "$1" in
    *.awk|*.groff|*.java|*.js|*.m4|*.php|*.pl|*.pm|*.pod|*.sh|\
    *.ad[asb]|*.asm|*.inc|*.[ch]|*.[ch]pp|*.[ch]xx|*.cc|*.hh|\
    *.lsp|*.l|*.pas|*.p|*.xml|*.xps|*.xsl|*.axp|*.ppd|*.pov|\
    *.diff|*.patch|*.py|*.rb|*.sql|*.ebuild|*.eclass)
        pygmentize -f 256 "$1";;
    .bashrc|.bash_aliases|.bash_environment)
        pygmentize -f 256 -l sh "$1"
        ;;
    *)
        grep "#\!/bin/bash" "$1" > /dev/null
        if [ "$?" -eq "0" ]; then
            pygmentize -f 256 -l sh "$1"
        else
            exit 1
        fi
esac

exit 0

Trong của bạn .bashrc thêm vào

export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'

Ngoài ra, bạn cần phải thực hiện ~/.lessfilter thực thi bằng cách chạy

chmod u+x ~/.lessfilter

Thử nghiệm trên Debian.

Ý tưởng đến từ một bài đăng blog cũ từ các nhà sản xuất Pygments, nhưng bài đăng gốc không tồn tại nữa.


126
2017-09-20 03:29



Nếu bạn muốn tô màu các tệp mã nguồn, bạn cũng cần phải thực hiện ~ / .lessfilter bằng cách chạy chmod u+x ~/.lessfilter. Bạn cũng cần phải có pygmentize (pygments.org/download) Cài đặt. - Sergiy Byelozyorov
Bất cứ ai có thể xác nhận rằng điều này hoạt động vì nó không có hiệu lực đối với tôi khi tôi thực hiện một lệnh như ls -l | less - puk
Bất kỳ ý tưởng làm thế nào để chuỗi này với lessopen.sh Vladimir Linek ?? nó được thiết lập với biểu mẫu này: LESSOPEN = "lessopen.sh% s" - Gregory
@puk bạn có thể làm một cái gì đó như ls --color=always -l | less -R. Rõ ràng là rất nhiều để gõ nhưng bạn có thể bí danh nó để một cái gì đó như ll. Đó là nếu bạn không muốn sử dụng bất kỳ thư viện bổ sung nào. - PhilT
thêm bình luận của @ SergiyByelozyorov vào câu trả lời. - andrybak


Hãy thử những điều sau đây:

less -R

từ man less:

-r hoặc là --raw-control-chars

Làm cho các ký tự điều khiển "thô" được hiển thị. (...)

-R hoặc là --RAW-CONTROL-CHARS

Như -r, nhưng chỉ có các chuỗi thoát "màu" ANSI là đầu ra ở dạng "thô". (...)


407
2018-03-09 10:48



Điều này rất hữu ích khi bản thân tệp chứa các mã thoát sẽ cần được hiển thị. - Nitrodist
Tôi đã từng biết ít -r nhưng tìm kiếm trong tập tin bằng cách sử dụng "/" giữ lại các dòng sai. -R dường như làm tốt hơn. Cảm ơn vì tiền hỗ trợ. - Amos Shapira
Cần lưu ý rằng hầu hết các chương trình sử dụng isatty(2) syscall để kiểm tra xem đầu ra tiêu chuẩn của họ là một thiết bị đầu cuối, và thường vô hiệu hóa đầu ra colorized nếu nó không phải là. Đối với bất kỳ đường ống nào ít hơn, isattysẽ trả về 0. Để kiểm tra xem điều này có hiệu quả không, hãy thử echo -e '\x1b[32;1mtest\x1b[m' | less -r - mic_e
Câu trả lời này không vượt trội trong thử nghiệm thực sự. - Michael Wolf
Bạn cũng có thể nhập -R khi bạn đã mở less để đạt được điều này. - Scz


Tôi nhận được câu trả lời trong một bài đăng khác: Ít hơn và Grep: Nhận kết quả màu khi sử dụng một đường ống từ grep đến ít hơn

Khi bạn chỉ cần chạy grep --color nó   ngụ ý grep --color=auto cái nào   phát hiện xem đầu ra có phải là   thiết bị đầu cuối và nếu như vậy cho phép màu sắc.   Tuy nhiên, khi nó phát hiện một đường ống nó   vô hiệu hóa màu. Sau đây   chỉ huy:

grep --color=always "search string" * | less -R

Sẽ luôn cho phép tô màu và   ghi đè phát hiện tự động và   bạn sẽ nhận được màu sắc nổi bật trong   ít hơn.

Cảnh báo: không đặt --color=always như một bí danh, đôi khi nó phá vỡ mọi thứ. Đó là lý do tại sao có --color=auto Tùy chọn.


116
2018-04-27 04:19



Nice, cảm ơn. Ngoại trừ việc tôi cần phải sử dụng -R như một tùy chọn để less, cũng. - naught101
tôi tin grep -R là để chỉ định tìm kiếm đệ quy. less -R là cần thiết cho less để nhổ màu một cách chính xác. grep --color=always [grep cmds] | less -R làm việc cho tôi trên OS X 10.7.3! - Steven Lu
@ naught101 @Steven Lu Đã chỉnh sửa, mặc dù có vẻ như một số người có thể không cần sử dụng less -R (theo tác giả của bài đăng gốc, dù sao). - jtpereyda
Có anyway để cho grep biết chỉ ống ít -R lệnh và sau đó chỉ cần làm màu? Vì vậy, chúng tôi không phải đặt --color = luôn luôn và ít -R tất cả các thời gian. - A-letubby
Đây là câu trả lời làm việc đơn giản nhất. Cảm ơn! - Danny Staple


Sử dụng view thay vì less. Nó mở tập tin với vim ở chế độ chỉ đọc.

Nó thực tế là một màu less: một máy nhắn tin nơi bạn có thể tìm kiếm / (và hơn thế nữa). Hạn chế duy nhất là bạn không thể thoát ra với q nhưng bạn cần :q

Ngoài ra, bạn sẽ có được màu giống như vim (vì bạn đang sử dụng thực tế vim).


30
2017-09-24 09:50



Làm thế nào về hiệu suất của các tập tin lớn? Vim cú pháp tô sáng được biết là chậm trên các tập tin lớn. - pihentagy
Tôi không biết giá trị của bạn cho 'lớn' là gì, nhưng mở một tập tin 10000 dòng ngay lập tức, tìm kiếm bên trong bao gồm. - Riccardo Galli
Tôi upvoted (Tôi không biết về view) nhưng một nhược điểm khác là j / k / up / down không lập tức di chuyển, vì có một con trỏ. - Tyler Collier
Lưu ý rằng bạn có thể cần phải thêm view - khi đường ống - user45909
vim là một trình soạn thảo, tải tệp hoàn chỉnh vào bộ nhớ, trong khi less là một máy nhắn tin, tải tập tin chỉ một phần vào bộ nhớ. Bạn sẽ biết sự khác biệt với các tệp lớn. - sjas


Sử dụng VIM làm cú pháp làm nổi bật máy nhắn tin.


13
2018-03-09 13:25



không có tôi yêu cầu nhiều hơn (hoặc ít hơn), không phải cho vim thanks anyway - flow
Rõ ràng cú pháp tô sáng không được xây dựng thành nhiều hơn hoặc ít hơn theo mặc định, do đó, workaround đang sử dụng một bí danh cho một trong các macro của VIM. Nó hoạt động nhiều hơn hoặc ít hơn như nhiều hơn hoặc ít hơn. :) - churnd
Nếu bạn thích sử dụng vim thay vì vim mô phỏng ít hơn bạn chỉ có thể làm ... | vim - để đọc từ stdin, hoặc ... | vim -R - cho chỉ đọc (để tránh "Không viết kể từ lần thay đổi cuối cùng" khi bỏ). Bí danh để sử dụng nhanh: alias r='vim -R -' sau đó ... | r - bain


pygmentize hỗ trợ -g tùy chọn để tự động đoán lexer được sử dụng mà hữu ích cho các tập tin đọc từ STDIN mà không kiểm tra bất kỳ loại tiện ích mở rộng nào.

Bằng cách đó, bạn chỉ cần đặt 2 lần xuất sau trong .bashrc không có bất kỳ tập lệnh bổ sung nào:

export LESS='-R'
export LESSOPEN='|pygmentize -g %s'

12
2018-03-12 07:17



Ngắn gọn và hiệu quả. Tôi thích xác định một bí danh, bởi vì đôi khi ít hơn là tốt hơn. Vì vậy: bí danh lesc = 'LESS = "- R" LESSOPEN = "| pygmentize -g% s" ít hơn " - Tiago


Bạn không nói ý nghĩa của màu này, ví dụ: những màu sắc nên cho một tập tin văn bản là gì?

Nếu những gì bạn muốn là làm nổi bật cú pháp cho mã nguồn, bạn cần một công cụ đánh dấu mã nguồn. Đôi khi tôi sử dụng làm cho phép như thế này

pygmentize file.cpp | less

hoặc là

pygmentize file.cpp | more

Có những điểm nổi bật khác xung quanh.

Điều này khá nhanh. Nếu bạn không nhớ bắn lên vim có chế độ chỉ đọc có thể cung cấp cho bạn đánh dấu cú pháp nếu bạn có vim.

view file.cpp

hoặc cách khác là xem câu trả lời của churnd.


9
2018-03-09 13:30





Để cho biết ít hơn để hiển thị màu, hãy gọi nó bằng -R:

less -R

Rất tiếc, một số chương trình phát hiện ra rằng thiết bị xuất chuẩn của chúng không phải là thiết bị đầu cuối và màu sắc vô hiệu - ví dụ: pacman (Trình quản lý gói của Arch Linux).

Trong những trường hợp đó, nó có thể sử dụng unbuffer:

unbuffer <command> | less -R

Ví dụ sử dụng pacman

unbuffer pacman -Ss firefox | less -R

Các unbuffer lệnh thường là một phần của expect-dev(Debian / Ubuntu) hoặc expect (Arch Linux) gói.

Để trả lời câu hỏi để hoàn thành:

Như những người khác đã trả lời, pygmentize thật tuyệt vời để tạo màu cho mã nguồn. Nó không yêu cầu unbuffer. Cuộc gọi dễ nhất:

pygmentize someSource.cpp | less -R

8
2017-10-08 10:37





Sử dụng GNU Source-highlight; bạn có thể cài đặt nó với apt nếu bạn có, hoặc cài đặt nó từ nguồn. Sau đó, thiết lập một "bộ tiền xử lý đầu vào" cho ít hơn, với sự trợ giúp từ các tài liệu nguồn-highligh 'cho thiết lập với ít hơn:

Điều này đã được đề xuất bởi Konstantine Serebriany. Tập lệnh src-hilite-lesspipe.sh sẽ được cài đặt cùng với đánh dấu nguồn. Bạn có thể sử dụng các biến môi trường sau:

 export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
 export LESS=' -R '

Bằng cách này, khi bạn sử dụng ít hơn để duyệt một tệp, nếu đó là tệp nguồn được xử lý bởi nguồn đánh dấu, nó sẽ tự động được đánh dấu.

Xavier-Emmanuel Vincent gần đây đã cung cấp một phiên bản thay thế của bảng màu ANSI, esc256.style: một số thiết bị đầu cuối có thể xử lý 256 màu. Xavier cũng cung cấp một kịch bản kiểm tra số lượng màu mà thiết bị đầu cuối của bạn có thể xử lý và trong trường hợp, sử dụng biến thể 256. Kịch bản được gọi là source-highlight-esc.sh và nó sẽ được cài đặt cùng với các tệp nhị phân khác.


3
2018-05-25 19:52





Để mở rộng khi có câu trả lời khác, bạn có thể làm cho nó hoạt động tốt nhất nếu không phải tất cả các tập lệnh của bạn không có phần mở rộng bằng cách thay đổi tệp .lessfilter xung quanh chỉ một chút:

#!/bin/sh
    case "$1" in
    *.awk|*.groff|*.java|*.js|*.m4|*.php|*.pl|*.pm|*.pod|*.sh|\
    *.ad[asb]|*.asm|*.inc|*.[ch]|*.[ch]pp|*.[ch]xx|*.cc|*.hh|\
    *.lsp|*.l|*.pas|*.p|*.xml|*.xps|*.xsl|*.axp|*.ppd|*.pov|\
    *.diff|*.patch|*.py|*.rb|*.sql|*.ebuild|*.eclass)
        pygmentize -f 256 "$1";;
    .bashrc|.bash_aliases|.bash_environment)
        pygmentize -f 256 -l sh "$1"
        ;;
    *)
        scriptExec=$(head -1 "$1" |grep "^#\!" |awk -F" " '{print $1}')
        scriptExecStatus=$?
        if [ "$scriptExecStatus" -eq "0" ]; then
            lexer=$(echo $scriptExec |awk -F/ '{print $NF}')
            pygmentize -f 256 -l $lexer "$1"
        else
            exit 1
        fi
esac

exit 0

Bạn vẫn cần phải thêm hai biến vào .bashrc:

export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'

Và bạn vẫn sẽ cần phải thực hiện .lessfilter executable:

$ chmod 700 ~/.lessfilter

Ngoài ra tôi muốn thêm rằng theo debian gói pygments được gọi là python-pygments. Tôi đã gặp khó khăn trong việc định vị nó lúc đầu bởi vì lỗi chính tả rõ ràng của "sắc tố" như "pygments" không đủ gợi ý cho tôi rằng đó là một gói có thể được tiền tố "python" bởi trình quản lý gói.


3
2018-02-27 22:45



2 ý kiến: 1) Cảm ơn sự cải thiện. 2) Các cụm từ như "câu trả lời hay nhất được bình chọn" không tuyệt vời; có thể thay đổi (trên thực tế, nếu điều này tốt hơn câu trả lời đó, điều này bài đăng có thể trở thành câu trả lời hàng đầu, tại thời điểm đó nó sẽ chỉ gây nhầm lẫn. Có lẽ chỉ cần nói "để mở rộng khi câu trả lời khác" hoặc "câu trả lời của captaincomic"? - cpast