regex - Emacs lisp 正则表达式从缓冲区文件名中提取当前相对路径

标签 regex emacs elisp

我正在尝试从 buffer-file-name 变量中提取相对于主目录的当前目录。考虑:

(defun test ()
  (interactive)
  (let ((fn "/home/user/dir1/dir2/file.txt"))
    (when (string-match "^.*?/user/" fn)
      (let ((temp (replace-match "${HOME}/" nil nil fn)))
        (when (string-match "/.*?$" temp)
          (message (replace-match "/" nil nil temp)))))))

在这里我想得到${HOME}/dir1/dir2/,但我得到的是${HOME}/。我在这里缺少什么?

最佳答案

试试这个:

(let ((str "/home/user/dir1/dir2/file.txt"))
  (when (string-match "^.*?/user/" str)
    (file-name-directory (replace-match "${HOME}/" nil nil str))))

关于regex - Emacs lisp 正则表达式从缓冲区文件名中提取当前相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22375046/

相关文章:

javascript - 如何在html模板中的数字中插入逗号?

javascript - 用于在两组字符之间提取文本的正则表达式 (Javascript)

emacs - 错误: package. el尚未初始化

emacs - 有没有办法检查 Emacs Lisp 函数何时添加到 Emacs?

r - 提取最后一次出现的字符和固定表达式之间的字符串

python - 识别 Pandas 数据框列是否包含列表中的元素

emacs - 如何使用 emacs 美化符号模式?

Emacs:删除空格到下一个非白色字符

python - 如何使 Anaconda python 在 Windows 上的 Emacs 中工作

regex - Emacs:替换文件扩展名