シンタックスハイライトするフィルタてないかな
シンタックスハイライトするフィルタてないすかねー
標準入力に色(ANSI color)つけて標準出力に出すだけのやつ。
view(vim)が出力して終了してくれればいいんだけど。。。
$ colorize < filename | less -R
とか
$ crontab -l | colorize | less -R
とかしたい。
で、最終的にはLESSOPENで使いたい。
追記#1
PerlのText::VimColorとTerm::ANSIColorでフィルタ書いたす。
$ colorize < httpd.conf | less -R $ crontab -l | colorize
LESSOPENで呼ばれるlesspipe.shをいじって必ずcolorizeでフィルタするようにしたら、ながーいファイルだとcolorizeの処理に数秒かかってイラっとしたのでこれはやめました。
その代わり、~/.lesskeyに
#command c shell colorize % | less
って書いて、
$ lesskey ~/.lesskey
で~/.lessを更新しておけば、lessでファイル開いた後で「イロつけてー」と思ったときは「c」を打鍵すればOK。(lessでファイルじゃなくてSTDINを見てるときはだめだけど)
#!/usr/bin/env perl # colorize use strict; use warnings; use Text::VimColor; { package Text::VimColor; use Term::ANSIColor; my $ColorTable = { Comment => 'yellow', Constant => 'bold', Identifier => 'green bold', Statement => 'bold cyan', PreProc => 'bold cyan', Type => 'bold', Special => 'bold', Underlined => 'bold white', Error => 'magenta', Todo => 'yellow bold on_red', }; no warnings 'once'; *ansi = sub { my($self,$ctab) = @_; my $syntax = $self->marked; $ctab = { %$ColorTable, (ref $ctab eq 'HASH' ? %$ctab : ()) }; my $ansi = ''; foreach (@{ $syntax }) { if ( $_->[0] eq '' || ! exists $ctab->{$_->[0]} ) { $ansi .= $_->[1]; } else { $ansi .= colored($_->[1], $ctab->{$_->[0]}); } } return $ansi; }; } print Text::VimColor->new(string => do { local $/; <> })->ansi; __END__
追記#2
id:rayfill さんに教えてもらった
がよさげっス。
おっきめのファイルを通してもストレスないので、LESSOPENのデフォルトフィルタにしてもよさそうです。
入力フォーマットはファイルの拡張子で判断しているので、拡張子テーブルになかったり標準入力だったりすると起こられて変換してくれません。なので、てきとうもいいところなんですがshスクリプトにしてフォールバックするように。
あとついでに、
とかしたり。
#!/bin/sh SH_ETC=~/etc/source-highlight source-highlight \ -f esc -o STDOUT \ --style-file=$SH_ETC/esc.style \ --lang-map=$SH_ETC/lang.map \ "$@" 2>/dev/null \ || \ source-highlight \ -s text \ --lang-def=$SH_ETC/text.lang \ -f esc -o STDOUT \ --style-file=$SH_ETC/esc.style \ --lang-map=$SH_ETC/lang.map \ "$@"
追記#3
そんなわけでsource-highlightのおかげでカラフルライフをエンジョイしています。
が、less (382+iso262) の-Rでみてて/で検索すると、検索文字列にマッチした部分のハイライトがずれたり文字化けしたりするのです。(lv -cだと問題なし)
なんでーとおもってたら、
Less version 418
- Fix search bug when using -R and text contains ANSI color escape sequences.
というのを発見。これで直るのかもでも日本語化パッチがないからsjisとか表示できないのかも。そろそろalias less=lvするときなのかも。