2

所以我刚开始使用 Neovim/Spacevim,它太棒了!

我仍然习惯了一切,因为我以前从未使用过 Vim 或类似的东西。

我的问题围绕在当前打开的项目的所有文件中搜索特定文本。

我正在使用nerdtree文件管理器,我想知道如何在项目中的所有文件中搜索特定字符串。就像我想function thisExactFunction()在当前打开的文件夹/目录中进行搜索一样,我该怎么做呢?主要目标是列出包含此搜索字符串的所有文件。

我已经fzf安装(以及ripgrep),但似乎在搜索所有文件中的特定文本时遇到了麻烦。我只能搜索文件本身,或者其他一些不能产生我需要的搜索。

谁能指出我正确的方向......?谢谢!

4

1 回答 1

1

查看GgrepFzf 提供的命令 - 请参阅这一系列 vim 截屏视频,了解如何使用 vim 的内置功能(由 :vimgrep 填充的快速修复列表)使用其他 grepping 工具实现相同目的。

自定义函数

我的 .vimrc 中有一个函数,它使用ag silver searcher在目录(和任何子目录)中的所有文件中进行搜索。因此,如果您安装 ag,这应该可以:

" Ag: Start ag in the specified directory e.g. :Ag ~/foo
function! s:ag_in(bang, ...)
    if !isdirectory(a:1)
        throw 'not a valid directory: ' .. a:1
    endif
    " Press `?' to enable preview window.
    call fzf#vim#ag(join(a:000[1:], ' '),
                \ fzf#vim#with_preview({'dir': a:1}, 'right:50%', '?'), a:bang)
endfunction

" Ag call a modified version of Ag where first arg is directory to search
command! -bang -nargs=+ -complete=dir Ag call s:ag_in(<bang>0, <f-args>)

奖金

有时很难在 vim 的帮助中找到东西,所以我也有一个使用上面的功能来交互搜索帮助文档的功能。这可以很好地磨练您想要的主题。用于:H此功能(与经典相反:h

function! Help_AG()
    let orig_file = expand(@%)
    let v1 = v:version[0]
    let v2 = v:version[2]
    " search in the help docs with ag-silver-search and fzf and open file
    execute "normal! :Ag /usr/share/vim/vim".v1.v2."/doc/\<CR>"
    " if we opened a help doc
    if orig_file != expand(@%)
        set nomodifiable
        " for some reason not all the tags work unless I open the 'real' help
        " so get whichever help was found and open it through Ag
        let help_doc=expand("%:t")
        " open and close that help doc - now the tags will work
        execute "normal! :tab :help " help_doc "\<CR>:q\<CR>"
    endif
endfunction

" get some help
command! H :call Help_AG()
于 2021-11-16T19:57:53.987 回答