Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim findfile函数的用法?_Vim - Fatal编程技术网

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

我正在寻找一个示例,说明如何在vim脚本中使用findfile函数递归地向上搜索文件,特别是使用通配符

每当我将通配符作为第一个函数参数的一部分时,这似乎不起作用

例如,使用以下目录结构:

~/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个或更多字符。在搜索模式中,这将是“.*”。请注意,“.”不用于文件搜索