在Vim中find一个文件(通过recursion目录search)
有没有什么办法在Vim中recursionsearch文件(需要时使用通配符)? 如果不是本地的,有没有可以处理这个插件?
您可以使用:edit命令使用通配符。 所以, 
 :e **/test/Suite.java 
将打开test / Suite.java,无论它在当前目录层次结构中。 这适用于制表符完成,因此您可以在打开文件之前使用[制表符]展开通配符。 另请参阅wildmode选项,以便浏览所有可能的扩展。
另一个诀窍是使用
 :r! find . -type f 
 将当前目录中所有文件的列表加载到缓冲区中。 然后,您可以使用所有常用的vim文本处理工具来导航/sorting/修剪列表,而CTRL+W gf可以在新窗格中的光标下打开文件。 
 有一个find命令。 如果将**添加到path中,则可以recursionsearch。 
 :set path 
会告诉你你当前的path,添加**做类似的事情
 :set path=.,/usr/include,,** 
  **之前我从最初的位置复制:set path 
那么你可以input
 :find myfile.txt 
它神奇地打开!
如果将set命令添加到.vimrc中,它将确保您将来可以执行recursionsearch。 它似乎没有search点目录(例如.ssh)
我build议ctrlp.vim 。 这是一个非常好的插件,适合在大型项目中工作。 它通过文件名或完整pathsearch,正则expression式search,项目根目录的自动检测(带有.git | hg | svn | bzr | _darcs文件夹的目录),个性化文件名排除等等。
 只需按<cp> ,它会打开一个非常直观的窗格,您可以在其中search您想要的内容: 
  
 
一次可以select和打开多个文件。 它还接受附加的任意命令,如跳转到某一行,string出现或任何其他Vim命令。
回购: https : //github.com/kien/ctrlp.vim
vim作为内build的find命令(:help find)但是只能打开第一个find的文件。 然而,你可以使用这个惊人的插件: FuzzyFinder ,它可以完成你想要的任何事情,甚至更多
Command-T让你只需input一些字母就能快速find文件。 您也可以在新标签中打开文件,但需要使用ruby支持编译vim。
vim在名为grep,lgrep,vimgrep或lvimgrep的命令中可以执行此操作
这里是如何使用它们的教程http://vim.wikia.com/wiki/Find_in_files_within_Vim#Recursive_Search
你也可以像这样执行一个像vim这样的外部命令,如find或者grep
 :!find ... 
您可以使用 ! 运行shell命令:
 :! find . -name *.xml 
 您可以使用以下方式浏览文件系统:ex .  ,但我不知道如何recursionsearch(我是一个Vim新手 – 我只用了十年)。 
有一些stream行的文件浏览器插件:
- NERD树
- 强大的探险家
- vtreexplorer
参见SuperUser上的这个线程 。
我很惊讶没有人提到Unite.vim呢。
 查找文件(模糊或其他)只是它可以为开发人员做的冰山一angular。 它已经build立了对ag , git和其他各种程序/ utilities / vim插件的支持。 学习曲线可能有点陡峭,但我无法想象我的生活没有它。 用户群很大,并且错误被立即修复。 
类似Quickfix的结果浏览
用法:
 Find my.regex 
结果:
- 一个新标签打开
-  每行包含一个匹配grep -E正则expression式的相对path
-  击中:
-   <enter>或<Cw>gf在新选项卡中打开当前行上的文件
-   gf打开当前选项卡上的文件并丢失文件列表
 
-   
find所有文件:
 Find 
替代方法:
-   Gfind my.regex:只searchGit跟踪的文件(git ls-files)。 无组织要求:
-   Gtfind my.regex:和Gfind一样,但是从git顶层search而不是当前目录
-   Locate somefile:locate版本
码:
 function! Find(cmd) let l:files = system(a:cmd) if (l:files =~ '^\s*$') echomsg 'No matching files.' return endif tabedit set filetype=filelist set buftype=nofile " TODO cannot open two such file lists with this. How to get a nice tab label then? " http://superuser.com/questions/715928/vim-change-label-for-specific-tab "file [filelist] put =l:files normal ggdd nnoremap <buffer> <Enter> <CW>gf execute 'autocmd BufEnter <buffer> lcd ' . getcwd() endfunction command! -nargs=1 Find call Find("find . -iname '*'" . shellescape('<args>') . "'*'") command! -nargs=1 Gfind call Find('git ls-files | grep -E ' . shellescape('<args>')) command! -nargs=1 Gtfind call Find('git rev-parse --show-toplevel && git ls-files | grep -E ' . shellescape('<args>')) command! -nargs=1 Locate call Find('locate ' . shellescape('<args>')) 
根据你的情况(也就是说,假设下面的命令只能find一个文件),也许可以使用如下命令:
 :e `locate SomeUniqueFileName.java` 
这将导致Vim在当前标签(e命令)中打开一个作为运行结果的文件(在本例中),
 locate SomeUniqueFileName.java 
请注意,这里的魔术是围绕命令的反引号,它将shell命令的输出转换为可在Vim命令中使用的文本。
你可以用这个插件在你的“path”中recursion地find文件。 它也支持文件名的标签填写。
你不需要一个只为这个function的插件,下面的代码片段就足够了。
 function! FindFiles() call inputsave() let l:dir = input("Find file in: ", expand("%:p:h"), "dir") call inputrestore() if l:dir != "" call inputsave() let l:file = input("File name: ") call inputrestore() let l:nf = 'find '.l:dir.' -type f -iname '.l:file.' -exec grep -nH -m 1 ".*" {} \;' lexpr system(l:nf) endif endfunction nnoremap <silent> <leader>fo :call FindFiles()<CR>