Markdownでブログを書くとき、意外と面倒なのが 見出しレベルの調整 だ。
- ここは
##で良かったっけ? - いや
###だな…… - でもセクション構成を変えたら
####に落としたい…… - いちいち
#を増減するのがダルい!
そこで秀丸マクロで、カーソル行の見出しをワンキーで循環(サイクル) させる。
- 無し →
##(H2) ##→###(H3)###→####(H4)####→#####(H5)#####→######(H6)######→ 無し(解除)
この一本で、見出しレベル調整の手作業が消える。
何ができる?(このマクロの特徴)
このマクロは カーソルがある「その行だけ」 を対象にする。
- 選択いらない(カーソル行を自動選択して処理)
- 何もない行(空行)は何もしない(事故が少ない)
- すでに
### 見出しみたいになってたら、#を増やす - H6まで行ったら解除して「普通の行」に戻す
#の後のスペースが無くてもなるべく崩さない(あったら剥がす)
完成品:見出しサイクルマクロ(コピペで使える)
ファイル名:md_heading_cycle.mac
/*
md_heading_cycle.mac
カーソル行の見出しを循環:
無し -> ## -> ### -> ... -> ###### -> 無し
*/
$CR = char(13);
$LF = char(10);
// カーソル行を選択
golinetop;
beginsel;
golineend;
$s = gettext(seltopx, seltopy, selendx, selendy, 1);
#len = strlen($s);
// 空行なら終了
#i = 0;
#has = 0;
while (#i < #len) {
$ch = midstr($s, #i + 1, 1);
if ($ch != " " && $ch != "\t") { #has = 1; break; }
#i = #i + 1;
}
if (!#has) endmacro;
// 先頭の # カウント(行頭想定)
#h = 0;
while (#h < #len) {
if (midstr($s, #h + 1, 1) == "#") {
#h = #h + 1;
} else {
break;
}
}
// 本文取り出し(# の後に半角スペース1個あれば剥がす)
$body = $s;
if (#h > 0) {
#pos = #h + 1;
if (midstr($s, #pos, 1) == " ") {
$body = midstr($s, #pos + 1, #len - #pos);
} else {
$body = midstr($s, #pos, #len - (#pos - 1));
}
}
// 次のレベル決定:無しは H2(##)から
#next = 2;
if (#h > 0) {
if (#h < 6) {
#next = #h + 1;
} else {
#next = 0; // H6 まで行ったら解除
}
}
// # を組み立て
$prefix = "";
if (#next > 0) {
#k = 0;
while (#k < #next) {
$prefix = $prefix + "#";
#k = #k + 1;
}
$prefix = $prefix + " ";
}
// 置き換え
#sx = seltopx;
#sy = seltopy;
delete;
moveto #sx, #sy;
insert $prefix + $body;
導入手順(3分で終わる)
1) マクロをファイル保存
- 秀丸で新規ファイルを開く
- 上のマクロを貼り付ける
md_heading_cycle.macという名前で保存する
2) 秀丸に登録
- [マクロ] → [マクロ登録] を開く
- 空いてる番号を選ぶ
- さっき保存した
.macを指定して登録
3) ショートカット割り当て(超おすすめ)
- [その他] → [キー割り当て] を開く
- 登録したマクロにキーを割り当てる
- 例:
Ctrl + Shift + H(覚えやすい)
見出し調整は頻度が高い。ショートカットに入れた瞬間に強さが分かる。
使い方(動作が一発で分かる例)
例1:普通の行 → 見出し化
カーソルを置いてマクロを連打するとこうなる。
実行前
導入手順(3分で終わる)
1回目(H2)
## 導入手順(3分で終わる)
2回目(H3)
### 導入手順(3分で終わる)
3回目(H4)
#### 導入手順(3分で終わる)
…と上がっていき、最後は解除される。
例2:H6まで行ったら解除
実行前
###### 超細かい見出し
実行後
超細かい見出し
H6は“最終段”。そこまで行ったら普通の行に戻る。
なぜ「H1」から始めないのか?
ブログ(特にWordPressテーマ)だと、H1はタイトル側が持ってるケースが多い。
本文内は H2スタート の方が構造として安定する。
だからこのマクロは、見出し無し → ## から始める設計にしてある。
(ここは好みで変えられる)
カスタム:H1から始めたい場合
次の行:
#next = 2;
を、
#next = 1;
に変えるだけで「無し → #(H1)」から始まる。
仕組み(ざっくりでOK)
このマクロは単純に言うと、
- カーソル行を自動で選択
- 行頭の
#の数(見出しレベル)を数える - 本文部分(
#とスペースの後ろ)だけ取り出す - 次のレベル(+1、H6なら解除)を決める
##みたいなプレフィックスを作って置き換える
という流れで動く。
よくある質問
Q. 空行に実行したらどうなる?
A. 何もしない。空行は判定で弾いてる。
Q. ###見出し みたいにスペース無しでも動く?
A. なるべく崩さないようにしてる。スペースがあれば剥がして、無ければそのまま本文扱いに寄せる。
Q. 行頭に # があるだけの文字列は?
A. それも見出し扱いでカウントされる。用途が特殊なら「見出しは必ず # + 半角スペース」運用にしとくと事故が減る。
まとめ:構成が崩れなくなる
見出しレベル調整が速くなると、記事の構成を気軽にいじれる。
結果、読みやすい記事に仕上がる。
- セクション分け → 迷わずH2
- 補足の小見出し → 連打でH3/H4
- 深掘りの中見出し → さらに連打
- いらなくなった → H6まで回して解除
秀丸を「ブログ執筆環境」にするなら、このマクロは確実に入れとけ。

コメント