2010-04-01 37 views
6

Tôi thích để xem sự khác biệt hiện nay trong các tập tin nguồn Tôi đang làm việc trên với một lệnh như:Có thể gửi email cho các nội dung của vim sử dụng HTML

vim <(svn diff -dub) 

Những gì tôi thực sự muốn được có thể làm là gửi email khác biệt được tô màu. Tôi biết vim có thể xuất HTML với: TOhtml, nhưng làm thế nào để tôi đưa đầu ra này vào một email html? Lý tưởng nhất. tôi muốn có thể gửi một diff html với một lệnh shell script đơn.

Trả lời

10

Sau đây một liner tạo ra một tập tin HTML có tên email.html:

diff file1 file2 | vim - +TOhtml '+w email.html' '+qall!' 

Bây giờ bạn có thể sử dụng mã Pekka để gửi email.

Tuy nhiên, tôi tin vào việc sử dụng đúng công cụ cho đúng công việc - và VIM có thể không phải là công cụ phù hợp tại đây. Các tô sáng khác tồn tại và việc sử dụng chúng là phù hợp hơn ở đây.

Ví dụ, Pygments có thể được khai thác để tạo ra cùng một kết quả, hiệu quả hơn nhiều và rắc rối-miễn phí:

diff -u report.log .report.log | pygmentize -l diff -f html > email.html 

Chú ý rằng điều này tạo ra chỉ cơ thể văn bản thực tế, không phải là style sheet, cũng không giàn giáo HTML xung quanh. Điều này phải được thêm riêng biệt nhưng điều đó cũng không khó. Dưới đây là một kịch bản bash hoàn chỉnh để tạo ra một tập tin HTML tối thiểu hợp lệ:

echo '<!DOCTYPE html><html><head><title>No title</title><style>' > email.html 
pygmentize -S default -f html >> email.html 
echo '</style></head><body>' >> email.html 
diff -u report.log .report.log | pygmentize -l diff -f html >> email.html 
echo '</body></html>' >> email.html 

EDIT Trong trường hợp rằng mã Pekka đã không làm việc - như đối với tôi - bởi vì bạn không có phiên bản yêu cầu của mailmutt cài đặt thì bạn có thể sử dụng sendmail như sau để gửi email HTML:

(echo 'To: [email protected]' 
    echo 'Content-Type: text/html' 
    echo 'Subject: test' 
    echo '' 
    cat email.html) | sendmail -t 

Điều quan trọng là để lại một dòng trống giữa phần đầu và phần thân của email. Ngoài ra, hãy lưu ý rằng tất nhiên là không cần thiết để tạo tệp tạm thời email.html. Chỉ cần dán phần còn lại của các lệnh vào đúng vị trí bên trên và xóa các chuyển hướng đến tệp.

+0

bạn có định nghĩa thú vị "hiệu quả hơn và không có rắc rối". 1 cho cách để có được vim để viết và thoát khỏi dòng lệnh. – rampion

+0

bạn có thể thay đổi "+ w email.html" thành '+%! Mutt' hoặc bất kỳ thứ gì có vim gọi lệnh thư trực tiếp – rampion

+0

@rampion: Khởi chạy Vim theo cách đó thực sự là không hiệu quả. Pygments dễ dàng làm tốt hơn nó.Một cách đơn giản, tôi chỉ đơn giản có nghĩa là luồng công việc Pygments dễ hiểu hơn ("cú pháp làm nổi bật một diff", trái với "mở một diff trong trình soạn thảo, chạy lệnh, đóng trình soạn thảo") mặc dù nó có nhiều văn bản hơn viết. Cả hai phương pháp đều có giá trị của họ. –

1

Tôi không phải Linux Guru, nhưng điều này có vẻ như nó sẽ phục vụ nhu cầu của bạn để ống đầu ra của bạn vào:

Send an HTML file as email from the command line. (sử dụng mail)

Ngoài ra còn có một dòng mutt dụ here:

mutt -e "my_hdr Content-Type: text/html" 
    -s "my subject" [email protected] < message.html 

điều này sẽ tạo ra một E-Mail thuần túy không có văn bản thuần túy thay thế - vì bạn sẽ phải xây dựng thư đa phần ... Nhưng có thể nó sẽ làm cho những gì bạn cần.

+0

Chăm sóc để giải thích cho phiếu giảm giá? Có cái gì đó về mặt kỹ thuật sai ở đây? –

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