2012-11-15 5 views
5

JSONとYAMLを吐き出すコマンドラインプログラムがあります。デフォルトでは、ピリオド(pygmentize)が利用可能かどうかを検出し、ピリオドがあれば出力を渡して素敵なカラー出力を得ます。ただし、このプログラムが実行されるほとんどのコンピュータでは、デフォルトでpygmentsがインストールされません。しかし、ほとんどのコンピュータはemacsまたはvimのいずれかを持っていますが、そうしています。これらのエディタの1つにANSIエスケープシーケンスを使用してテキストをハイライト表示して出力する方法はありますか?emacsやvimの構文ハイライターをコマンドラインプログラムに利用していますか?

+0

私はちょうどcoderayについて知りました。それはルビーベースであり、コマンドラインプログラムはpygraphizeよりはるかに高速です。 –

+1

もう一つのオプションは[GNU Source-highlight](http://www.gnu.org/software/src-highlite/source-highlight.html)です。私はこれを使って[less](http://superuser.com/a/71593/79870)で色を取得します。 –

+0

@RandyMorris:そうですね、それにはCPANモジュールがあります(私のプログラムはPerlベースです)。唯一の問題は、依存関係がかなり大きいことです(CPANモジュールを構築するソースハイライトとそのdevライブラリをインストールすると約100MBのDebianパッケージが取得されます)。 –

答えて

1

Emacsには、htmlfontifyという機能があり、フォント化されたバッファをHTMLに変換します。小さなelispスクリプトを使用してこれをバッチモードで使用して、ファイルをHTMLとしてレンダリングすることができます。例:

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

ありがとうございます。申し訳ありませんが、私はターミナルに出力しているので、私はANSIのエスケープシーケンスでそれを必要とすることを明確にしていません。私のEmacsLisp-fuは厳しく制限されていますが、あなたは私に遊び方の指針を与えてくれました。 –

2

Emacs(cp。ataylorの答え)と同様に、Vimは完全な構文強調表示を持つバッファをHTMLにレンダリングすることができます。 :help 2html.vimを参照してください。おそらく、バッファの構文を通るプラグインのコードの多くを再利用し、ANSIエスケープシーケンスにレンダリングするように変更することができますが、すべてのレンダリングロジックを自分で再実装する必要があります。

Vimをページャーとして使用するプラグインがいくつかありますが、Vimを使用してANSIエスケープシーケンスでバッファーを出力することはできません。結局のところ、Vimは端末の制御権を保持したいと思って、終了時にそれをクリアします。

私はVimの外に専用の別のソリューションを探すことをお勧めしますが、それはあなたがそれをインストールする必要があるということです。あなたが@IngoKarkatアドバイスに従うとANSIエスケープシーケンスをサポートするために、標準のプラグインを書き換えしたくない場合は

1

あなたは私のformatvimプラグインを使用することができ、それは

Format format csi to /path/to/file 

を使用してANSIエスケープシーケンスにレンダリングをサポートしています。当初、私のプラグインは、新しいフォーマットを簡単に追加できるように、さまざまなフォーマットのサポートのための標準2htmlターゲティングの書き直しでした(ANSIエスケープシーケンスサポートを追加するのに30分を費やしましたが、主にこれらのシーケンスの仕様を読んでいました)。類似点を挙げる。大きなファイルの場合やvimの1つのインスタンスを使用していくつかのファイルをレンダリングする場合(ウォームアップ(「コンパイル」およびキャッシュ・フィル)段階がさらに実行のメリットによってマスクされるとき)は、より高速に動作することが知られています。

4

エディタはすでにエディタの画面キャプチャをするのは簡単ですが、ansiものを行うことができますか?

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

(再表示のみGNU FSF Emacsのために必要とされる)

今あなたは、画面上の記録処理が見えたくない場合、あなたはそれをラップすることができ、キャプチャ

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 

をクリーンアップperlのIO :: Ptyのようなもので隠された端末で

+0

素敵なトリック!しかし、手にして問題のために少し過剰です。ありがとう。 –

4

Matthew Wozniskiは、Vimでこれを行うスクリプトvimcat.shを書いています。彼のバージョンはhttps://github.com/godlygeek/vim-files/blob/master/macros/vimcat.shです。私はそれにいくつかの変更を加えました(メモリが提供されていれば、その変更によってMac OS Xシステム上で動くことができました; /dev/fd/9の代用が/proc/self/fd/9の目的であったことを知っています)。私の要点をhttps://gist.github.com/4090959に見てください。

Vimの強調表示によって背景が変更された場合、両方のバージョンのスクリプトでデフォルトの背景色に戻すことができないと思います。

関連する問題