Syntax Errorを秀丸でファイル保存時に自動検出
エディタはvimやテキストエディタ、IDEのもを色々使い回してますが、いまだに固まってマセン。
それぞれに良さがあり、欠点もある。けどせめて構文チェックくらいはどれでも使えるようにしておきたいとこです。
IDEはもちろん、vimもvimrcに設定すれば問題ないので、あと秀丸で出来ないかとずっと思ってましたが、
こちらでPHPの構文チェックしてくれる秀丸マクロを自作してくれていたので、早速使わせていただきました。ありがとうございます。
しかし欲張りなもので、自分的には、上書き保存時にチェックを自動でしてほしい
(保存前のひと手間すらめんどくさがり)
というわけで、ちょこっと改造させていただきました(勝手にすみあせん)
// SaveWithPHPSyntaxCheck.mac // 保存 save; $type = filetype; $header = "\<?php"; beginclipboardread; #i = 0; $orgclip[#i] = getclipboard; while( $orgclip[#i] != "" ) { #i = #i + 1; $orgclip[#i] = getclipboard; } gofiletop; copyline; prevpos; $buf = getclipboard; clearcliphist; // PHPファイルでなければ終了(.php以外も必要であれば追加) if ( leftstr($buf, strlen($header)) != $header && $type != ".php") { setclipboard $orgclip[0]; #i = 1; while( $orgclip[#i] != "" ) { addclipboard $orgclip[#i]; #i = #i + 1; } endmacro; } // PHPの構文チェックを行う $TempFile = "c:\\php\\temp\\php_syntax.txt"; $SyntaxOk = "No syntax errors detected"; run "c:\\php\\php.exe -l %f > " + $TempFile; if ( !result ) { message "PHP Syntax Check Failed."; setclipboard $orgclip[0]; #i = 1; while( $orgclip[#i] != "" ) { addclipboard $orgclip[#i]; #i = #i + 1; } endmacro; } if (! existfile($TempFile) ) { message "うまく構文チェックできなかったみたい。"; setclipboard $orgclip[0]; #i = 1; while( $orgclip[#i] != "" ) { addclipboard $orgclip[#i]; #i = #i + 1; } endmacro; } // 元のウィンドウのウィンドウハンドルを取得 #org_w = hidemaruhandle(0); openfile "/h" $TempFile; // ステルスウィンドウ #stl_w = hidemaruhandle(0); replaceall "^\\n", "", regular; selectall; copy; // 元のウィンドウに戻る setactivehidemaru #org_w; // ステルスウィンドウを閉じる closehidemaruforced #stl_w; beginclipboardread; $buf = getclipboard; clearcliphist; setclipboard $orgclip[0]; #i = 1; while( $orgclip[#i] != "" ) { addclipboard $orgclip[#i]; #i = #i + 1; } if ( leftstr($buf, strlen($SyntaxOk)) == $SyntaxOk ) { endmacro; //quit; } message $buf; endmacro;
このSaveWithPHPSyntaxCheck.macをマクロ登録して、この際Ctrl+sにキー割り当てしちゃう。
今まで通りの保存で、同時にチェックが働きます。(※当然ながらWinのみ)
追加で、
・Syntax Error検出したときはダイアログで出すようにしました。 ・PHPファイルでなかったらスルー ・tmpファイルをステルス表示してすぐ閉じるように。
問題点
・ステルスでも一瞬tmpファイルの開閉が起きるのが気持ち悪いですが、これはしょうがない。 ・「保存前にチェックして、エラーなら保存しない」風にはできない。・エラー行番号が出ない下記、追記にて解決
何かいい解決方法があれば教えて下さい。
追記
「エラー行番号が出ない」と書きましたが、単にローカルのphp.iniの設定不足でした。
error_reporting = E_PARSE
と、Parseエラーだけ出せば、とりあえず行番号も含めたエラーメッセージを拾ってくれます。
ただ複数行に渡るので、マクロに改行トリミング
replaceall "^\\n", "", regular;
を入れてあげないと、ダイアログではうまく出ません。
さらに追記
クリップボードにコピーが残ってしまうのが気持ち悪かったので、元のを保持しといて最後上書きするようにしました。