vi,emacs,peggyで下記に相当するツールを教えてください。


1) SQL整形マクロ
http://hide.maruo.co.jp/lib/macro/sqlclean104.html
2) PHPコード整形マクロ
http://hide.maruo.co.jp/lib/macro/phpcb.html

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/09/17 22:46:17
  • 終了:2006/09/24 22:50:03

回答(2件)

id:cutie17 No.1

cutie17回答回数343ベストアンサー獲得回数62006/09/18 22:17:01

ポイント35pt

emacsのphpモードです。

http://sourceforge.net/projects/php-mode/

id:kunitz

PHPコード整形マクロでしょうか?php-modeでどう使うのかまで踏み込んでもらえると助かります。

2006/09/18 22:22:41
id:a_b_y No.2

a_b_y回答回数16ベストアンサー獲得回数62006/09/19 05:55:06

ポイント35pt

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";
}

などとするような場合。

  • vim

最近のバージョンであればPHPモードもSQLモードも標準で付いてくるのではなかったかと思います。

範囲を選択(vでvisualモードにした後カーソル移動)してから=

でインデントされます。(ファイル全体をインデントする場合はgg=Gでも可。)インデント幅の変更は $(HOME)/.vimrc に

au FileType php set [設定]

などと書いておけばいいです。[設定]の部分は例えば shiftwidth=4 などが入ります。設定可能な変数については"vim インデント 設定"などで検索すればわかると思います。

  • emacs

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環境でも大丈夫なはずです。

  • vim

phpCodeBeautifier(実行ファイルはphpCB.exe)を例にすると、visualモードで範囲を選択してから!phpCBでOKです。また、 n 行目から m 行目までを整形するなら:n,m!phpCBでいけます。

  • emacs

emacsの場合は少し面倒ですがshell-command-on-regionという関数を使えば同じようなことが実現可能です。

http://www.kabipan.com/computer/emacs/#genkouseiri

が参考になるはずです。

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません