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.15k stars 179 forks source link

gtags查找时报错 #762

Closed MerliniKing closed 3 years ago

MerliniKing commented 3 years ago

vim or neovim? [x]vim [ ]neovim Output of vim --version or nvim --version:

VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Dec 22 2020 23:02:19)
MS-Windows 64-bit GUI version 带 OLE 支持
包含补丁: 1-2195
编译者 appveyor@APPVYR-WIN
巨型版本 带图形界面。 可使用(+)与不可使用(-)的功能:
+acl +eval +multi_byte_ime/dyn -tag_old_static
+arabic +ex_extra +multi_lang -tag_any_white
+autocmd +extra_search +mzscheme/dyn +tcl/dyn
+autochdir -farsi +netbeans_intg -termguicolors
+autoservername +file_in_path +num64 +terminal
+balloon_eval +find_in_path +ole -termresponse
-balloon_eval_term +float +packages +textobjects
+browse +folding +path_extra +textprop
++builtin_terms -footer +perl/dyn -tgetent
+byte_offset +gettext/dyn +persistent_undo +timers
+channel -hangul_input +popupwin +title
+cindent +iconv/dyn -postscript +toolbar
+clientserver +insert_expand +printer +user_commands
+clipboard +ipv6 +profile +vartabs
+cmdline_compl +job +python/dyn +vertsplit
+cmdline_hist +jumplist +python3/dyn +virtualedit
+cmdline_info +keymap +quickfix +visual
+comments +lambda +reltime +visualextra
+conceal +langmap +rightleft +viminfo
+cryptv +libcall +ruby/dyn +vreplace
+cscope +linebreak +scrollbind -vtp
+cursorbind +lispindent +signs +wildignore
+cursorshape +listcmds +smartindent +wildmenu
+dialog_con_gui +localmap +sound +windows
+diff +lua/dyn +spell +writebackup
+digraphs +menu +startuptime -xfontset
+directx +mksession +statusline -xim
-dnd +modify_fname -sun_workshop +xpm_w32
-ebcdic +mouse +syntax -xterm_save
+emacs_tags +mouseshape +tag_binary
系统 vimrc 文件: "$VIM\vimrc"
用户 vimrc 文件: "$HOME_vimrc"
第二用户 vimrc 文件: "$HOME\vimfiles\vimrc"
第三用户 vimrc 文件: "$VIM_vimrc"
用户 exrc 文件: "$HOME_exrc"
第二用户 exrc 文件: "$VIM_exrc"
系统 gvimrc 文件: "$VIM\gvimrc"
用户 gvimrc 文件: "$HOME_gvimrc"
第二用户 gvimrc 文件: "$HOME\vimfiles\gvimrc"
第三用户 gvimrc 文件: "$VIM_gvimrc"
defaults file: "$VIMRUNTIME\defaults.vim"
系统菜单文件: "$VIMRUNTIME\menu.vim"
编译方式: cl -c /W3 /nologo -I. -Iproto -DHAVE_PATHDEF -DWIN32 -DFEAT_CSCOPE
-DFEAT_TERMINAL -DFEAT_SOUND -DFEAT_NETBEANS_INTG -DFEAT_JOB_CHANNEL -DFEAT_IPV6
-DFEAT_XPM_W32 -DWINVER=0x0501 -D_WIN32_WINNT=0x0501 /source-charset:utf-8 /MP
-DHAVE_STDINT_H /Ox /GL -DNDEBUG /Zl /MT /D_CRT_SECURE_NO_DEPRECATE
/D_CRT_NONSTDC_NO_DEPRECATE -DFEAT_OLE -DFEAT_MBYTE_IME -DDYNAMIC_IME
-DFEAT_GUI_MSWIN -DFEAT_DIRECTX -DDYNAMIC_DIRECTX -DFEAT_DIRECTX_COLOR_EMOJI
-DDYNAMIC_ICONV -DDYNAMIC_GETTEXT -DFEAT_TCL -DDYNAMIC_TCL -DDYNAMIC_TCL_DLL="tcl86
t.dll" -DDYNAMIC_TCL_VER="8.6" -DFEAT_LUA -DDYNAMIC_LUA -DDYNAMIC_LUA_DLL="lua53.dll"
-DFEAT_PYTHON -DDYNAMIC_PYTHON -DDYNAMIC_PYTHON_DLL="python27.dll" -DFEAT_PYTHON3
-DDYNAMIC_PYTHON3 -DDYNAMIC_PYTHON3_DLL="python38.dll" -DFEAT_MZSCHEME -I
"C:\Program Files\Racket\include" -DMZ_PRECISE_GC -DDYNAMIC_MZSCHEME
-DDYNAMIC_MZSCH_DLL="libracket3m_a36fs8.dll" -DDYNAMIC_MZGC_DLL="libracket3m_a36fs8.dll
" -DFEAT_PERL -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DDYNAMIC_PERL
-DDYNAMIC_PERL_DLL="perl528.dll" -DFEAT_RUBY -DDYNAMIC_RUBY -DDYNAMIC_RUBY_DLL="x64
-msvcrt-ruby240.dll" -DRUBY_VERSION=24 -DFEAT_HUGE /Fd.\ObjGXOULYHTRZAMD64/ /Zi
链接方式: link /nologo /opt:ref /LTCG:STATUS /HIGHENTROPYVA:NO oldnames.lib kernel32.lib
advapi32.lib shell32.lib gdi32.lib comdlg32.lib ole32.lib netapi32.lib uuid.lib /machine:AMD64 gdi32.lib
version.lib winspool.lib comctl32.lib advapi32.lib shell32.lib netapi32.lib /machine:AMD64 libcmt.lib
oleaut32.lib user32.lib /nodefaultlib:lua53.lib /STACK:8388608 /nodefaultlib:python27.lib
/nodefaultlib:python38.lib "C:\Tcl\lib\tclstub86.lib" winmm.lib WSock32.lib Ws2_32.lib
xpm\x64\lib-vc14\libXpm.lib /PDB:gvim.pdb -debug

