2010/05/15
EclipseのようなIDEのように選択範囲をコメント化/解除する秀丸マクロ
なぜかちょっとだけマイブームの秀丸マクロで選択範囲を"//"でコメント化とコメント化解除するマクロを作ってみました。
探せばありそうな気がとてもしたけど、気にせず作っちゃいました。
タイトルはEclipseのようなと書きましたが、動きはZend Development Environmentに合わせました。
選択範囲の最初の行の先頭が"//"以外の場合は選択範囲全てをコメント化します。
選択範囲の最初の行の先頭が"//"の場合は、選択範囲の行の先頭の"//"を削除します。
マクロを登録し、Ctrl + / のショートカットキーを割り当てるとIDEと同じ操作でコメント化できます。
comment1.mac(1.8kb)
探せばありそうな気がとてもしたけど、気にせず作っちゃいました。
タイトルはEclipseのようなと書きましたが、動きはZend Development Environmentに合わせました。
選択範囲の最初の行の先頭が"//"以外の場合は選択範囲全てをコメント化します。
選択範囲の最初の行の先頭が"//"の場合は、選択範囲の行の先頭の"//"を削除します。
マクロを登録し、Ctrl + / のショートカットキーを割り当てるとIDEと同じ操作でコメント化できます。
comment1.mac(1.8kb)
//EclipseなどのIDEのように、単一行もしくは複数行をコメント化・コメント解除するマクロ
//範囲選択中の場合は、選択範囲の行すべてコメント化する。
if(selecting) {
//現在の選択範囲を退避
#tmp_seltopx = seltopx;
#tmp_seltopy = seltopy;
#tmp_selendx = selendx;
#tmp_selendy = selendy;
//一旦選択範囲を解除
escape;
//選択範囲の開始行から終了行までコメントにしていく
#i = #tmp_seltopy;
//行の先頭へ移動
moveto 0, #i;
//先頭行がコメント("//")かどうかのフラグ
#comment_flag = false;
//選択範囲を再設定する際のカーソルオフセット
#offset = 2;
if(code == 0x2F) { //0x2Fは"/"の文字コード
right;
if(code == 0x2F) {
#comment_flag = true;
#offset = -2;
}
}
while(#i <= #tmp_selendy) {
moveto 0, #i;
//先頭行がコメントの場合は、選択範囲のコメント行を解除していく。
if(#comment_flag == true) {
//先頭の文字が"/"の場合
if(code == 0x2F) {
//右へ1文字移動
right;
//次の文字も"/"の場合、BSを2回発行してコメント化を解除する。
if(code == 0x2F) {
right;
backspace;
backspace;
}
}
//先頭行がコメントではない場合は、選択範囲の行すべてをコメント化していく。
} else {
insert "//";
}
#i = #i + 1;
}
//カーソルを選択範囲開始位置に移動
moveto #tmp_seltopx + #offset, #tmp_seltopy;
//選択範囲を元に戻す
beginsel;
moveto #tmp_selendx + #offset, #tmp_selendy;
endsel;
//範囲選択中ではない場合
} else {
//現在のカーソル位置を退避
#tmp_x = x;
#tmp_y = y;
//行頭に移動
golinetop2;
//先頭の文字が"/"の場合
if(code == 0x2F) {
//右へ1文字移動
right;
//次の文字も"/"の場合、BSを2回発行してコメント化を解除する。
if(code == 0x2F) {
right;
backspace;
backspace;
}
#tmp_x = #tmp_x - 2;
if(#tmp_x < 0) {
#tmp_x = 0;
}
} else {
insert "//";
#tmp_x = #tmp_x + 2;
}
moveto #tmp_x, #tmp_y;
}
|
