在emacs中进行grepping之前,如何切换到特定目录?
我正在浏览我所有的项目:在emacs中进行grepping之前,如何切换到特定目录?,emacs,grep,working-directory,Emacs,Grep,Working 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)) ) (let ((default-director
(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缓冲区正确地表示:
-*- mode: grep; default-directory: "/repos/" -*-
Grep started at Tue Jun 6 10:38:08
发生了什么事?emacs
grep
是否不遵守默认目录
编辑
此解决方法不使用默认目录,可用于:
(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")))
)
我仍然有兴趣知道为什么第一个实现不能按预期工作
M-x cd
更改您输入的目录。它更改缓冲区局部变量默认目录
的值<代码>C-h f cd告诉您:
cd
是文件.el
中的交互式编译Lisp函数
(cd目录)
使DIR成为当前缓冲区的默认目录
如果您的环境包含一个CDPATH
变量,请尝试以下各项
目录列表(由以下内容的出现分隔)
解析相对目录名时使用路径分隔符。
在GNU和类似GNU的系统中,路径分隔符是冒号
是什么告诉您grep正在从根目录(
/
)工作?如果*grep*
缓冲区说默认目录
是/repos/
,那么这就是默认目录。@Drew我看到它在根目录上变灰了:这会花很长时间,它会抱怨说它无法在/var
这样的目录中变灰,因为缺少权限。