判別式インデント

2024年6月27日 (木) 14:28時点におけるStarworshipper (トーク | 投稿記録)による版 (記事作成)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

https://www.haijin-boys.com/discussions/7938 を参考にしました。ありがとうございます。

概要 編集

スペース4つならスペース4つ、タブならタブでインデント・インデント解除するマクロを練習で作りました。

最初に選択範囲を走査して、選択範囲の行頭にコメントが有ったりしても、数行下のインデントを判別してインデントします。 他の例外は考えていない、雑な作りです。 個人的にはコメントアウトも一緒にインデントする作りが好きなので、選択範囲を全てインデントする作りになってます。

インデント 編集

// 選択されたテキストを取得
var selectionText = document.selection.Text;

// 行を分割
var lines = selectionText.split("\n");

// 最初の行を処理
var firstLine = lines[0];
var indent = "";

// 最初の数行を調査
for (var i = 0; i < lines.length; i++) {
    if (/^\t/.test(lines[i])) {
        indent = "\t";
        break;
    } else if (/^ {4}/.test(lines[i])) {
        indent = "    ";
        break;
    }
}

// 全ての行を処理
var processedText = lines.map(function(line) {
    // インデントを追加
    return indent + line;
}).join("\n");

// 変更されたテキストを選択範囲に反映
document.selection.Text = processedText;

// ハイライト検索を無効に
document.HighlightFind = false;


インデント解除 編集

// 選択されたテキストを取得
var selectionText = document.selection.Text;

// 行を分割
var lines = selectionText.split("\n");

// 最初の行を処理
var firstLine = lines[0];
var indent = "";

// 最初の数行を調査
for (var i = 0; i < lines.length; i++) {
    if (/^\t/.test(lines[i])) {
        indent = "\t";
        break;
    } else if (/^ {4}/.test(lines[i])) {
        indent = "    ";
        break;
    }
}

// 全ての行を処理
var processedText = lines.map(function(line) {
    // インデントを削除
    if (line.indexOf(indent) === 0) {
        return line.slice(indent.length);
    } else {
        return line;
    }
}).join("\n");

// 変更されたテキストを選択範囲に反映
document.selection.Text = processedText;

// ハイライト検索を無効に
document.HighlightFind = false;
スポンサーリンク