2012-11-15 25 views
5

Tôi có một chương trình dòng lệnh nhổ JSON và YAML. Theo mặc định nó phát hiện nếu pygments (pygmentize) có sẵn và nếu có, vượt qua đầu ra thông qua nó để có được một đầu ra được tô màu tốt đẹp. Tuy nhiên, pygments không được cài đặt theo mặc định trên hầu hết các máy tính mà chương trình này sẽ chạy. Nhưng hầu hết các máy tính sẽ có hoặc emacs hoặc vim, tuy nhiên, không. Có cách nào để có được một trong những biên tập viên để cú pháp làm nổi bật một số văn bản bằng cách sử dụng trình tự thoát ANSI và sau đó đầu ra nó một lần nữa?Sử dụng công cụ đánh dấu cú pháp của emacs 'hoặc vim cho chương trình dòng lệnh?

+0

BTW, tôi vừa phát hiện ra về coderay. Nó dựa trên ruby ​​và chương trình dòng lệnh của nó nhanh hơn nhiều so với pygmentize. –

+1

Một tùy chọn khác sẽ là [Làm nổi bật nguồn GNU] (http://www.gnu.org/software/src-highlite/source-highlight.html). Tôi sử dụng điều này để có được màu sắc với [ít hơn] (http://superuser.com/a/71593/79870). –

+0

@RandyMorris: yup, thậm chí có một mô-đun CPAN cho nó (chương trình của tôi là dựa trên Perl). Vấn đề duy nhất là sự phụ thuộc là khá lớn (cài đặt mã nguồn nổi bật và các thư viện dev của nó để xây dựng mô-đun CPAN kéo khoảng 100MB gói Debian). –

Trả lời

1

Emacs bao gồm một hàm gọi là htmlfontify sẽ chuyển đổi bộ đệm được phông chữ thành HTML. Bạn có thể sử dụng chế độ này ở chế độ hàng loạt với một tập lệnh nhỏ gọn để hiển thị tệp dưới dạng HTML. Ví dụ:

emacs -q --batch --file myfile.rb --eval '(progn (require (quote htmlfontify)) (htmlfontify-buffer) (set-buffer-modified-p t) (save-buffer))' 
+0

Cảm ơn. Xin lỗi đã không làm cho nó rõ ràng, tôi cần nó trong trình tự thoát ANSI kể từ khi tôi outputting đến thiết bị đầu cuối. My EmacsLisp-fu bị hạn chế nghiêm trọng, nhưng bạn đã cho tôi một số gợi ý để chơi xung quanh. –

2

Giống như Emacs (cp. Ataylor's answer), Vim có thể hiển thị bộ đệm có cú pháp đầy đủ làm nổi bật HTML; xem :help 2html.vim. Bạn có thể tái sử dụng nhiều mã của plugin đi qua cú pháp của bộ đệm và thay đổi nó để hiển thị cho các chuỗi thoát ANSI, nhưng bạn phải thực hiện lại tất cả các logic dựng hình của chính mình.

Mặc dù có một số plugin sử dụng Vim làm máy nhắn tin, tôi không nghĩ rằng có thể chỉ cần sử dụng Vim để xuất bộ đệm bằng chuỗi ANSI thoát. Sau khi tất cả, Vim muốn giữ lại quyền kiểm soát của thiết bị đầu cuối, và xóa nó khi thoát.

Tôi khuyên bạn nên tìm một giải pháp chuyên dụng khác ngoài Vim, mặc dù điều đó có nghĩa là bạn cần phải cài đặt nó.

1

Nếu bạn không muốn làm theo lời khuyên @IngoKarkat và viết lại cắm tiêu chuẩn để hỗ trợ ANSI thoát chuỗi bạn có thể sử dụng formatvim Plugin của tôi, nó hỗ trợ render cho dãy thoát ANSI bằng cách sử dụng

Format format csi to /path/to/file 

. Ban đầu, plugin của tôi là viết lại tiêu chuẩn 2html nhằm hỗ trợ các định dạng khác nhau với việc bổ sung thêm một định dạng mới (tôi đã dành khoảng 30 phút để thêm hỗ trợ chuỗi ANSI, chủ yếu đọc kỹ các chuỗi này), nhưng mã hiện tại đã đi quá xa đề cập đến điểm tương đồng. Nó được biết là làm việc nhanh hơn cho các tệp lớn hoặc khi bạn sử dụng một thể hiện vim để hiển thị một số tệp (tức là khi giai đoạn khởi động ("biên dịch" và bộ đệm cache) được che dấu bởi lợi ích của việc chạy tiếp).

4

vì trình chỉnh sửa có thể đã thực hiện các công cụ ansi, khá dễ dàng để tạo ảnh chụp màn hình của trình chỉnh sửa, phải không?

script -qc "stty rows 10000 
emacs -nw -visit YOURFILE.YAML -eval '(redisplay t)' -f kill-emacs 
resize" 

(hiển thị lại chỉ cần thiết cho GNU Emacs FSF)

nay dọn dẹp chụp

perl -p0E 's/\A(?s:.*)\e\[27m\r\n 
\e\[A\n((?s).*?) 
(?:\e\[K\n)+ 
\e.*\e\[27m\r$(?s:.*)\Z/$1/mx' < typescript 

nếu bạn không muốn quá trình ghi âm có thể nhìn thấy trên màn hình, bạn có thể quấn nó trong một thiết bị đầu cuối bị ẩn với thứ gì đó như IO của perl :: Pty

+0

Bí quyết tuyệt vời! Một chút overkill cho vấn đề ở bàn tay mặc dù. Cảm ơn. –

4

Matthew Wozniski đã viết một tập lệnh có tên vimcat.sh thực hiện điều này với Vim. Phiên bản của anh ấy là https://github.com/godlygeek/vim-files/blob/master/macros/vimcat.sh. Tôi đã thực hiện một vài sửa đổi cho nó (nếu bộ nhớ phục vụ, các sửa đổi cho phép nó chạy trên hệ thống Mac OS X của tôi; tôi biết sự thay thế của /dev/fd/9 cho /proc/self/fd/9 có mục đích đó); xem gist của tôi tại https://gist.github.com/4090959.

Tôi tin rằng cả hai phiên bản tập lệnh đều gặp sự cố khi quay lại màu nền mặc định nếu làm nổi bật của Vim sẽ thay đổi nền.

Các vấn đề liên quan