我在C开发环境中使用vim
运行cscope
。我在freebsd 6.3服务器上的GNU vim
窗口内启动screen
,并与cs add ...
建立cscope数据库连接。在这个阶段,一切都完美无瑕。
如果我分离屏幕会话并重新连接它,任何使用cscope的尝试都会导致cscope转储核心。这是我从核心转储中得到的全部因为我的cscope没有用调试符号编译:
(gdb)
#0 0x480f45dc in ungetch () from /lib/libncurses.so.6
(gdb)
当我重新连接到屏幕时,AFAIK无需在vim上重新建立cscope连接。这会破坏使用屏幕的目的。任何人都知道发生了什么,如果有解决方法?如果一切都失败了,我会花时间用符号编译cscope并弄清楚最新情况。
如果有帮助,我的cscope DB会生成:
cscope -bkq -P`pwd` -i cscope.files
答案 0 :(得分:3)
原来这是cscope 15.7a中修复的问题。在这里发布答案,以防其他人有同样的问题(在我决定在此发布之前,它困扰了我几年)。
答案 1 :(得分:2)
即使vim
要调用cscope -l
(行模式),它也会在curses中崩溃我认为TERM=screen
与你的问题有关是合理的。我会尝试制作一个包装器(例如在$HOME/bin
中,假设在路径中的/usr/local/bin
之前)来更改它:
#!/bin/sh
if ! test -t 0
then
TERM=vt100
fi
exec /usr/local/bin/cscope "$@"
其中说“如果没有从tty,假的TERM”运行。 tty测试是尽量避免破坏交互式使用。您也可以尝试TERM=none
或其他值。