【问题标题】:Recognise #define compiler directive in fortran with ctags使用 ctags 在 fortran 中识别 #define 编译器指令
【发布时间】:2020-06-26 14:32:37
【问题描述】:

我想配置 ctags 以识别 fortran 代码中的编译器指令。更具体地说,我想匹配下面的vim搜索结果

/\v[ \t]*#define[ \t]+([-[:alnum:]*+!_:\/.?]+)/

其中 \v 引发了非常神奇的级别(请参阅Can I turn on extended regular expressions support in Vim?)。或者,使用普通正则表达式进行搜索

/[ \t]*#define[ \t][ \t]*\([-[:alnum:]*+!_:\/.?][-[:alnum:]*+!_:\/.?]*\)/

可以使用。如果找到通用编译器指令,那也会对我有所帮助。一个实际的应用是,当按下 时,当我的光标位于以下代码中的 _ABORT 时

_ABORT("delta_time is too small")

我会被重定向到相应的定义

#define _ABORT(msg) call abimem_abort(msg, __FILE__, __LINE__)

基于https://andrew.stwrt.ca/posts/vim-ctags/,我尝试添加任一

--regex-fortran=/[ \t]*#define[ \t]+([-[:alnum:]*+!_:\/.?]+)/\1/d,directives/

或

--regex-fortran=/[ \t]*#define[ \t][ \t]*\([-[:alnum:]*+!_:\/.?][-[:alnum:]*+!_:\/.?]*\)/\1/d,directives/

到 ~/.ctags。基于http://ctags.sourceforge.net/ctags.html,我也尝试添加--line-directives=yes,但在上面举的实际应用中我都无法成功。使用的时候已经可以看到额外的种类了

ctags --list-kinds

但仅此而已。出了什么问题?

【问题讨论】:

  • 您的第一次尝试使用提供的示例。

标签: vim fortran ctags compiler-directives


【解决方案1】:

现在好像可以了。我目前的 ~/.ctags 是

--fortran-kinds=+i
--recurse=yes
--exclude=.git
--regex-fortran=/[ \t]*#define[ \t]+([-[:alnum:]*+!_:\/.?]+)/\1/d,directives/

这可能与我之前在 ~/.ctags 中放置了一个 '\v' 的事实有关(并且没有将其正确复制到问题中)。有人可以解释为什么这个 '\v' 不能出现在那里,尽管 vim 被配置为需要它来扩展正则表达式?

在之前的尝试和现在之间发生的另一件事是重新启动(清理临时空间等),如果仍然卡住,这可能会有所帮助。

此外,应该指出额外的正则表达式并不总是必要的。在没有正则表达式的情况下找到了以下宏定义:

#  define MSG_ERROR(msg)   call libpaw_msg_hndl(msg,"ERROR"  ,"PERS")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多