Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在emacs中进行grepping之前,如何切换到特定目录?_Emacs_Grep_Working Directory - Fatal编程技术网

在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
这样的目录中变灰,因为缺少权限。