コメントアウトとアンコメントのマクロを簡単ですが作りました。
コメントアウト
選択行(していない場合はカーソル位置の行)をコメントアウトするマクロです。(面倒だったため、コメントのスタイルは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つにまとめるために、処理を AddRefUndoBuffer と SetUndoBuffer で挟んでいます。
// コメント行であればアンコメントする
// 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();
ファイルの拡張子によって、コメントの形式を変えたい場面が出てくると思いますが、その時になったらまた考えたいと思います。
好きなようにいじって使ってみてください。