- 作成者投稿
- 2007年1月8日 4:42 am #3961
aska
メンバー[現在の設定のプロパティ]より強調(1)タブにて[リセット]ボタンをクリックし「Perl」を利用すると、関数は強調表示されるのですが、関数ではない$local等変数名に対しても適応されてしまいます。
定義ファイルを編集して左に$xxxや->xxxやsub xxxにマッチしないよう修正する事は可能でしょうか?
2007年1月8日 7:37 am #3962匿名
ゲスト言いたいことが理解できないので、もう少し具体的に書いてもらえると答えやすいと思います。
例えば、 localtime は赤くなるが、$localtime は赤くなってほしくないとか。
もしそういう意味なら、基本的に現状ではこれを解決するのは難しいです。
やろうとすれば不可能ではないと思いますが、切りのない戦いに成ってしまいます。なぜなら、EmEditorの強調の仕組みは非常にシンプルなつくりで実現されているのと、少
し制限があるからです。これはパフォーマンスの問題や単語の扱い、Perl以外にも多様な
言語に数多く対応しているので、なかなか一般的解を見つけるのが難しいです。
特に、Perlの場合、他の言語では一線を画すほど、記号類が豊富すぎて独特なため。localtime を強調するのに、localtime と言う単語を使っています。
で、単語とは何かと言う時に、前に $@% や、-> があっても、localtime は単語だからです。
これを避けようとすると、強調定義が膨大なことになり、事実上不可能です。Perlの場合、
ある単語に対して $@% -> 等を代表に、豊富な記号類が使われて、これを単語と扱うのか
扱わないのかでものすごく影響を受けるため、単語と扱わない現在のEmEditorでは諦める
しかない感じです。[s]localtime[s] を正規表現強調するという荒業もないこともないですが、正規表現を
多用しだすと、相当重たい感じになります。基本的に、単語に組み込み関数と同じ単語を
使用しない、と言う作法で対応するほうがいいと思います。あと、$#array なんかも、コメント強調色になってしまうのも避けられません。
2007年1月8日 11:43 am #3963yunoki
メンバー逆の発想になりますが、強調されないように努力するのではなく、「変数を強調表示」するように追加すれば実用的だと思います。
実際私はそうしています。また、sub xxxx で元の関数をかぶる名前でサブルーチンを作った場合についてですが、EmEditorの仕様以前に、プログラムの開発のマナーとして非常にトラブルを招きやすい手法ですので避けた方が良いのではないかと思います。
2007年1月8日 1:06 pm #3964匿名
ゲストあ、それは良い案ですね。凄く参考になります。
あんまりいじりたがらないほうなので、深く考えた事なかったですが。以下のような感じで結構良い感じですね。パフォーマンスも悪くなった感じがないですし。
(正規表現かつ単語のみの時は、正規表現の前後に b が追加されると思えば良いのかな
ぁ。EmEditorには、b ってないんですね。)[$@%*][_a-zA-Z]w* 正規表現/大文字小文字区別
subs+[_a-zA-Z]w* 正規表現/大文字小文字区別/単語のみついでに、$#array のようなものも定義してしまうとオリジナルよりや少しだけましに成
りますね。 右のほうはコメント色になっちゃいますが。私の場合は、変数や関数に色がついたら「被ってる」って言う判断目安にして使ってる
面もあるので、変数を強調するって言う使い方は浮かばなかったですね。ちょっと横道それるんですけど、 を強調に加えると、 をタイプした時にイコール
の部分だけが強調されてしまって、カーソル動かすと 全体が強調に変わるんですけ
ど、バグですかね?2007年1月8日 1:22 pm #3965匿名
ゲストよろしければ、実際使っている正規表現を教えてもらえると、Perl使う身としては助かります。 :-)
後方参照も区別する必要ないなら、こちらのほうがスマートですか。
${ foobar}みたいなのは無視するとして、[$@%*]w+ 正規表現/大文字小文字区別
2007年1月8日 1:26 pm #3966匿名
ゲストすみません。
$3abc みたいなのも強調されちゃうので駄目ですね。 :-o2007年1月9日 1:29 am #3967匿名
ゲスト$[sn]*foobar = ‘emeditor’; print $foobar;
みたいなのも変数として認められるみたいですね。
さらに、パッケージごとのシンボルテーブル付き変数とか特殊変数もありますね、、、。
$Foo::Bar::Baz::foo;
local $/ =undef;$VERSION @Exporter @ISA は、別の色にしたい時も困りますね。
難しいですね :-?2007年1月18日 10:11 pm #3993yunoki
メンバーあまり難しく捕らえすぎないほうが良いと思います。
自分が普段使いそうな変数さえうまく強調できれば十分ではないでしょうか。
私の場合、大文字のみの変数名は、定義済みのものと混同しやすいため、コーディング上あまり使用しません。
ですので、変数の定義として、1文字目は英小文字で2文字目以降は使用できる文字群の0回以上の登場というかたちにしています。2007年1月22日 12:23 pm #4008匿名
ゲストそうですね。きっちりやろうとすると、大変というより無理ですね。
変数の定義を強調するのではなく、自分の区別したい範囲内の変数だけ強調するという発想ですね。私も大文字は使わない派なので、それが良いかもしれませんね。
そうすれば、特殊変数なども別枠で強調できますしね。せっかくなので、一応考えた時の正規表現書いときます。
シンボルつき変数も対応してるつもり。
試してみたら、結構重いです。
スクロールだけでCPU(10→50%)になっちゃました^^;。[$@%*](::)??[_a-zA-Z]w*(::[_a-zA-Z]?w*)*
%::([_a-zA-Z]w*::)*2007年1月23日 2:12 am #4018yunoki
メンバーちなみに、私の場合の変数の強調表示用正規表現は下記のものです。
[@$%][a-z_][a-zA-Z0-9_]*
$#[a-z_][a-zA-Z0-9_]*
[%@$]-> や :: には意図的に対応させていません。
強調の組み合わせがしやすいからです。また行コメントの# については、変数の強調とかぶらないように#[スペース] に設定しなおして、コメントを書く場合には常に#の後にスペースを書くことでカバーしています。(読みやすくもなるので、気に入っています)
こうすることで、perlのパスにも独自の強調設定を割り当てることもできて見分けやすくなっています。2007年1月25日 8:29 pm #4048匿名
ゲストありがとうございます。
EmEditorでPerl使ってる人少ないのか、あまり情報ないので、
yunokiさんは詳しいようなので、これからも何かあったら教えてください。
一人で考えていると結構独善になることが多いので。ちなみに、Perlのデフォルト設定は、
if(1){
} else {
}って書くと、オートインデント戻りが利かなくて、
if(1){
}
else {
}こう書かなくてはくては使い勝手悪いです。
デフォルトの設定が、インデント終了文字指定が空で、アウトライン機能がついたせいでこうなっちゃったのですが、
なかなか修正が難しいとの返答をもらいまして、仕方なくインデント終了文字指定に「;」をつけてます。
でもこうすると、ヒアドキュメントで今度は、勝手にインデントしちゃうので悩み中です^^;。2007年2月7日 8:16 am #4125aska
メンバー返信ありがとうございます、
Perlで関数、変数、コメント等を適切に強調する事はたしかに難しいですね。> 例えば、 localtime は赤くなるが、$localtime は赤くなってほしくないとか。
> もしそういう意味なら、基本的に現状ではこれを解決するのは難しいです。
> やろうとすれば不可能ではないと思いますが、切りのない戦いに成ってしまいます。
はい、関数用の強調表示が変数に適応されるのを防ごうというのが目的でした、個別に強調させるのが難しいと判断し現在は関数の強制表示をオフにすることで対応しております。現在は関数の強調表示、行コメントを全て削除し、
以下の強調表示で行コメントを反映させつつ、
今後の対応を検討しております。
^#.*
[^@]#.* - 作成者投稿
- このトピックに返信するにはログインしてください。