Vim路径变量,从**匹配中排除目录

7

我最喜欢的vim功能之一是能够执行

set path=/my/project/root/**

然后使用

:find SomeClassFile.java

唯一的问题是,我有一些在那个级别生成的目录,无法移动并希望从这样的搜索中排除。 我似乎无法弄清如何排除那些目录。 有人知道如何/是否可以做到这一点吗?

5个回答

3
我不知道有没有使用vim语法的方法,但是你可以创建一个.vimrc.proj文件(我的命名约定),并填写与该项目相关的任何内容,然后“source”它。

所以,你会在/my/project/root/.vimrc.proj中拥有以下内容(使用Paul Tomblin的示例):

set path=/my/project/root/src/**,/my/project/root/com/**,/my/project/root/foo/**

然后从vim内部执行:

:source /my/project/root/.vimrc.proj

基本上,一旦设置了文件,设置项目路径就需要相似数量的按键。当然,您还可以在其中放置其他特定于项目的设置,例如cscope映射或其他内容。

诚然,它在文件系统中留下了“残留物”,但许多其他环境都会创建项目文件。


3

我相信你无法从"**"搜索中排除某些内容。相反,你可以指定该目录下所有不包含生成代码的子目录,例如

set path=/my/project/root/src/**,/my/project/root/com/**,/my/project/root/foo/**

不幸的是,这就是我最后做的事情。 - davetron5000
1
2017年是否仍然如此? - Niko Bellic
1
似乎在2023年仍然是这种情况.. :( - Levi

1

这应该由&wildignore选项来处理。然而,据我所知,它并没有。 我已经就此问题提交了一个错误报告,但自那以后我还没有看到任何补丁。

同时,我开发了一个类似于globpath的函数,它会忽略包含不需要的模式(例如/CVS/)的路径,并在我的类似于find的命令中使用此函数。


1

我认为您可以通过设置wildignore变量来从"**"搜索中排除某些内容。

例如:

set wildignore+=*.swp,*.bak,*.class

或者像这样:

或者像这样:

set wildignore+=*/node_modules/*,*/public/lib/*

现在,如果您使用find命令,它不会在那些目录中搜索。

0
如果您使用的是类Unix系统,可以使用反引号来运行命令行脚本,例如:
:e `find . -name foo.java -print`

所以你可以编写自己的脚本来排除任何你想要排除的目录。我已经做了类似的事情,将 .svn 目录从 :grep 中排除。

有关更多信息,请参阅 vim 中的 :h backtick-expansion


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接