gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 06:07:48 25 4
gpt4 key购买 nike

我正在使用下面的函数来搜索带有 ripgrep 的文件中的内容使用 fzfvim

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

    之前移除 --
    let command_fmt = 'rg --column --line-number --no-heading --color=always --smart-case %s || true'
  • 移除shellescape函数

    let initial_command = printf(command_fmt, a:query)

在这些更改之后,我最初可以使用标志,但是在更新我的搜索时它没有按预期工作。

我想使用 RGfzf 内(与在终端中的工作方式相同)在 vim

最佳答案

要仅按扩展名/文件类型搜索文件,请在命令行中尝试:

rg . --files -g "*.{py}"

我只搜索 python 文件

我的输出:

> rg . --files -g "*.{py}"
./another.py
./colors_do_not_apply.py

从 ripgrep 中排除一个目录

如果你想搜索当前目录下的文件中的所有内容:

> rg --column --line-number --no-heading --color=always --smart-case --hidden -g "\!.git" .

注意:

  • --hidden 用于隐藏文件
  • -g "\!.git" 用于忽略 git文件夹(你可以对其他人做同样的事情)

注意:

我使用了 "\!.git",它只在终端中使用(我的 zsh 在没有 !escaped 的情况下爆炸),在 vim 中你可以将它用作 "!.git"

如果你只想搜索当前目录下的文件和 exlcude git 文件夹:

> rg --hidden -g "\!.git" --files .

子目录中的搜索是自动进行的,因此您无需担心

最后

我看到你从 github 上的 fzf.vim 复制粘贴了一个奇特的函数,我也用它:)

这是我的功能:

" 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 文件夹添加了额外的参数
  • 函数名称
  • fzf 选项(有很多选项),更准确地说是这些选项:
'--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 中集成上面的每个命令。

希望这些帮助。

关于vim - 在 fzf.vim 中使用带有标志的 Ripgrep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65336054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com