gpt4 book ai didi

Emacs 源代码导航功能

转载 作者:行者123 更新时间:2023-12-04 15:48:51 24 4
gpt4 key购买 nike

我正在开发一个大型 c++ 项目。在过去的六个月里,我一直在使用 emacs。
我尝试配置 CEDET 以便能够轻松导航,但我发现了一些问题。

1.- 有时语义找不到一些符号,有时他没有……我不清楚哪些文件是语义索引。
我曾尝试使用 EDE(按照本文中的说明 http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html ),但我也发现了一些问题......

  • 我有同一个项目的多个版本(版本),每个版本都在自己的文件夹中。我如何告诉 emacs 我正在处理哪个项目?
  • 我如何告诉 ede 在哪里寻找我的头文件?我可以只指定一个根目录,语义将在所有子目录中搜索头文件吗?

  • 2.- 前段时间我在使用 vim+cscope,我记得有一种方法可以在符号堆栈中导航回来(Ctrl-t)。在 emacs 中有这样的东西吗?

    P.D.> 一些数据让问题更清楚。

    我有同一个项目的多个版本。
    每个都有自己的根目录。
    每个项目都有多个模块,每个模块都位于一个子目录中。
    每个模块都有头文件。
    /home/user/
    |
    \Release-001
    | |
    | \makefile
    | \ Module-001
    | | |
    | | \makefile
    | | \subdir-001
    | | | \header-001.h
    | | | \header-002.h
    | | \subdir-002
    | | | \header-003.h
    | \ Module-002
    | | |
    | | \makefile
    | | \subdir-003
    | | | \header-004.h
    | | | \header-005.h
    | | \subdir-004
    | | | \header-006.h
    |
    \Release-002
    | |
    | \makefile
    | \ Module-001
    | | |
    | | \makefile
    | | \subdir-001
    | | | \header-001.h
    | | | \header-002.h
    | | \subdir-002
    | | | \header-003.h
    | \ Module-002
    | | |
    | | \makefile
    | | \subdir-003
    | | | \header-004.h
    | | | \header-005.h
    | | \subdir-004
    | | | \header-006.h

    这是我的 .emacs 中关于 EDE 的配置
    ;; Cedet load commands
    (add-to-list 'load-path "~/emacs-dir/cedet/cedet")
    (load-file "~/emacs-dir/cedet/cedet/common/cedet.el")

    ;; EDE: activating mode.
    (global-ede-mode t)

    ;; Projects definition
    (ede-cpp-root-project "Release-001"
    :name "Release-001"
    :file "~/Release-001/makefile"
    :include-path '("/"
    )
    :system-include-path '("~/exp/include")
    :spp-table '(("SUSE9" . "")
    )
    )
    (ede-cpp-root-project "Release-002"
    :name "Release-002"
    :file "~/Release-002/makefile"
    :include-path '("/"
    )
    :system-include-path '("~/exp/include")
    :spp-table '(("SUSE9" . "")
    )
    )

    只是想让你知道......我正在使用 emacs 的控制台版本(-nw)。

    最佳答案

    除了项目的 :include-path 之外,您的配置基本上是正确的。

    如果给定的源文件说:

       #include "Module-001/subdir-002/header-003.h"

    那么就可以了。如果包含说:
       #include "subdir-002/header-003.h"

    那么你的 :include-path 应该有
       :include-path '("/Module-001" )

    在里面。

    至于哪些东西做语义索引,它会索引你当前的文件,包括它可以找到的所有内容。使用语义修饰模式查看 EDE 为您找到了哪些 header ,以确定您的配置是否准确。

    它还将索引与您正在编辑的文件在同一目录中的所有文件,但仅限于空闲时间,因此如果您不让 Emacs 空闲,它就不会处理它。

    如果您按照 Bozhidar 的建议使用 CScope,则可以加快索引操作。然后,您可以在 EDE 和语义数据库中启用 CScope 支持。然而,在 Semantic DB 中包含 CScope 支持是最近才出现的,因此您需要 CEDET 的 CVS 版本。这将确保整个事情都被索引。

    要向后导航,请查看语义mru-bookmark-mode 的帮助。这会在命名位置的基础上跟踪您在文件中的进度,这非常方便且始终有效。

    关于Emacs 源代码导航功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3519965/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com