Yggdroot / LeaderF

An efficient fuzzy finder that helps to locate files, buffers, mrus, gtags, etc. on the fly for both vim and neovim.
Apache License 2.0
2.14k stars 180 forks source link

gtags 基于当前路径搜索 #1072

Closed Elite-zx closed 3 months ago

Elite-zx commented 3 months ago

环境: VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Mar 1 2021 16:57:56)

vimrc:

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" vim-gutentags
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let g:gutentags_project_root = ['.git', '.root', '.svn', '.hg', '.project']
let g:gutentags_ctags_tagfile = '.tags'

let g:gutentags_modules = []
if executable('ctags')
  let g:gutentags_modules += ['ctags']
endif
if executable('gtags-cscope') && executable('gtags')
  let g:gutentags_modules += ['gtags_cscope']
endif

let g:gutentags_cache_dir = expand('~/.cache/tags')

let g:gutentags_ctags_extra_args = ['--fields=+niazS', '--extra=+q']
let g:gutentags_ctags_extra_args += ['--c++-kinds=+px']
let g:gutentags_ctags_extra_args += ['--c-kinds=+px']
let g:gutentags_ctags_extra_args += ['--output-format=e-ctags']
let g:gutentags_auto_add_gtags_cscope = 0

" gtags
let $GTAGSFORCECPP = 1
let $GTAGSLABEL = 'native-pygments'

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" LeaderF
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" popup mode
let g:Lf_PreviewInPopup = 1
let g:Lf_PreviewHorizontalPosition = 'right'
let g:Lf_WindowPosition = 'popup'
let g:Lf_StlSeparator = { 'left': "\ueb0", 'right': "\ue0b2", 'font': "Monaco Nerd Font Mono" }
let g:Lf_PreviewResult = {'File':1,'Rg':1,'Function': 0, 'BufTag': 0 }
let g:Lf_ShortcutF ='<leader>f'
let g:Lf_ShowDevIcons = 1
let g:Lf_GtagsAutoGenerate = 1
let g:Lf_Gtagslabel = 'native-pygments'
" let g:Lf_ReverseOrder = 1

nmap <Leader>r  :Leaderf rg<CR>
nmap <Leader>g :Leaderf gtags<CR>
nmap <C-]> :Leaderf gtags --by-context --auto-jump<CR>

我的问题是:

如果我现在打开了一个文件 a.h, 该文件在/username/project/example/a.h 下,在vim中执行pwd命令,显示 /username/project/example。此时我想要找到a.h中某个函数签名的定义,那么我执行命令Leaderf gtags --by-context --auto-jump 时, 只在 pwd显示的路径下搜索相关标签,即/project/example。 而不是从整个项目下搜索,即project/

我的第二个问题是,执行Leader gtags --update之后,当使用 leaderf gtags 搜索 某个cpp类中的成员函数中,搜不到目标函数,哪怕我确定这个函数是定义了的。但是问题在于,不是搜不到类的成员函数,因为结果中显示了其他类中 模糊匹配的成员函数,我怀疑是搜索的范围 限定为了200w个,因为我的项目非常大,这个要怎么解决呢! 非常感谢!

Yggdroot commented 3 months ago

对于第一个问题,试试--path-style through。 第二个问题,可以设置g:Lf_MaxCount。

Elite-zx commented 3 months ago

博主你好,第二个问题 我设置 let g:Lf_MaxCount=4000000 后解决了

但是对于第一个问题 Leaderf gtags --path-style through 并未按预期运行,还是在/project下进行搜索,而不是/project/example

Yggdroot commented 3 months ago

只在 pwd显示的路径下搜索相关标签,即/project/example。 而不是从整个项目下搜索,即project/

你想要的不是在/project下进行搜索吗?

Elite-zx commented 3 months ago

只在 pwd显示的路径下搜索相关标签,即/project/example。 而不是从整个项目下搜索,即project/

你想要的不是在/project下进行搜索吗?

我想要在vim中执行pwd命令后显示的路径中搜索

比如我现在打开了文件project/example/a.h 此时pwd的输出是/project/example ,只在该路径下搜索,即example子目录下搜索,而不是整个项目,即project下搜索。

Yggdroot commented 3 months ago

现在实现是整个project有一个gtags,所以会列出所有的。

Elite-zx commented 2 months ago

现在实现是整个project有一个gtags,所以会列出所有的。

能不能像搜索文件那样, 输入路径进行筛选。 不然在大项目下搜索gtags ,重复的太多了,不好找