Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

コマンドラインから日本語コメント付きコードをカラー印刷する

$
0
0

目的

  • 日本語のコメントの入ったコードをコマンドラインからカラーで印刷する。
  • 調べてみるとあんまりいい感じのツールはないようです。enscriptはコードのカラー化ができますが残念なことに日本語がダメみたい。a2psは日本語はパッチが当たっているようですが、カラー化ができるのかすぐ見つからず、情報も古いのでなんだか面倒だとおもちゃいました。
  • vimのコマンド:hardcopyでカラーになっていい感じで印刷できますが、こちらも日本語が化けます。
  • そこで目につけたのがvim:TOhtmlでhtmlにしてみるといい感じでブラウザで表示できました。これならコマンドラインから変換して印刷できそう。

環境

  • MacOSX Darwin Kernel Version 17.7.0: MacBookPro11,1 Darwin
  • wkhtmltopdf 0.12.5 (with patched qt)
  • VIM - Vi IMproved 8.1 (2018 May 18, compiled Aug 3 2019 18:07:03)
  • GNU bash, バージョン 5.0.11(1)-release (x86_64-apple-darwin17.7.0)
  • これらのインストール情報は比較的簡単に見つかりますのでそちらでお試しください。またインストールの説明は冗長だと思いますので。

vimをバッチで使う

  • vimは好きなエディタでインターラクティブに動きますが、バッチモードでも動きます。これを使います。下記のスクリプトではvimが開いて処理しますが、待てば自動でhtmlファイルが生成されます。
~$ cat script_vim_TOhtml
:TOhtml
:w!
:q!
:q!
~$ vim -s script_vim_TOhtml hoge.bash
tmp$ ls
hoge.bash  print_script.bash script_vim_TOhtml
tmp$ vim -s script_vim_TOhtml hoge.bash 
tmp$ ls
hoge.bash  hoge.bash.html  print_script.bash script_vim_TOhtml 
(htmlファイルができています)
  • 一応説明して置きますと、vimのバッチ処理で受け取った引数のファイルを:TOhtmlでhtmlファイルに変換します。これはまだメモリ上のバッファなので、:w!で強制上書きします。名前のデフォルトはファイル名に.htmlを加えたものです。バッファのhtmlのファイルと元のファイルを閉じるために:q!を二回続けます。
  • vim -sはスクリプトを読み込むオプションです。

全体のスクリプト

  • これをwkhtmltopdflprに渡せばいいのです。こんなスクリプトです。
tmp$ cat print_script.bash
#!/usr/local/bin/bashf_html=$1.html
f_pdf=${1%.*}.pdf
vi -s script_vim_TOhtml $1cat$f_html | wkhtmltopdf -  $f_pdf
lpr $f_pdf[$?-eq 0 ]&&echo"印刷成功"
tmp$

各行の説明です。
1. 2行目の${1%.*}.pdfは拡張子をpdfに変換するbashのパターン置換です。
2. wkhtmltopdfはファイルの拡張子がhtmlだとhttp://をつけたURLを読みに行くのでcat $f_htmlとパイプで標準入力に渡しています。wkhtmotopdfの入力は-で標準入力になります。
3. 出力に$f_pdfを指定すればpdfファイルができます。これをlprで出力するだけ。多分pdfを介さずにパイプでいけるでしょうが、確認用にpdfも残すためにファイルにしています。
4. 最後の行はエラーチェックして成功を表示しています。
5. エラー処理はしていないので、適宜必要に応じて追加してもらえればいいなと思います。

結果

  • こんな感じです。
tmp$ ls
hoge.bash  print_script.bash  script_vim_TOhtml
tmp$ ./print_script.bash hoge.bash 
Loading pages (1/6)
Counting pages (2/6)                                               
Resolving links (4/6)                                                       
Loading headers and footers (5/6)                                           
Printing pages (6/6)
Done                                                                      
印刷成功
tmp$ ls
hoge.bash  hoge.bash.html  hoge.pdf  print_script.bash  script_vim_TOhtml
tmp$ 

変換されたhtmlもpdfも残しています。これで複数あるコードも一括して印刷できるでし、どのファイルを印刷したのかもファイルを見ればわかります。

こんな短いコードですが、どなたかのお役に立てれば嬉しいです。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>