在Vim中查找文件(通过递归目录搜索)
是否有任何方法可以在Vim中递归搜索目录中的文件(需要时使用通配符)?如果不是本机的,是否有插件可以处理此问题?vim在名为grep、lgrep、vimgrep或lvimgrep的命令中有bild可以处理此问题 下面是关于如何使用它们的教程 您还可以像这样执行vim中的find或grep这样的外部命令在Vim中查找文件(通过递归目录搜索),vim,Vim,是否有任何方法可以在Vim中递归搜索目录中的文件(需要时使用通配符)?如果不是本机的,是否有插件可以处理此问题?vim在名为grep、lgrep、vimgrep或lvimgrep的命令中有bild可以处理此问题 下面是关于如何使用它们的教程 您还可以像这样执行vim中的find或grep这样的外部命令 :!find ... 你可以用!要运行shell命令,请执行以下操作: :! find . -name *.xml vim作为内置的find命令(:help find),但只打开找到的第一个
:!find ...
你可以用!要运行shell命令,请执行以下操作:
:! find . -name *.xml
vim作为内置的find命令(:help find),但只打开找到的第一个文件。然而,你可以使用这个惊人的插件:它可以做你想要的一切,甚至更多你可以用
:ex.
浏览文件系统,但我不知道如何递归搜索(我是一个Vim新手-我只使用了十年)
有几种流行的文件浏览器插件:
另请参见。有一个查找命令。如果将
**
(请参阅:help starstar
)添加到的“路径”
,则可以递归搜索:
:set path
将显示当前路径,通过执行以下操作添加**
:set path+=**
然后你就可以打字了
:find myfile.txt
它神奇地打开了
如果将set命令添加到.vimrc中,它将确保将来可以进行递归搜索。它似乎不搜索点目录(.ssh例如)您可以在
:edit
命令中使用通配符。所以
:e **/test/Suite.java
将打开test/Suite.java,无论它位于当前目录层次结构的何处。这与制表符完成一起工作,因此您可以在打开文件之前使用[tab]展开通配符。另请参见该选项,了解浏览所有可能扩展的方法
另一个技巧是使用
:r! find . -type f
将当前目录中所有文件的列表加载到缓冲区中。然后,您可以使用所有常用的vim文本操作工具来导航/排序/修剪列表,并使用
CTRL+W gf
在新窗格中打开光标下的文件。您可以使用此工具在“路径”中递归查找文件。它还支持文件名的制表符填写。只需键入一些字母,即可快速查找文件。您也可以在新选项卡中打开该文件,但它需要使用ruby支持编译的vim。我推荐。这是一个非常好的插件,非常适合在大型项目中工作。它具有按文件名或完整路径搜索、regexp搜索、自动检测项目根目录(带有.git | hg | svn | bzr | u darcs文件夹的根目录)、个性化文件名排除等功能
只需按
,它将打开一个非常直观的窗格,您可以在其中搜索所需内容:
可以同时选择和打开多个文件。它还接受其他任意命令,如跳转到某一行、字符串出现或任何其他Vim命令
回复:类似快速修复的结果浏览 用法:
Find my.regex
结果:
- 将打开一个新选项卡
- 每一行都包含一个与
regex匹配的相对路径grep-E
- 点击:
或
以在新选项卡中打开当前行上的文件gf
在当前选项卡上打开文件并丢失文件列表gf
Find
替代方法:
:仅搜索Git跟踪的文件(Gfind my.regex
)。逃犯请求:Git ls文件
:类似于Gtfind my.regex
,但从git顶层而不是当前目录进行搜索Gfind
:定位某个文件
版本定位
函数!查找(cmd)
设l:files=system(a:cmd)
如果(l:files=~'^\s*$)
echomsg“没有匹配的文件。”
返回
恩迪夫
选项卡编辑
设置filetype=filelist
设置buftype=nofile
“TODO无法用此打开两个这样的文件列表。那么如何获得一个好的选项卡标签?”?
" http://superuser.com/questions/715928/vim-change-label-for-specific-tab
“文件[文件列表]
put=l:文件
正常ggdd
nnoremap gf
执行“autocmd BufEnter lcd”.getcwd()
端功能
命令!-nargs=1 Find调用Find(“Find.-iname'*'”。shellescape(“”)。“*'”)
命令!-nargs=1 Gfind call Find('git ls files | grep-E'.shellescape(“”))
命令!-nargs=1 Gtfind call Find('git rev parse--show top-level&&git ls files|grep-E'.shellescape('')
命令!-nargs=1定位调用Find('Locate'.shellescape('')
我很惊讶还没有人提到
查找文件(模糊或其他方式)这只是它能为开发者做的事情的冰山一角。它内置了对
ag
、git
,以及无数其他程序/实用程序/vim插件的支持。学习曲线可能有点陡峭,但我无法想象没有它我的生活。用户群很大,漏洞会立即修复。取决于你的情况ion(也就是说,假设以下命令只找到一个文件),可以使用如下命令:
:e `locate SomeUniqueFileName.java`
这将导致Vim在当前选项卡(e命令)中打开一个运行结果文件(在本例中)
请注意,这里的神奇之处在于命令周围的反勾号,它将shell命令的输出转换为可在Vim命令中使用的文本。您不需要仅为该函数使用插件,下面的代码片段就足够了
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>
function!FindFiles()
调用inputsave()
让l:dir=input(“在中查找文件:”,展开(“%:p:h”),“dir”)
调用inputrestore()
如果l:dir!“”
调用inputsave()
让l:file=input(“文件名:”)
调用inputrestore()
让l:nf='find'.l:dir.'-typef-iname'.l:file.'-execgrep-nH-m1'.*“{}\;'
lexpr系统(l:nf)
恩迪夫
端功能
nnoremap fo:callfindfiles()
ag工具和相应的ag vim插件完美地解决了这个问题:
要使用某种模式查找文件,请使用:
AgFile! pattern
它将打开曲
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>
AgFile! pattern
nnoremap <silent> <C-h> :AgFile! '<C-R><C-W>'<CR>
vnoremap <silent> <C-h> y :AgFile! '<C-R>"'<CR>
:args `find . -name '*xml'`