1) SQL整形マクロ
http://hide.maruo.co.jp/lib/macro/sqlclean104.html
2) PHPコード整形マクロ
http://hide.maruo.co.jp/lib/macro/phpcb.html
vi(vim)とemacsの場合について回答致します。3つのエディタ全てについて解答するのはさすがに骨が折れるのでpeggyについては勘弁して下さい。(そもそもpeggyを使ったことがないのでわからないだけですが。)質問に挙げられているマクロの機能については秀丸を使わないので正確には把握していませんが、どの程度の"整形"を望むかによって方法(と面倒さ)が変わります。
単なるインデントの調整
例えば
phpCodeBeautifier (実行ファイル名は phpCB.exe) を例にswitch ($language) { case "ja": echo "ほげ〜"; break; default: echo "hoge"; }
を
switch ($language) { case "ja": echo "ほげ〜"; break; default: echo "hoge"; }
などとするような場合。
最近のバージョンであればPHPモードもSQLモードも標準で付いてくるのではなかったかと思います。
範囲を選択(
v
でvisualモードにした後カーソル移動)してから=
でインデントされます。(ファイル全体をインデントする場合はgg=G
でも可。)インデント幅の変更は $(HOME)/.vimrc に
au FileType php set [設定]
などと書いておけばいいです。[設定]の部分は例えば shiftwidth=4 などが入ります。設定可能な変数については"vim インデント 設定"などで検索すればわかると思います。
PHPモードやSQLモードなど必要なものをインストールしておきます。(具体的な方法はOS依存なのでここでは控えますが、"php-mode emacs"や"sql-mode emacs"などで検索すればすぐに見付かります。)
範囲を選択(C-spaceの後カーソル移動)してから M-x indent-region
でインデントされます。インデント幅などの設定は $(HOME)/.emacs に
(add-hook 'php-mode-user-hook '(lambda () ; ここに設定を入れる. 例えば (setq c-basic-offset 4) ; のように ))
と書いておきます。
以上で単純なインデントの調整はできます。ただし、改行の仕方がうまく合わない場合、vimもemacsもかなり変なインデントをすることがあります。例えば上の例で言うと
switch ($language) {case "ja": echo "ほげ〜"; break; default: echo "hoge"; }
というような状態でインデントしても碌な結果になりません。
改行の仕方なども含めて整形したい場合
例えば
if ($nhoge >= $thres) { echo "No more hoge!"; }
を
if ($nhoge >= $thres) { echo "No more hoge!"; }
とするような場合。
ざっと調べた感じでは、現時点でemacsやvimのphpモードはこのような機能を持っていないようです。従って自分でプログラムを書くか、何らかの外部コマンドの助けを借りることになりますが、一番簡単なのは別コマンドで整形してからエディタで開くことです。(Unix系ならおそらくこの方法が最も"楽"です。)
PHPの場合なら
phpCodeBeautifier http://www.doyouphp.jp/tips/tips_phpcb.shtml
がオプションも抱負です。SQLについては微妙な所ですが、お手軽なのは
SqlFmt http://www.vector.co.jp/soft/win95/business/se299208.html
でしょうか。もう少し高機能そうなものとして
blancoSqlFormatter http://hp.vector.co.jp/authors/VA027994/blanco/blancodownload.ht...
もありますが、これはライブラリなのでこれを使って自作コマンドを作らないといけません。(私はJavaを知らないので憶測ですが、 Javaでのプログラミング経験があれば大したことはなさそうです。)これらで整形してからエディタで開くのが一番楽だと思います。
どうしてもエディタ内で済ませたい場合には、ここまでくるとvimとemacsのtipsになってしまいますが、次のような方法もあります。(本質的には上で挙げたような外部プログラムを呼び出しているだけです。)
まず標準入力から入力を受け取り整形結果を標準出力に出力するようなコマンドをインストールします。上に挙げたphpCodeBeautifierとSqlFmtは(SqlFmtについてはオプション-o
を指定すれば)この要件を満たします。これらはともにWindows環境を想定していますが、少なくとも私の環境(Gentoo Linux 2006.1 amd64 および x86)で試した限りでは、wineを使って動いたのでLinux環境でも大丈夫なはずです。
phpCodeBeautifier(実行ファイルはphpCB.exe)を例にすると、visualモードで範囲を選択してから!phpCB
でOKです。また、 n 行目から m 行目までを整形するなら:n,m!phpCB
でいけます。
emacsの場合は少し面倒ですがshell-command-on-region
という関数を使えば同じようなことが実現可能です。
http://www.kabipan.com/computer/emacs/#genkouseiri
が参考になるはずです。
PHPコード整形マクロでしょうか?php-modeでどう使うのかまで踏み込んでもらえると助かります。