コメントマーク付け外し
手石 版 (2014/03)
コメントマークの付け外しをするマクロです。
js 以外の拡張子に対応させる時は、最後の関数に追加してください。
更新履歴
- 2013/03/28
- 無題のときに対応しました。
- 2014/03/22
- できるだけ短くしてみました。
ソースコード
// コメントマーク.js
// 行頭コメントマークを付けたり外したり。
// 空白文字の後ろにあっても外す。つけるときは行頭に。
var sel = Editor.ActiveDocument.Selection;
var ty = sel.GetTopPointY( mePosLogical );
var bx = sel.GetBottomPointX( mePosLogical );
var by = sel.GetBottomPointY( mePosLogical );
if ( bx == 1 && ty != by ){ by--; };
sel.SetActivePoint( mePosLogical, 1, ty, false );
sel.SetActivePoint( mePosLogical, 1, by+1, true );
var mark = commentMark();
var reg = new RegExp( "^([ \t]*" + mark + "\\s?)?(?=.)", "mg" );
mark += " ";
sel.Text = sel.Text.replace( reg, function( s0, s1 ){ return ( s1 == undefined )? mark : "" } );
function commentMark(){
switch( Document.Mode.toLowerCase() ){
case "text" : return "//";
case "javascript" : return "//";
case "tex" : return "%";
case "ruby" : return "#";
default : return Prompt( "コメントマーク?", "//");
};
};
masme 版 (2014/02)
マクロ「テキスト整形」の「行頭 // を付加/削除」を独立・改造したバージョンです。
行頭(論理行)にコメント文字が有れば削除(アンコメント)し、無ければ付加(コメントアウト)します。
- 空白行(改行/半角空白/水平タブのみの行)はコメントアウトしないようにしました。
- 初期設定では、インデントされたコメント文字には対応していません。
「$indent」変数を「false」から「true」に書き換えると、手石 版のように行頭空白後のコメント文字も削除するようになります。
インデントへの対応は、手石 版と同様に削除限定です。付加するときは行頭(論理行)になります。 - 編集モードによる定義切替は、マクロ「Eclipse風コメントアウト」を参考にしました。
更新履歴
- 2015/02/14
- 特殊文字の対処にミスがあったのを修正。
- 2015/02/14
- 「行コメント文字の定義」に正規表現の特殊文字があると誤動作する不具合を修正。
- 矩形選択(始点or終点が左下かつ論理行頭)時、下端の行が範囲から漏れる不具合を修正。
- テキストの処理方法を変更。
- 2014/02/22
- 初版公開。
ソースコード
//■行コメントのアン・アウト
// 2014/02/22-2015/02/14
//・行頭にコメント文字が有れば削除し、無ければ付加する。空白行には付加しない。
//■行コメント文字の定義 ●初期値="//"
var $comment = "//";
//■インデントされたコメント文字も削除(true:する/false:しない) ●初期値=false
var $indent = false ? "[ \t]*" : "";
//▼編集モードによる定義切替
switch (Document.Mode.toLowerCase()) {
case "bat":
$comment = "::"; break;
case "c#" || "c++" || "javascript":
$comment = "//"; break;
case "ini" || "python" || "ruby":
$comment = "#"; break;
case "visualbasic" || "vbscript":
$comment = "'"; break;
}
with (Document.Selection) {
var ty = GetTopPointY(mePosLogical);
var by = GetBottomPointY(mePosLogical);
var bx = GetBottomPointX(mePosLogical);
var br =(Text.match(/\n/g)||[]).length;
if (bx==1 && by-ty==br && br) by--; //次行行頭を含めないよう対策
SetActivePoint(mePosLogical, 1, by+1);
SetAnchorPoint(mePosLogical, 1, ty);
//コメント行なら文字削除 | 空白行以外なら文字付加
Text = Text.replace(new RegExp("^("+$indent+")"+$comment.replace(/([$()*+.?[\\\]^{|}])/g,"\\$1")+"|^(?![ \t]*$)","gm"),
function(s,s1){return (s)? s1: $comment});
SetActivePoint(mePosLogical, 1, by+1);
SetAnchorPoint(mePosLogical, 1, ty);
}
スポンサーリンク