見出しジャンプ

概要 編集

見出しとしてよく使われる特定の記号で始まる行、および墨括弧【aaa】のように見出しを示す修飾括弧のみの行にジャンプします。

2023年11月3日現在、認識する見出し記号は以下のとおりです(対象行内の前後の空白は無視します)。

  • 右記の記号いずれかで始まる行: #■□◆◇◯○◎●
  • 行頭、行末が右記の記号の組み合わせの行: ** | **** | 【】 | [] | [] | 《》 | 〈〉

#include ディレクティブを用いて共通部をまとめているので、以下3つのファイルをまとめてMacroフォルダに格納してご利用ください。

  • MoveToHeadingSymbolAbove.js : カーソルの上方向に移動します。Alt+Shift+Upなど、上方向をイメージするショートカットに割り当てるのがオススメ。
  • MoveToHeadingSymbolBelow.js : カーソルの下方向に移動します。Alt+Shift+Downなど、下方向をイメージするショートカットに割り当てるのがオススメ。
  • MoveToHeadingSymbolFunc.js : 上記2つのマクロから呼び出される関数を定義しています。

ソースコード 編集

MoveToHeadingSymbolAbove.js 編集

#include "MoveToHeadingSymbolFunc.js"
#title = "前の見出し記号に移動"

moveAbove();

MoveToHeadingSymbolBelow.js 編集

#include "MoveToHeadingSymbolFunc.js"
#title = "次の見出し記号に移動"

moveBelow();

MoveToHeadingSymbolFunc.js 編集

var doc = document;
var sel = document.selection;

var HEADING_SYMBOL = /^[\s ]*([#■□◆◇◯○◎●]|(\*{1,2}.+\*{1,2}|【.+】|\[.+\]|[.+]|《.+》|〈.+〉)[\s ]*$)/;
var MAX_MOVE_LINES = 10000;

function moveBelow() {
    // 現在位置を取得
    var currentY = sel.GetActivePointY(mePosLogical);
    // 下方向に向かって検索
    for (var i = currentY + 1; i < currentY + MAX_MOVE_LINES; i++) {
        var s = doc.GetLine(i);
        if (s.match(HEADING_SYMBOL)) {
            // マッチした行の先頭に移動
            sel.SetActivePoint(mePosLogical, 1, i, false);
            break;
        }
    }
}

function moveAbove() {
    // 現在位置を取得
    var currentY = sel.GetActivePointY(mePosLogical);
    // 上方向に向かって検索
    var goalY = currentY - MAX_MOVE_LINES;
    if (goalY < 0) goalY = 0;
    for (var i = currentY - 1; i > goalY; i--) {
        var s = doc.GetLine(i);
        if (s.match(HEADING_SYMBOL)) {
            // マッチした行の先頭に移動
            sel.SetActivePoint(mePosLogical, 1, i, false);
            break;
        }
    }
}
スポンサーリンク