首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在fzf.vim中使用带标志的Ripgrep

在fzf.vim中使用带标志的Ripgrep
EN

Stack Overflow用户
提问于 2020-12-17 07:06:59
回答 1查看 1.3K关注 0票数 3

我使用下面的函数使用波纹维姆中使用fzf搜索文件中的内容

代码语言:javascript
复制
function! RipgrepFzf(query, fullscreen)
  let command_fmt = 'rg --column --line-number --no-heading --color=always --smart-case -- %s || true'
  let initial_command = printf(command_fmt, shellescape(a:query))
  let reload_command = printf(command_fmt, '{q}')
  let spec = {'options': ['--phony', '--query', a:query, '--bind', 'change:reload:'.reload_command]}
  call fzf#vim#grep(initial_command, 1, fzf#vim#with_preview(spec), a:fullscreen)
endfunction

command! -nargs=* -bang FRG call RipgrepFzf(<q-args>, <bang>0)

我可以用它执行一个简单的搜索,但是我无法使用RG标志使我的搜索更加精确(文件类型搜索、排除目录搜索或子目录搜索等等)。

我发现一些文章建议对函数进行小改动,以获得我正在寻找的内容如下:

  • --之前删除%s 设command_fmt = 'rg --列--行号-没有标题-color=始终-智能-大小写%s \x-真
  • 删除shellescape函数 设initial_command = printf(command_fmt,a:query)

在进行这些更改之后,我可以在一开始使用标志,但是在更新我的搜索时,它并不像预期的那样工作。

我想使用RG,因为它在fzf in 维姆中(在终端中的工作方式相同)

EN

回答 1

Stack Overflow用户

发布于 2021-07-26 15:27:43

若要仅通过扩展名/文件类型搜索文件,请在命令行中尝试以下操作:

代码语言:javascript
复制
rg . --files -g "*.{py}"

使用此im只搜索python文件

我的产出:

代码语言:javascript
复制
> rg . --files -g "*.{py}"
./another.py
./colors_do_not_apply.py

将目录排除在ripgrep中

如果您想在当前目录下搜索all content from files

代码语言:javascript
复制
> rg --column --line-number --no-heading --color=always --smart-case --hidden -g "\!.git" .

注意到

  • --hidden用于隐藏文件
  • -g "\!.git"用于ignoring git文件夹(您可以对其他文件夹执行相同的操作)

注意事项

我使用了"\!.git",它只在终端中使用(我的zsh没有爆炸!)),在vim中,您可以使用它作为"!.git"

如果您只想在当前dir中搜索文件和exlcude git文件夹:

代码语言:javascript
复制
> rg --hidden -g "\!.git" --files .

在子目录中搜索是自动的,所以您不必担心。

最后

我看到您在github上复制粘贴了一个来自fzf.vim的花哨函数,我也使用了:)

这是我的功能:

代码语言:javascript
复制
" search for content in files in current project, including hidden ones and ignoring git
function! SearchContentInFiles(query, fullscreen)
  let command_fmt = 'rg --column --line-number --no-heading --color=always --smart-case --hidden -g "!.git" -- %s || true'
  let initial_command = printf(command_fmt, shellescape(a:query))
  let reload_command = printf(command_fmt, '{q}')
  let spec = {'options': ['--phony', '--query', a:query, '--bind', 'change:reload:'.reload_command, '--exact', '--pointer=@', '-i', '-m', '--cycle', '--border=none', '--marker=*', '--ansi', '--preview-window=left,50%', '--bind=alt-bspace:backward-kill-word,ctrl-x:beginning-of-line+kill-line,ctrl-a:select-all', '--color=16,fg+:bright-red,hl:bright-blue,hl+:green,query:blue,prompt:yellow,info:magenta,pointer:bright-yellow,marker:bright-blue,spinner:bright-blue,header:blue', '--prompt=content from files(+hidden) (git ignored) at . > ']}
  call fzf#vim#grep(initial_command, 1, fzf#vim#with_preview(spec), a:fullscreen)
endfunction

command! -nargs=* -bang SCIF call SearchContentInFiles(<q-args>, <bang>0)
nnoremap <silent> <S-F> :SCIF!<CR>

嗯,它很大,我知道。这是我所拥有的最好的。

唯一的区别是:

  • command_fmt中,我为隐藏文件和排除git文件夹添加了额外的arg。
  • 函数的名称
  • fzf选项(有很多选项),更确切地说,这些选项:
代码语言:javascript
复制
'--exact' - exact match
'--pointer=@', 
'-i', 
'-m', 
'--cycle', (repeat after end)
'--border=none', 
'--marker=*', 
'--ansi', (enable colors)
'--preview-window=left,50%', 
'--bind=alt-bspace:backward-kill-word,ctrl-x:beginning-of-line+kill-line,ctrl-a:select-all', (some keybindings)
'--color=16,fg+:bright-red,hl:bright-blue,hl+:green,query:blue,prompt:yellow,info:magenta,pointer:bright-yellow,marker:bright-blue,spinner:bright-blue,header:blue', (color scheme)
'--prompt=content from files(+hidden) (git ignored) at . > ' (prompt text)

ofc,您可以在vim中集成上面的每个命令。

希望这些能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65336054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档