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.12k stars 176 forks source link

打开一个py文件文件后, 同时打开.vimrc后进行编辑,多次保存w后, vim容易出现:vim: caught deadly signal segv死机。 #430

Closed hawkinchina closed 4 years ago

hawkinchina commented 4 years ago

打开一个py文件文件后, 同时打开.vimrc后进行编辑,多次进行保存w后, vim容易出现:vim: caught deadly signal segv死机。

the detail debug information: ~/.vimrc" 1667L, 55220C [w]Process 28119 stopped

thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x4610) frame #0: 0x00007fff7ef14232 libsystem_c.dylibstrlen + 18 libsystem_c.dylibstrlen: -> 0x7fff7ef14232 <+18>: pcmpeqb (%rdi), %xmm0 0x7fff7ef14236 <+22>: pmovmskb %xmm0, %esi 0x7fff7ef1423a <+26>: andq $0xf, %rcx 0x7fff7ef1423e <+30>: orq $-0x1, %rax Target 0: (vim) stopped. (lldb) (lldb) bt

thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x4610) frame #0: 0x00007fff7ef14232 libsystem_c.dylibstrlen + 18 frame #1: 0x00000001000b72b9 vimvim_strsave + 18 frame #2: 0x000000010004f3a1 vimset_vim_var_string + 86 frame #3: 0x00000001001cb197 vimemsg_core + 239 frame #4: 0x0000000100062faa vimdo_cmdline + 11646 frame #5: 0x000000010017d2ab vimcall_func + 4122 frame #6: 0x000000010017c1dc vimget_func_tv + 422 frame #7: 0x00000001001806a4 vimex_call + 720 frame #8: 0x0000000100062a19 vimdo_cmdline + 10221 frame #9: 0x0000000100008dda vimapply_autocmds_group + 1423 frame #10: 0x0000000100009654 vimapply_autocmds_exarg + 29 frame #11: 0x0000000100192b02 vimbuf_write + 12812 frame #12: 0x0000000100057788 vimdo_write + 869 frame #13: 0x0000000100068849 vimex_exit + 145 frame #14: 0x0000000100062a19 vimdo_cmdline + 10221 frame #15: 0x00000001000c9494 vimnv_colon + 120 frame #16: 0x00000001000c5769 vimnormal_cmd + 3885 frame #17: 0x00000001001c81e1 vimmain_loop + 1527 frame #18: 0x00000001001c7913 vimvim_main2 + 3291 frame #19: 0x00000001001c6745 vimmain + 5937 frame #20: 0x00007fff7eec4015 libdyld.dylib`start + 1 (lldb)

经过查明; 确认是leaderf的自动命令导致此问题。 image

Yggdroot commented 4 years ago

打开一个py文件文件后, 同时打开.vimrc后进行编辑,保存退出wq后

编辑的是.vimrc还是py文件,wq还是wqa?只退出当前的还是退出vim?

我现在没有环境复现,能否帮忙调试一下。缩小范围看看是mru的autocmd还是gtags的autocmd。

如果是gtags的,有没有启用g:Lf_GtagsAutoGenerate? 或者说对应的目录($HOME/.LfCache/gtags/%PATH%OF%YOUR%PROJECT/)下有没有生成gtags数据库?

hawkinchina commented 4 years ago

LeaderF/autoload/leaderf/python/leaderf/gtagsExpl.py : lines: 458 - 461请直接注释(注释后, 下面的return语句注意对齐,左移一下); 在Python线程里访问vim的变量了,导致cash.

      if not filename.startswith(root):
    #     if self._has_nvim:
    #         vim.async_call(lfCmd, "let g:Lf_Debug_Gtags = '%s'" % escQuote(str((filename, root))))
    #     else:
    #         lfCmd("let g:Lf_Debug_Gtags = '%s'" % escQuote(str((filename, root))))
          return

image

Yggdroot commented 4 years ago

LeaderF/autoload/leaderf/python/leaderf/gtagsExpl.py : lines: 457 - 462请直接注释; 在Python线程里访问vim的变量了,导致cash.

    # if not filename.startswith(root):
    #     if self._has_nvim:
    #         vim.async_call(lfCmd, "let g:Lf_Debug_Gtags = '%s'" % escQuote(str((filename, root))))
    #     else:
    #         lfCmd("let g:Lf_Debug_Gtags = '%s'" % escQuote(str((filename, root))))
    #     return

注释多了,

if not filename.startswith(root):
    return

还是需要的

hawkinchina commented 4 years ago

the code is already merged into master branch. close it.