使用vim在项目中查找文件

Joh*_*ohn 1 vim

我使用 VIM 作为 Laravel 项目的主要代码编辑器。当我在 VIM 中时,我想搜索一个可以作为tabnew或作为新vsplit窗格打开的文件。有人告诉我有一个find 命令。所以我尝试了这样的事情:

:find ~/development.project1.com/ -name *Controller.php
Run Code Online (Sandbox Code Playgroud)

但这只给了我错误 E345: Can't find file "/var/www/development.project1.com/ -name *Controller.php" in path

我做错了什么?如何在 VIM 中快速搜索其他文件并将它们作为tabnew或作为新vsplit窗格打开?

小智 5

vimfind命令与 unixfind命令不同。要了解是什么find,请使用在线帮助!

:h find
Run Code Online (Sandbox Code Playgroud)

这会给你一个答案:

:fin[d][!] [++opt] [+cmd] {file}                                                                                                                
Find {file} in 'path' and then :edit it.                                                                                
Run Code Online (Sandbox Code Playgroud)

换句话说,:find就像:edit但在您path的目录中而不是仅在当前目录中查找。请注意,vimpath与操作系统 shell 变量不同PATH。你可以找出你path

set path?
Run Code Online (Sandbox Code Playgroud)

很可能您的路径(或路径)中没有项目的每个子目录。你也不应该。

如果要编辑名称以 Controller.php 结尾的文件,搜索每个子目录的简单解决方案是**在文件名之前指定与每个子目录的通配符匹配:

:e **/*Controller.php
Run Code Online (Sandbox Code Playgroud)

请注意,执行上述操作只会打开与通配符匹配的第一个文件。如果有多个匹配的文件,而那不是您想要的文件,那么运气不好。

如果您想在多个匹配项中选择一个文件,并且不想使用插件,则可以使用 unix file 命令读取列表

:r! find . -name \*Controller.php
Run Code Online (Sandbox Code Playgroud)

您最终会得到一个包含文件列表的缓冲区。要打开其中一个文件,请将光标移动到文件名上方,然后使用gf命令打开它。

虽然不是您问题的真正答案,但使用 vanilla vim,可以wildmode完成命令行。如果wildmode启用,当你打开一个新文件时,vim 将完成文件名:e

最后,vim 有许多不同的模糊查找器插件。如果你不需要windows,我推荐fzf。