2010-09-17 41 views
2

说我在我的项目中有foo.js和bar.css文件。在vim中有一个“:find”命令,它查找匹配字符串的文件。但是,这个命令,唉,有一些限制。例如,如果我以这种方式启动 - “vim”,或甚至以这种方式 - “vim”。 - 在js子目录中找不到任何东西。但是,如果我以这种方式启动vim - “vim js/any_file_other_than_foo.js”,那么调用“:find foo.js”工作得很好。由于它不直观(我在同一个目录中工作,“pwd”返回相同的路径),我的第一个问题是 - 任何人都可以解释如何绕过这个问题吗?而且,甚至更广泛的是,是否有任何方法来输入类似find foo的东西 - 并打开第一个文件,该文件的名称与pattern foo匹配。如何驯服vim的“:find”命令

在此先感谢。

回答

2

一个很好的插件,实现类似的效果是Command-T

命令-T插件提供了一个最小的数 按键打开文件的 非常快速,直观的机制 。它命名为 “Command-T”,因为它的灵感来源于 “去文件”窗口绑定到 命令-T在TextMate中。

文件被通过输入出现在它们的路径, 并且通过该 知道出现在 某些位置的字符(例如, 后立即路径分隔) 应给予的算法是有序 字符选择更重。应该给予更多的分量。

这里是命令T的screencast在行动。

+0

很遗憾,这样一个真棒插件要求使用ruby – shabunc 2010-09-18 09:53:07

+1

@shabunc编译vim,那么你可以试试[lookupfile](http://www.vim.org/scripts/script)。 php?script_id = 1581)它的唯一依赖是另一个vimscript。 (尽管它与Cmd-T不一样) – idbrii 2011-06-12 16:39:59

7

你可以尝试

:e[dit] **/*foo*,然后按“选项卡”移动到第一场比赛。

**是目录匹配模式,而*是字符匹配。

如果你是这样的倾向,你可以写一个简单的模糊查找器的命令,以获取更多信息,您可以检查出VIM提示维基:http://vim.wikia.com/wiki/Find_files_in_subdirectories

+0

好吧,实际上,并不那么简单。调用:通配符将打开所有匹配项。 – shabunc 2010-09-17 20:12:51

+0

我应该已经更清楚了,按'tab'可以让你只打开第一场比赛。 – 2010-09-17 20:27:48

+0

你可能想要使用'set wildmenu',这样你就可以看到你正在滚动的匹配。另见':help wildmode' – idbrii 2011-06-12 16:43:08

4

Vim的:find通过搜索path变量中的每个目录(并忽略pwd)来工作。默认情况下,它以而不是递归搜索。这就是为什么当你打开一个js文件时find只能为你工作。 '。'在路径中指的是当前文件的目录 - 而不是pwd。

你可以改变路径,包括您想要的目录:

set path+=$PROJECT/js 

:help path

一个魔术位使用的是**添加到路径递归搜索这条道路:

" search recursively in my project 
set path+=$PROJECT/** 
" search recursively from the current file's directory 
set path+=./** 

更多的魔法见:help file-searching