如何将正则表达式与 fzf 一起使用?

如何将正则表达式与 fzf 一起使用?

例如,在 vim 中,您可以搜索名称,例如test1,test2或者test9/\<test\d\>。我想要这个“功能”,比如查找test<num>文件名中包含该单词的文件名。我尝试了一下:

在此输入图像描述

但正如你所看到的,它不起作用。

这是我的 FZF 环境变量:

  • $FZF_DEFAULT_COMMAND rg --files --hidden --glob "!.git/*"

  • $FZF_DEFAULT_OPTS --prompt=' ' --cycle --preview='bat {}' +i --bind=ctrl-j:preview-half-page-down,ctrl-k:preview-half-page-up

如何使用 vim 和 sed 中的正则表达式模式来查找文件(以及是否可以在这些文件中查找单词)?

答案1

我不知道fzf是否可以做到这一点。但它确实有一些特殊字符,例如^(必须以)、$(必须以)结尾、!(不得包含)。至于在文件内搜索,您可以使用 白银搜索者 (ag)或者里格雷普 (rg)假设它们是通过使用命令安装的:Ag:Rg

您还可以利用添加多个模式,每个模式都用空格分隔:例如^core .py$ !test将匹配以“core”开头并以“.py”结尾的文件。并且不包含 'test' 您可以继续添加更多模式来缩小搜索结果范围。

答案2

除了已接受的答案之外,我想补充一点搜索模式中的空格也很重要,以便分离模糊搜索模式参数。

假设您有这个文件树。请注意,每个目录中都有一个test.txt和文件:test

temp/dir1/test.txt
temp/dir1/test

temp/dir2/test.txt
temp/dir2/test

temp/dir3/test.txt
temp/dir3/test

让我们尝试查找上面的所有 3 个文件,这些文件temp在其路径中的某处具有搜索模式,被命名test并具有没有文件扩展名:

在默认搜索模式下fzf

  1. 这个搜索会发现没有文件:
    temp/test$
    
  2. 这个搜索会发现所有 6 个文件:
    temp/test
    
  3. 所以,如果你想找到只是test没有扩展名的文件, 你必须在您的搜索模式中添加一个空格, 像这样!这个搜索会发现只有3个test文件没有文件扩展名(并且temp在路径中较高的位置具有模式):
    temp /test$
    

在两个模糊搜索模式之间添加一个空格(temp/test$)会产生很大的不同!

请注意,此搜索也将找到所有 6 个文件:

temp /test

总之,要查找 3 个test没有扩展名的文件,您必须使用空格分隔模糊搜索参数,并$在末尾使用 来指示“行尾”:

temp /test$

当然,对模糊搜索参数之间的空间的相同要求^也适用于“行首”搜索字符。 (这个例子并没有很好地说明这一点,但是原理是一样的。):

^temp /test

相关内容