Regex 在Emacs缓冲区中相对化绝对路径
我发现自己的缓冲区中混合了绝对路径(通过Regex 在Emacs缓冲区中相对化绝对路径,regex,emacs,relative-path,absolute-path,Regex,Emacs,Relative Path,Absolute Path,我发现自己的缓冲区中混合了绝对路径(通过组织结构模板自动生成)和相对路径(手工编写) 尝试解决方案: (let ((curdir (replace-regexp-in-string (expand-file-name "~/") "~/" (file-name-directory (or load-file-name buffer-file-name))))) (replace-regexp (con
组织结构模板自动生成)和相对路径(手工编写)
尝试解决方案:
(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 "")
第三次尝试:
(replace-regexp (concat ":tangle \"" curdir "\([A-z-+/.]+\)\"") "\1")
听起来您想匹配主目录下带引号的绝对路径,并将它们转换为不带引号的相对路径,那么:
(替换regexp
(concat“\”(regexp引号(扩展文件名“~/”)\(.*?\)\)
"\\1")
我怀疑您的大多数问题都源于不理解Emacs的regexp语法,以及在用字符串表示regexp时的额外转义要求,因为您在这些方面有各种错误
特别要记住,Emacs regexp使用\(\)
进行分组(或\(?:\)
进行非捕获组),并且在字符串中,需要转义regexp语法中的所有反斜杠。您应该阅读以下内容:
- 字符串的C-hig
(elisp)语法
- C-hig
(elisp)正则表达式
另外,请注意在将非文字值合并到regexp中时使用的regexp quote
。(所有支持regexp的语言都有类似的功能,不使用它会带来麻烦。)
我强烈建议使用M-xregexp builder
RET以交互方式构建regexp。这无疑会帮你省去很多挫折,让你想知道为什么你的模式不符合你的预期