我对我的所有项目都很感兴趣:
(defun grep-all-projects(start end)
(interactive "r")
(if (and transient-mark-mode mark-active)
(setq my-word (buffer-substring-no-properties start end))
(setq my-word (thing-at-point 'word))
)
(let ((default-directory (getenv "REPOS_DIR")))
(message "===> Grepping '%s' in %s" my-word (getenv "REPOS_DIR"))
(grep (format "grep --exclude-dir target -r -ne '%s' ." my-word)))
)但是不知何故,grep是在根目录(/)上执行的,即使grep buffer正确地说:
-*- mode: grep; default-directory: "/repos/" -*-
Grep started at Tue Jun 6 10:38:08怎么一回事?emacs grep是否不尊重default-directory
编辑
此解决方法在不使用default-directory的情况下起作用:
(defun grep-all-projects(start end)
(interactive "r")
(if (and transient-mark-mode mark-active)
(setq my-word (buffer-substring-no-properties start end))
(setq my-word (thing-at-point 'word))
)
(message "===> Grepping '%s' in %s" my-word (getenv "REPOS_DIR"))
(grep (format "grep --exclude-dir target -r -ne '%s' %s" my-word (getenv "REPOS_DIR")))
)我仍然有兴趣知道为什么第一个实现不能按预期工作
发布于 2017-06-06 23:53:35
M-x cd将切换到您输入的目录。它更改缓冲区局部变量default-directory的值。C-h f cd告诉您:
Lisp cd是一个用files.el编写的交互式编译
函数。
(cd DIR)
使DIR成为当前缓冲区的默认目录。
如果您环境中包含CDPATH变量,请在解析相对目录名时尝试每个目录列表(由出现的path-separator分隔)。在GNU和类GNU系统中,路径分隔符是冒号。
https://stackoverflow.com/questions/44385534
复制相似问题