【サクラエディタ/マクロ】複数行のコメントアウト/アンコメント


コメントアウトとアンコメントのマクロを簡単ですが作りました。

コメントアウト

選択行(していない場合はカーソル位置の行)をコメントアウトするマクロです。(面倒だったため、コメントのスタイルは1つしか対応していないですが……)

// 複数行を含むコメントアウトをする
CommentOut = function() {
	if (!IsTextSelected()) {
		SelectLine();
	}

	var lineFrom = GetSelectLineFrom();
	var lineTo = GetSelectLineTo()
		- (GetSelectColumnTo() == 1 ? 1 : 0);
	// 「//」を挿入するColumnの位置(一番ネストが浅い位置)を検索する
	var column;
	for (var i = lineFrom; i <= lineTo; i++) {
		MoveCursorLayout(i, 1, 0);
		GoLineTop();
		BeginSelect();
		var tmpColumn = GetSelectColumnFrom();
		if (i == lineFrom || tmpColumn < column) {
			column = tmpColumn;
		}
	} 
	MoveCursorLayout(lineFrom, column, 0); // 0: 未選択, 1: 範囲選択, 2: 矩形選択
	MoveCursorLayout(lineTo, column, 2);
	InsText("//");
}; CommentOut();

アンコメント

選択行(していない場合はカーソル位置の行)をアンコメントするマクロです。Ctrl+Z/Yの挙動を1つにまとめるために、処理を AddRefUndoBufferSetUndoBuffer で挟んでいます。

// コメント行であればアンコメントする
// 2文字のコメントのみサポートする
UnComment = function() {
	AddRefUndoBuffer(); // Ctrl+Z/Yでの挙動を1つにまとめる ここから
	if (!IsTextSelected()) {
		SelectLine(0);
	}
	var lineFrom = GetSelectLineFrom();
	var lineTo = GetSelectLineTo()
		- (GetSelectColumnTo() == 1 ? 1 : 0);
	// 選択行が全てコメントかチェック
	for (var i = lineFrom; i <= lineTo; i++) {
		if (GetLineStr(i).replace(/\s*/, "").indexOf("//") != 0) {
			InfoMsg("Line \"" + i + "\" is not supported.");
			return;
		}
	}
	// 行頭のコメントを削除
	for (var i = lineFrom; i <= lineTo; i++) {
		MoveCursorLayout(i, 1, 0);
		GoLineTop();
		Delete();
		Delete();
	}
	SetUndoBuffer(); // Ctrl+Z/Yでの挙動を1つにまとめる ここまで
}; UnComment();

ファイルの拡張子によって、コメントの形式を変えたい場面が出てくると思いますが、その時になったらまた考えたいと思います。

好きなようにいじって使ってみてください。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です