![如何将正则表达式与 fzf 一起使用?](https://linux22.com/image/190734/%E5%A6%82%E4%BD%95%E5%B0%86%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B8%8E%20fzf%20%E4%B8%80%E8%B5%B7%E4%BD%BF%E7%94%A8%EF%BC%9F.png)
例如,在 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
:
- 这个搜索会发现没有文件:
temp/test$
- 这个搜索会发现所有 6 个文件:
temp/test
- 所以,如果你想找到只是
test
没有扩展名的文件, 你必须在您的搜索模式中添加一个空格, 像这样!这个搜索会发现只有3个test
文件没有文件扩展名(并且temp
在路径中较高的位置具有模式):temp /test$
在两个模糊搜索模式之间添加一个空格(temp
和/test$
)会产生很大的不同!
请注意,此搜索也将找到所有 6 个文件:
temp /test
总之,要查找 3 个test
没有扩展名的文件,您必须使用空格分隔模糊搜索参数,并$
在末尾使用 来指示“行尾”:
temp /test$
当然,对模糊搜索参数之间的空间的相同要求^
也适用于“行首”搜索字符。 (这个例子并没有很好地说明这一点,但是原理是一样的。):
^temp /test