project-find-file 查找文件不是在整个工程里面查找,而是在当前打开文件所在的目录里面查找的,这个要怎么处理呢

在使用project-find-file 查找文件的过程中, 发现它不是在整个工程里面查找,而是在当前打开文件所在的目录里面查找的,使用起来很不方便。

现在的需求是在整个工程里面去查找,这个要怎么处理呢?

另外发现 project的路径总是会变动。 譬如说,打开emacs后,第一次使用project-find-file ,会提示让你设置project路径,设置完成后。 不知道怎么操作后,发现project路径变了,不是刚才设置的路径了。

我在 emacs -Q 中打开某个 git 项目文件后,在项目子目录中使用 C-x p f (project-find-file) ,以下是补全提供的内容,这些内容包括了项目中的所有文件:

能否提供更加详细的信息,如项目是否使用 git,或者具体的操作步骤和截图

在你的 project 里,M-:(project-current) 看一下状态对不对。 默认的 backend 只有 vc 和 ede。你要是其它的情况要自己扩展一下,或者用 project-remember-projects-under 手动增加一下。

你说的工程指的是什么? 如何知道哪个目录是工程的根目录?

建议先看看文档

项目是 Android AOSP的源码,里面有非常多的git仓库组成。

(project-current)project-remember-projects-under 这两个变量都没有找到

譬如说,我下载一份代码,我会在代码根目录下面生成gtags,然后在代码根目录下执行emacs。那么这份代码,就是一个工程

我指的是逻辑上如何判断一个你说的”工程根目录“,例如一般有 .git 的目录会被作为根目录

你也可以通过 project-vc-extra-root-markers 手动添加需要检测的文件

怎么才能不把 .git 的目录当成根目录呢? 因为我阅读的代码是Android AOSP,里面,有很多个 .git。 查看了一下。project-vc-extra-root-markers 这个变量是nil

(setq project-vc-extra-root-markers '(“.git”)) 这样配置,还是不行。

我的项目包含多个子目录,每个子目录都有自己的版本控制(例如 Git),但我想将整个项目作为一个大的项目处理

可以在上级添加一个 .project 文件试试

再项目代码根目录,添加了.project 文件,还是不行

同时把 project-vc-backend-markers-alist 设置为 nil 呢

(setq project-vc-backend-markers-alist nil)

这样设置,比刚才稍微好了一点。 每次执行project-find-file 的时候,都会弹出 让选择 project的界面

1/1 Select project:
… (choose a dir)

在选择目录的时候,都会默认当前文件最近的目录,而不是项目根目录。每次都要手动切换到根目录。

补充设置为nil 之后, 每次 project-find-file的时候,都会要求 select project ,并且select project 的目录,是当前打开文件所在的目录

然后可以把 default-directory 设置成项目根目录,只不过这样感觉好邪道。。

是有点邪,,, 刚才发现,还有一个命令 ggtags-find-file ,可以在工程里面搜索 :joy:

project-find-functions

可参考 https://github.com/casouri/lunarymacs/blob/7fa644409fddeda8e86cb0bf64a33ef0904334a9/star/edit.el#L92

我有时候看用buildroot构建的项目含多个子仓库也会有这样的烦恼,不过我是用doom配的projectile,在项目根目录建立.projectile就好了,缺点就是搜索文件名都要卡一阵(好像几十万个文件),感觉是projectile自己做的文件名(路径?)缓存不给力

不好意思离题了,关注楼主的最终解决方案