Vim findfile函数的用法?
我正在寻找一个示例,说明如何在vim脚本中使用findfile函数递归地向上搜索文件,特别是使用通配符 每当我将通配符作为第一个函数参数的一部分时,这似乎不起作用 例如,使用以下目录结构:Vim findfile函数的用法?,vim,Vim,我正在寻找一个示例,说明如何在vim脚本中使用findfile函数递归地向上搜索文件,特别是使用通配符 每当我将通配符作为第一个函数参数的一部分时,这似乎不起作用 例如,使用以下目录结构: ~/MyProject/ Test.sln src/ Test.cs 如果我在编辑文件Test.cs时运行以下函数,并将pwd设置为~/MyProject/src function! Test() let a = findfile("*.sln", ".;") ech
~/MyProject/
Test.sln
src/
Test.cs
如果我在编辑文件Test.cs时运行以下函数,并将pwd设置为~/MyProject/src
function! Test()
let a = findfile("*.sln", ".;")
echo a
endfunction
findfile似乎不返回任何内容。但是,如果我修改函数以删除widcard,如下所示:
function! Test()
let a = findfile("Test.sln", ".;")
echo a
endfunction
这正是我所期望的
我在ubuntu和windows上都进行了测试,我在两者上都看到了相同的行为。我是做错了什么,还是findfile不支持通配符?缺少对通配符的支持似乎是一个相当奇怪的遗漏。看来我一定是做错了什么事。一种使用外部(快速)查找的方法
function! Test()
let l:list=system("find .. -maxdepth 1 -name \*.sln")
echo l:list
endfunction
如果您使用的是通配符,我认为您需要的是
glob()
和/或globpath()
函数。请参见:h glob()
和:h globpath()
我很感激您的回答,但我认为这仅适用于*.sln文件位于父目录中的情况。我一直在寻找一种解决方案,它将递归目录结构,直到找到一个匹配的文件为止(我认为findfile就是这样工作的)。例如,如果我在~/MyProject/src/innersrc目录下编辑一个文件,我认为这个解决方案不起作用。@actf我明白了,你认为循环找到,。
然后。/..
直到你得到它怎么样?。或者,例如,尝试使用expand('%:p:h')
可以获得当前文件的完整路径。是的,我认为这是最好的方法。看起来获取工作目录,然后在父目录中循环并通过glob()使用通配符进行搜索就是我所需要的。我想你是对的,看起来findfile不支持通配符,而glob就是我要找的。我采用了这种方法,并编写了一个循环来遍历父目录,直到找到我要查找的内容。这正是我需要的,谢谢!下面是我想到的::帮助文件搜索让我认为它试图支持全局搜索,但实际上这似乎是错误的。这是vim中的一个bug吗?来自vim
:“*”的用法非常简单:它匹配0个或更多字符。在搜索模式中,这将是“.*”。请注意,“.”不用于文件搜索