解决一个vim自动提示功能卡死的奇怪问题

症状是我进入到项目,编写代码

import sys
print sys.

当我打出那个 . 时,因为我装了代码自动提示插件,按理会自动提示,但是此时vim完全卡死没反应,按任何键都没有用,只能关闭shell。

在网上找了一些,如这里:

https://github.com/klen/python-mode/issues/405

这里:

https://github.com/klen/python-mode/issues/342

按帖子里面说的,设置了如下参数都不管用:

let g:pymode_rope = 0
let g:pymode_rope_lookup_project = 0
let g:pymode_rope_complete_on_dot = 0

而且我找不到帖子里面说的 .ropeproject 文件夹。

我换其它代码项目进行编辑,输入 点时代码提示又是正常的,只有目前这个项目会出现卡死,很奇怪 。。。

我尝试把自动提示插件 neocomplete.vim 给删除掉,然后自然没有自动提示就好了。

但是换上提示就又不行。

现在分析下,一肯定是代码自动提示引起的。二是只有编辑目前这个代码时有问题,换到编辑 其它项目就正常。所以应该是这个项目的代码或文件触发了自动提示插件的一个bug。。。

后来,卡死后我N久没有关闭shell,出来了一个提示:

 #coding=utf-8
 print atexit[W] 8967 qimessaging.transportsocket: connect: Operation timed out

是我打 atexit 点时,那个点没出来就卡死,最终出来这个提示。

%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-10-01-%e4%b8%8b%e5%8d%8810-26-18

这个提示恰好是项目代码中的一个逻辑,连接到一个 socket ,而且项目配置中的ip地址目前不存在,这个ip是在公司的,而我现在在家里面,所以连接肯定有问题。

所以现在问题源头出来了,就是我在代码引用里面直接实例化了一个类,而这个类直接去连接一个socket。

当vim的自动提示插件工作时,它应该需要把当前项目的代码都 import 进来,然后去发现里面的类、方法等信息,而我们项目代码里面有个地方,一旦 import 进来就会自动执行连接 socket ,当这个目标ip访问不到时,就卡死了,一直卡在尝试连接socket那里。

找到问题后,解决办法就非常明了了,直接改代码,禁止Import的时候做任何具体的逻辑,这样看来,代码规范确实非常重要啊。