Output of :echo has("python"): 0 Output of :echo has("python3"): 1 Output of :echo &pythondll(only vim, not neovim): python27.dll Output of :echo &pythonthreedll(only vim, not neovim): python38.dll Output of :py print(sys.version): E370 无法加载 Output of :py3 print(sys.version): 3.8.7 xxxxxxxxxxxxxxxx Output of :echo g:Lf_Debug_Cmd: 未定义变量 Output of :echo g:Lf_FilesFromCache: 未定义变量 Operating system: [ ]Linux [ ]Mac OS X [x]Windows Etc. Configurations related to LeaderF in vimrc:

let g:Lf_Gtagslabel = 'native-pygments' " gtags 默认 C/C++/Java 等六种原生支持的代码直接使用 gtags 本地分析器,而其他语言使用 pygments 模块
let g:Lf_Gtagsconf = 'D:\programs\glo663wb\share\gtags\gtags.conf' " gtags.conf路径
" 自动生成Gtags
let g:Lf_GtagsAutoGenerate = 1
" 从下向上展示内容 popup场景下无效
let g:Lf_ReverseOrder = 1
" 限制输出的行长度,否则会卡死
let g:Lf_RgConfig = [ "--max-columns=150", ]
" 索引存储位置
let g:Lf_CacheDirectory = 'D:\programs'
" 弹出窗口展示内容
"let g:Lf_WindowPosition = 'popup'
" 自动调整LeaderF窗口大小
"let g:Lf_AutoResize = 1

" 取消f 和 b的绑定,避免干扰下面的key绑定
let g:Lf_ShortcutF = ''
let g:Lf_ShortcutB = ''
nnoremap fi :Leaderf --nameOnly file
nnoremap mr :Leaderf mru
nnoremap fu :Leaderf --stayOpen --left --nowrap function
nnoremap rg :Leaderf rg
nnoremap bu :Leaderf buffer
nnoremap bt :Leaderf bufTag
nnoremap g :=printf("Leaderf! gtags --by-context --literal --auto-jump --result ctags-mod %s", "")
nnoremap li :Leaderf line

Describe your question, feature request, or bug.

使用gtags查找时报错

Steps to reproduce

执行Leaderf gtags -r Client时报错"Exception: global: /path/to/my/cached/GTAGS seems corrupted." 执行Leaderf gtags -g Client时报错"Exception: global: GPATH not found." 执行nnoremap g :=printf("Leaderf! gtags --by-context --literal --auto-jump --result ctags-mod %s", "")时报错"Exception: global: GPATH not found."

Actual behaviour

使用gtags查找时报错

Expected behaviour

能够正确查找Client的定义

Yggdroot commented 3 years ago

得先生成gtags数据库,运行Leaderf gtags --update命令。

MerliniKing commented 3 years ago

已生成,问题还是存在 路径是D:\programs\.LfCache\gtags\D_XXX_XXX_XXX-XXX-XXX\GTAGS

Yggdroot commented 3 years ago

Leaderf gtags --update 没报错吗

MerliniKing commented 3 years ago

开始有报gtags error,然后依次执行了 Leaderf gtags --remove Leaderf gtags --update 没有报错

Yggdroot commented 3 years ago

有报successful 吗?

MerliniKing commented 3 years ago

没有报successful 另外我刚刚又按照remove、update的顺序操作了一遍,报了gtags error

Yggdroot commented 3 years ago

报error就用:mess看一下报的什么错

MerliniKing commented 3 years ago

