我最喜欢的vim功能之一是能够执行
set path=/my/project/root/**
然后使用
:find SomeClassFile.java
唯一的问题是,我有一些在那个级别生成的目录,无法移动并希望从这样的搜索中排除。 我似乎无法弄清如何排除那些目录。 有人知道如何/是否可以做到这一点吗?
我最喜欢的vim功能之一是能够执行
set path=/my/project/root/**
然后使用
:find SomeClassFile.java
唯一的问题是,我有一些在那个级别生成的目录,无法移动并希望从这样的搜索中排除。 我似乎无法弄清如何排除那些目录。 有人知道如何/是否可以做到这一点吗?
所以,你会在/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映射或其他内容。
诚然,它在文件系统中留下了“残留物”,但许多其他环境都会创建项目文件。
我相信你无法从"**"
搜索中排除某些内容。相反,你可以指定该目录下所有不包含生成代码的子目录,例如
set path=/my/project/root/src/**,/my/project/root/com/**,/my/project/root/foo/**
这应该由&wildignore选项来处理。然而,据我所知,它并没有。 我已经就此问题提交了一个错误报告,但自那以后我还没有看到任何补丁。
同时,我开发了一个类似于globpath的函数,它会忽略包含不需要的模式(例如/CVS/)的路径,并在我的类似于find的命令中使用此函数。
我认为您可以通过设置wildignore
变量来从"**"
搜索中排除某些内容。
例如:
set wildignore+=*.swp,*.bak,*.class
或者像这样:
set wildignore+=*/node_modules/*,*/public/lib/*
find
命令,它不会在那些目录中搜索。:e `find . -name foo.java -print`
所以你可以编写自己的脚本来排除任何你想要排除的目录。我已经做了类似的事情,将 .svn 目录从 :grep
中排除。
有关更多信息,请参阅 vim 中的 :h backtick-expansion
。