0

org-structure-template-alistバッファーに絶対パス ( を介して自動生成) と相対パス (手動で記述)が混在していることに気付きました。

解決策を試す:

(let ((curdir (replace-regexp-in-string
               (expand-file-name "~/") "~/"
               (file-name-directory
                (or load-file-name buffer-file-name)))))
  (replace-regexp (concat "\"" curdir "(?1:([A-z]|[0-9]|/)*)" "\"") "\1")
  (message curdir))

しかし、まったく機能していないようです。これは、周囲の引用符の削除に失敗するだけで、ほとんど機能するバージョンを修正する試みでした:

(replace-regexp curdir "")

3 回目の試行:

(replace-regexp (concat ":tangle \"" curdir "\([A-z-+/.]+\)\"") "\1")
4

1 に答える 1

1

HOMEディレクトリの下の引用符で囲まれた絶対パスを一致させ、それらを引用符で囲まれていない相対パスに変換したいようです。

(replace-regexp
 (concat "\"" (regexp-quote (expand-file-name "~/")) "\\(.*?\\)\"")
 "\\1")

あなたの問題のほとんどは、Emacs の正規表現構文を理解していないことと、正規表現を文字列で表すときの追加のエスケープ要件が原因であると思われます。これらの領域にさまざまなエラーがあるためです。

特に、Emacs 正規表現\( \)はグループ化 (または\(?: \)非キャプチャ グループ) に使用されること、および文字列では、正規表現構文の一部であるすべてのバックスラッシュをエスケープする必要があることを覚えておいてください。以下をお読みください。

  • C-hig (elisp) Syntax for Strings RET
  • C-hig (elisp) Regular Expressions RET

regexp-quoteまた、リテラル以外の値を正規表現に組み込むときの の使用にも注意してください。(すべての正規表現をサポートする言語には、これに類似した機能があり、それを使用しないと問題が発生します。)

M-x regexp-builder RET対話的に正規表現を構築するために使用することを強くお勧めします。これにより、間違いなく、パターンが期待したものと一致しない理由を疑問に思う多くのフラストレーションが解消されます。

于 2013-03-03T03:59:25.620 に答える