从cmd.exe运行时如何从cscope-win32启动gvim.exe?

时间:2013-06-27 21:37:05

标签: c windows vim cscope

多年来,我的Windows C标记/范围解决方案已经几乎工作了。我可以构建文件列表,为vim / gvim导航构建标签(通过Exuberant Ctags),构建cscope.out,并在我通过单击C源文件启动的gvim.exe窗口中标记。

我不知道的最后一件事是,当我选择一个项目时,我似乎无法在cmd.exe中获取cscope来启动我的编辑器。我确保gvim.exe在我的Path环境变量中。我确保设置了CSCOPE_EDITOR环境变量(更多内容如下)。但是当我从cscope中选择一个行项目时,编辑器没有启动。相反,我得到以下两个失败之一:

  1. 如果CSCOPE_EDITOR是gvim.exe -f或“gvim.exe -f”,那么我看到它打印在cmd.exe窗口的顶部,后跟行偏移和文件名(例如“gvim.exe -f”) +72 myfile.c“)然后它会快速返回到cscope,而编辑器不会弹出。
  2. 如果CSCOPE_EDITOR是gvim.exe(没有-f选项),则启动gvim.exe 进程(我在Windows任务管理器的进程下看到它),但它永远不会出现在前台作为申请。此外,cmd.exe中的cscope窗口变为空白,并且在我手动终止生成的gvim.exe进程之前没有响应。
  3. 供参考:
    cscope -V返回“cscope:version 15.8a”并从此站点下载:http://code.google.com/p/cscope-win32/
    我的gvim.exe版本是7.3,最新版本来自http://www.vim.org/

    另外,我用“C”标记了这篇文章,因为虽然这不是C语言问题,但cscope和ctags主要用于C编程,因此我认为C标签是相关的。 (我想在有人出现并删除标签之前我会指出这一点并说这不是一个C问题,因为C程序员最有可能得到答案。)

1 个答案:

答案 0 :(得分:2)

在@mattn和@mMontu的帮助下,以及大量的试错和丑陋但简单的黑客攻击我终于有了这个工作。以下是我遇到的问题:

  1. cscope-win32不处理EDITOR或CSCOPE_EDITOR环境变量中的空格。我试过了我能想到的每一个太空逃生技巧(单引号,双引号,反斜杠转义),没有任何效果。

  2. 当cscope-win32成功启动gvim.exe时,如果gvim.exe尝试添加相同的cscope.out数据库(通过cs add cscope.out),则add命令会挂起。如果add是vimrc文件的一部分,那么编辑器将在打开期间挂起(gvim.exe和cscope.exe进程启动但应用程序窗口永远不会出现)。如果在编辑器窗口打开后完成添加,则窗口将挂起。这似乎与在同一进程树中尝试的多个cscope-win32进程有关,但我没有实际的证据。

  3. 这是我解决问题的方法。就像我说的,这是一个丑陋但简单的黑客。

    1. 创建包装批处理文件。我命名为gvim_cscope.bat。确保它位于PATH环境变量中的目录中。您可以通过调用“where gvim_cscope.bat”来在cmd.exe shell中对此进行验证。

    2. 编辑批处理文件并在其前面添加编辑器命令,但使用windows start命令。例如,我的批处理文件包含以下内容:

      start gvim.exe %*

    3. 创建/更新您的CSCOPE_EDITOR环境变量为“gvim_cscope.bat”。如果你以前从未修改过Windows环境变量,你可以通过Start - >到达它们(无论如何在Windows 7上)。右键单击计算机 - >属性 - >高级系统设置 - >环境变量。

    4. 这就是让事情发挥作用所需要的一切。打开一个新的cmd.exe窗口(以便拉入更新的环境变量)并打开cscope.exe,一切正常。我能够从cscope.exe中弹出多个gvim.exe窗口,每个窗口都有自己与cscope.out数据库的连接。通过使用包装批处理文件(命令中不再有空格)可以避免第一个问题,并且使用windows start命令可以避免第二个问题,这样gvim.exe就可以作为一个单独的进程启动。

      感谢@mattn和@mMontu的帮助。让事情正常运作真好!