首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fortran中带有过程指针的ctag

Fortran中带有过程指针的ctag
EN

Stack Overflow用户
提问于 2017-02-08 09:32:27
回答 2查看 274关注 0票数 1

类似于this问题,我想知道是否有一种方法可以让ctag识别一个过程指针,当然还有它指向的位置。

示例:

代码语言:javascript
复制
if(code_is_2D) then
    get_convective => get_convective_2D
else
    get_convective => get_convective_3D
end if

通过按CTRL-] on get_convective,我希望被带到它所指向的任何过程。我试着添加--fortran-kinds=+i,但这不起作用。

编辑:

在LucHermitte发表评论之前,我不知道ctag有多个版本(exhuberant/universal)。我用的是前者。我删除了它并安装了universal-ctags。现在,当使用标志--fortran-kinds=+i时,我被移到过程指针的定义,而不是它所指向的实际过程。

EN

回答 2

Stack Overflow用户

发布于 2017-02-08 10:26:58

在执行tags时,您的<C-]>文件中唯一对Vim重要的字段是:

  • 标签,
  • 文件名,
  • 用于查找标记的Ex命令。

其他字段根本不使用。

执行<C-]>时,Vim在tags文件中的每一行开头搜索光标下的单词。类似于:

代码语言:javascript
复制
/^\<get_convective\>

然后,它打开关联的文件名并执行关联的Ex命令。类似于:

代码语言:javascript
复制
:e path/to/filename
:/^\ \ \ \ get_convective

但是您不需要get_convective标记本身,您需要它在代码中指向的任何东西。问题是,这里,维姆:

  • 不懂你的代码,
  • 永远不会在标记搜索的上下文中查看指向什么的内容。

此外,ctag本身:

  • 也不懂你的代码,
  • 反正也不会记录下那段关系。

因此,您几乎肯定需要这样的自定义函数:

代码语言:javascript
复制
function! JumpToTagOrInterface()
    let this_line = getline('.')
    if this_line =~ '=>' && col('.') < stridx(this_line, '=>')
        execute 'tag' matchstr(this_line, '\S\{-}$')
    else
        tag <cword>
    endif
endfunction
nnoremap <key> :call JumpToTagOrInterface()<CR>

请注意,此函数假定您的接口由ctag索引。

票数 2
EN

Stack Overflow用户

发布于 2018-06-29 12:05:09

没有程序(ctags,或所有可能的变体)能够这样做,仅仅是因为您的示例中的条件大概是在运行时计算的(例如,因为code_is_2D是从/基于输入读取的),所以在运行程序之前没有指向- to过程(实际上,初始化指针(包括过程指针)到NULL()是很好的做法)。

也许有一些琐碎的情况(我想不出其中一个,但肯定不是问题中的那个),在编码时就知道指向过程,但我怀疑指针过程在这种情况下是否有用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42109336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档