vim path var,不包括**匹配的dirs

时间:2008-12-17 19:04:14

标签: vim

我最喜欢的vim功能之一就是能够做到

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

然后使用

:find SomeClassFile.java

唯一的问题是,我在该级别有一些生成的目录,我无法移动并希望从这些搜索中排除。我似乎无法弄清楚如何排除这些目标。任何人都知道如何做到这一点?

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

我不知道使用vim语法的方法,但你可以自己创建一个.vimrc.proj文件(我的命名约定),并用你想要的与该项目有关的任何内容填充它,然后'source'它。

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

设置路径= / my / project / root / src / **,/ my / project / root / com / **,/ my / project / root / foo / **

然后从vim内部:

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

基本上,一旦你设置了文件,设置项目路径的键击次数就会相似。当然,您也可以在其中放置其他项目特定设置,例如cscope映射或其他任何设置。

不可否认,它在文件系统中留下了“掉线”,但很多其他环境都会创建项目文件。

答案 2 :(得分:1)

它应该由& wildignore选项来处理。但是,AFAIK,它没有。 我确实发布了关于这个主题的错误报告,但从那以后我没有看过任何补丁。

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

答案 3 :(得分:1)

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

例如:

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

或其他东西链接:

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

现在,如果您使用find命令,则不会搜索这些目录。

答案 4 :(得分:0)

如果您使用类似unix的系统,则可以使用反引号来运行这样的命令行脚本:

:e `find . -name foo.java -print`

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

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