错误信息里显示: gtags : D:\programs.LfCache\gtags\D_XXX_XXX_XXX-XXX-XXX\GTAGS seems corrupted gtags error!

Yggdroot commented 3 years ago

这是remove,然后update时报的错吗?

MerliniKing commented 3 years ago

嗯是的

Yggdroot commented 3 years ago

更新一下代码,先remove,再执行Leaderf gtags --update --debug ,看看输出什么,然后把输出的命令在你的终端上跑一下。

MerliniKing commented 3 years ago

cd /d "D:\Work\Code\XXX-XXXX-XXXX" && gtags -i --skip-symlink --gtagsconf "D:...gslabel native-pygments "D:\programs\.LfCache\gtags\D_Work_Code_XXX-XXXX-XXXX" gtags: --gtagsconf file not found.

MerliniKing commented 3 years ago

gtagsconf的值显得很奇怪,是没输出完整吗,还是其他的原因

Yggdroot commented 3 years ago

输出就是这样的?你没有做什么处理? --gtagsconf "D:...gslabel native-pygments 这里明显有问题。

MerliniKing commented 3 years ago

对,我的vim命令栏输出就是这个,是否因为长度不够了,导致显示时省略了部分呢?

Yggdroot commented 3 years ago

可能是的。你是怎么复制的?

用这个方法吧: :put=execute('mess')

这样就会输出到当前buffer里, 你再贴出来。

MerliniKing commented 3 years ago

cd /d "D:\Work\Code\XXX-XXXX-XXXX" && gtags -i --skip-symlink --gtagsconf "D:\programs\glo663wb\share\gtags\gtags.conf" --gtagslabel native-pygments "D:\programs\.LfCache\gtags\D_Work_Code_XXX-XXXX-XXXX" 在cmd执行后,错误信息是gtags: D:/programs/.LfCache/gtags/D_Work_Code_XXX-XXXX-XXXX/GTAGS seems corrupted.

Yggdroot commented 3 years ago

那就奇怪了,这是个正常的命令。

MerliniKing commented 3 years ago

嗯,我也觉得很奇怪,一个C语言的项目目录下可以正常工作,另一个Python的项目目录就报错了

Yggdroot commented 3 years ago

有没有装pygments ?

MerliniKing commented 3 years ago

有没有装pygments ?

按照这个思路进行了排查,我是win10环境,PATH里同时存在python2和3,我之前使用python3安装了pygments,但没有安装2的pygments。通过调整path路径里2和3的顺序,我发现使用python2时,会报gtags error,并且是因为无法加载pygments。但是安装完成后,python2和3的表现是一样的,执行Leaderf gtags --update后没有返回successful。

中间遇到一个情况,就是关闭vim后,重新打开,执行Leaderf gtags --remove会报错,文件被占用。再加上项目内容很多,因此我在想:没有返回successful应该是因为leaderf在后台生成GTAGS文件未完成。按照这个思路进行了耐心等待,确实有了返回,但是还是gtags error,通过:put=execute('mess')打印发现,ctags报了一堆warning:ctags: Warning: cannot open input file "./XXXXXXXXX/XXXXXXXXXX/XXXXXX/XXXXX/XXXXXXXXXXXX/XXXXXXXXXXXXXX-废弃/XXXXXXXXXXXXXXXXXXXXXXXXXX.py" : No such file or directory,这些文件是存在的,但都是同一个目录下,目录中有中文废弃

所以,是因为ctags无法处理中文字符的问题吗?

Yggdroot commented 3 years ago

哦,应该是的,gtags不支持中文,把路径中的中文去掉吧。

MerliniKing commented 3 years ago

请问,ctags可以指定排查某个路径吗?移除该路径的中文名,流程有点麻烦。

Yggdroot commented 3 years ago

可以

let g:Lf_GtagsSource = 1,
let g:Lf_WildIgnore = {
            \ 'dir': [],
            \ 'file': []
            \}

把要忽略的目录加进去。

MerliniKing commented 3 years ago

可以

let g:Lf_GtagsSource = 1,
let g:Lf_WildIgnore = {
            \ 'dir': [],
            \ 'file': []
            \}

把要忽略的目录加进去。

哇哦,太棒了:satisfied: Leaderf非常好用,:+1::+1::+1::+1::+1::+1:谢谢您的耐心指导

Yggdroot commented 3 years ago

不客气。

fzhzhen1987 commented 1 year ago

请教个相关的问题. 在windows10中的powershell的leaderf的配置文件,下面这行路径该怎么设置我试了好几个都不行.就不列举错误内容了. let $GTAGSCONF = "C://Users//fzh-3070ti//gtags.conf" 以上的写法不能正确设置gtags.conf路径.求教

fzhzhen1987 commented 1 year ago

不用了 找到方法了 let g:Lf_Gtagsconf = 'C:\Users\fzh-3070ti\gtags.conf' 这是对的