2013-10-30 15 views
10

Tôi muốn có lệnh tôi có thể chèn vào một đường dẫn lệnh để thêm màu thoát vào đầu vào của nó theo khả năng làm nổi bật cú pháp của vim.Làm cách nào tôi có thể sử dụng vim trong một đường ống để tô màu văn bản?

Ví dụ:

cat somefile.js | vim - <???> | less 

Các văn bản kết quả sẽ là của somefile.js, nhưng colorized theo cách cấu hình vim hiện tại sẽ làm điều đó trong-editor.

Nó xảy ra với tôi rằng điều này phải là có thể. Tôi đồng ý rằng ví dụ trên không phải là điều mà một người đàn ông lành mạnh có thể gọi chính xác là hữu ích, nhưng điều đó không có nghĩa là ý tưởng không bao giờ là.

+1

Có một nhiều phần mềm thực hiện điều này, pygmentize là một. Tôi chưa bao giờ thấy vim làm điều đó. – carlosdc

+0

Hrm .. [Chủ đề này] (http://stackoverflow.com/questions/3219479/vim-write-buffer-content-to-stdout), mặc dù được đánh giá thấp, dường như gợi ý sử dụng vim làm bộ lọc ở tất cả (về cơ bản những gì tôi đang tìm kiếm ở đây), chỉ là một ý tưởng tồi từ get-go. Điều đó có đúng không? Ý tưởng này chỉ là một người không khởi đầu? –

+2

+1 cho tư duy out-of-the-box. – steveha

Trả lời

4

Tôi nghĩ ý tưởng của bạn có một lỗ hổng cơ bản: không ai nghĩ đến việc cho phép một thứ như vậy.

Rõ ràng vim có khả năng làm nổi bật cú pháp. Nhưng tôi sẽ đặt cược cho bạn một hình nón kem mà nếu bạn có thể quản lý để có được vim để dòng văn bản thông qua và xử lý nó, rằng bạn sẽ không thích kết quả.

Hãy xem xét điều gì sẽ xảy ra khi bạn gửi văn bản đường ống qua more (hoặc less nếu bạn muốn). Khi nó đi đến thiết bị đầu cuối, các chương trình này hiển thị một màn hình và đợi bạn nhấn vào thanh dấu cách. Nhưng nếu bạn chuyển hướng stdout đến một số nơi khác so với thiết bị đầu cuối, các chương trình này nhận thấy điều này và chỉ cần sao chép đầu vào của họ vào đầu ra của họ không thay đổi.

Nếu vim không nhận thấy rằng bạn đang chuyển văn bản qua, có thể gửi lệnh di chuyển con trỏ mà bạn có thể không muốn trong đầu ra của mình. Nếu vim không thông báo, nó có khả năng chỉ cần vượt qua văn bản, và không cú pháp màu nó. Chỉ khi vim không thực hiện cú pháp-tô màu nhưng không tiêm công cụ di chuyển con trỏ thì ý tưởng của bạn sẽ hoạt động.

Bạn có thể dùng thử. Dưới đây là một câu trả lời mà thảo luận về các công cụ đường ống thông qua vim:

Execute a command within Vim from the command line

Nhưng tôi nói tại sao không ống văn bản của bạn thông qua một chương trình được thiết kế và dự định để có văn bản cấp nước tập trung qua nó? Pygments có thể tô màu mọi định dạng ngôn ngữ lập trình chính và định dạng đánh dấu.

http://pygments.org/

Ưu điểm lớn tôi xem cho ý tưởng của bạn: bạn có thể tùy chỉnh cách vim không màu cú pháp, có được nó theo cách bạn muốn nó, và sau đó cũng sử dụng vim để xử lý văn bản của bạn. Nhưng nó có thể không khó để tùy chỉnh Pygments, và nó thậm chí có thể được thỏa đáng ra khỏi hộp, trong trường hợp đó chắc chắn sẽ là cách dễ nhất để đi. Và Pygments không chỉ có đầu ra chuỗi ANSI, nó cũng có đầu ra HTML, RTF, LaTeX, vv Vì vậy nếu bạn nhận được Pygments làm việc theo cách bạn muốn, nó sẽ có thể xuất ra bất kỳ định dạng đầu ra nào bạn cần; vim sẽ chỉ có chuỗi ANSI.

+1

Bạn đang đúng - vim không được thiết kế như một bộ lọc, vì vậy hãy sử dụng cái gì đó. Bạn cũng đúng là động lực chính ở đây là tô màu văn bản theo cách tôi đã thiết lập * vim * để làm như vậy. Nhưng đó không phải là một nhu cầu quan trọng - tôi chỉ * muốn *. :) Tôi sẽ kiểm tra Pygments. Cảm ơn vì lời giới thiệu. Và cảm ơn cho một lời giải thích tốt là tại sao tôi đã không nhận được xa với cách tiếp cận của tôi. Chúc mừng. –

+0

Được rồi, pygmentize là khá damn mát mẻ. Tôi muốn nó có tự động phát hiện tốt hơn, nhưng sau đó tôi có thể sử dụng một dự án. –

1

Có một mô-đun Perl được gọi là Văn bản :: VimColor mà tôi đã nghe sẽ thực hiện những gì bạn đang tìm kiếm.

http://search.cpan.org/dist/Text-VimColor/

Nhưng hãy để tôi hỏi điều này: Tại sao bạn muốn nó trải qua ít hơn? Tại sao không sử dụng vim như một trình xem tập tin hoàn hảo tốt? view - sẽ đọc từ đầu vào tiêu chuẩn ở chế độ chỉ đọc.

+0

Ý tưởng không phải là nó đặc biệt thông qua 'less', nhưng tôi có thể có một cái gì đó áp dụng cú pháp tô sáng cho văn bản theo cách Tôi có thể xử lý nó thêm trên dòng lệnh. Ví dụ, nếu tôi muốn làm 'cat file.js | hàm grep | ', nó giúp nếu hiển thị cho tôi làm nổi bật, để dễ đọc hơn. –

1

cài đặt của tôi vim đã có một kịch bản vim pager/colorizer bao gồm, và nó có thể được tìm thấy tại địa chỉ:

https://githucat /usr/share/vim/vim73/macros/{less.sh,less.vim} 

Cá nhân, tôi đang sử dụng https://github.com/rkitover/vimpager

trong đó có vimcatvimpager, mà làm những gì bạn nghĩ họ làm.

0

Đây có thể là những gì bạn đang sau

cat filename.sh | vim - -c 'syntax on; syn=bash' 

Đây là xấu xí, nhưng bạn có thể bí danh này:

alias vim.sh="vim -c 'syntax on; syn=bash'" 

Sau đó sử dụng như thế này:

cat filename.sh | vim.sh - 
Các vấn đề liên quan