Learn how to fix Markdown issues with tags and URLs in Obsidian using an Emacs macro for automatic spacing adjustments.
相模原市で 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 を使っている方が、どれだけいるかなあ。)