[小ネタ] 日本語Markdownの「ありがち」をEmacsマクロで一括修正

Learn how to fix Markdown issues with tags and URLs in Obsidian using an Emacs macro for automatic spacing adjustments.

A flat, minimalist illustration of a futuristic robot sitting at a desk, programming a macro in an old-school Emacs text editor on a computer screen. The Emacs interface is recognizable with its retro, text-based design. The robot is sleek and modern, with glowing elements on its interface. A human stands behind the robot, observing with an impressed and curious expression. The setting is simple, softly colored, with muted tones and a calm, focused atmosphere. The illustration is in a wide aspect ratio, emphasizing clean and minimalist details. Illustrated by ChatGPT and DALL-E.

相模原市で IoT 設計を受託しているファームロジックスです。

今日は 2025年初の小ネタ記事です。

私事ですが、普段から日記ふうのログを Markdown で書くようにしています。ところが、次のようなテキストを書くと、Obsidian(や一部の Markdown ビュアー)で、タグや URL が正しく認識されません。(Obsidian 1.7.7 で確認)

  • Obsidian では、# に続けてタグを書くことができます。#memo
  • 今日はこんな便利なサイトを見つけました。https://flogics.com/

前者では、全角文字「。」に続けて # を書くとタグと認識されませんし、後者では、http で始まる部分が URL と認識されません。本来は Obsidian が正しく認識してくれると嬉しいのですが、Markdown の仕様(?)では、非 ASCII 文字の扱いについて、そこまで明確に定義されていないでしょうから、やむを得ないかも知れません。しかし、特に前者については、Obsidian のタグサーチが働かなくなるので、ちょっと困ります。

私は普段から Emacs エディタを使っているので、次のようなマクロを定義してみました。ご推察の通り、ChatGPT に手伝って貰いました。

(defun fix-markdown-spacing ()
  "日本語文字(非ASCII文字)の後にスペースを挿入します。

この関数は以下の手順で動作します:
1. 非ASCII文字の後に `#` または `http` が続く箇所を正規表現で検索します。
2. ユーザーに確認しながら、該当箇所にスペースを挿入します。
3. 対応するすべてのパターンについて繰り返し処理を行います。

処理されるパターン:
- 非ASCII文字 + `#`
- 非ASCII文字 + `http`"
  ;; Emacs Lisp で書かれた関数を対話的に(M-x やキーボードショートカットを使って)
  ;; 呼び出せるように
  (interactive)
  ;; 正規表現のパターンを定義(検索用と置換用のペア)
  (let ((patterns '(("\\([^[:ascii:]]\\)\\(#\\)" "\\1 \\2")
                    ("\\([^[:ascii:]]\\)\\(http\\)" "\\1 \\2"))))
    ;; 各パターンに対して置換処理を実行
    (dolist (pattern patterns)
      ;; 正規表現(検索)と置換内容を取り出す
      (let ((search (car pattern))   ; 検索用正規表現
            (replace (cadr pattern))) ; 置換後の文字列
        (save-excursion
          ;; バッファの先頭から検索を開始
          (goto-char (point-min))
          ;; query-replace-regexp を使って確認付きで置換を実行
          (query-replace-regexp search replace))))))

Markdown ファイルを編集中に、M-x fix-markdown-spacing と実行すると、これらの部分を直してくれます。ちょっと便利です。ショートカットキーに割り当てれば、もっと良いかも知れません。

よろしかったら、御利用ください。(Emacs を使っている方が、どれだけいるかなあ。)

お問い合わせはお気軽に!

お問い合わせを頂いた後、継続して営業活動をしたり、ニュースレター等をお送りしたりすることはございません。
御返答は 24時間以内(営業時間中)とさせて頂いております。必ず返信致しますが、時々アドレス誤りと思われる返信エラーがございます。返答が届かない場合、大変お手数ではございますが別のメールアドレスで督促頂けますと幸いです。

コメントを残す