类似于this问题,我想知道是否有一种方法可以让ctag识别一个过程指针,当然还有它指向的位置。
示例:
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时,我被移到过程指针的定义,而不是它所指向的实际过程。
发布于 2017-02-08 10:26:58
在执行tags时,您的<C-]>文件中唯一对Vim重要的字段是:
其他字段根本不使用。
执行<C-]>时,Vim在tags文件中的每一行开头搜索光标下的单词。类似于:
/^\<get_convective\>然后,它打开关联的文件名并执行关联的Ex命令。类似于:
:e path/to/filename
:/^\ \ \ \ get_convective但是您不需要get_convective标记本身,您需要它在代码中指向的任何东西。问题是,这里,维姆:
此外,ctag本身:
因此,您几乎肯定需要这样的自定义函数:
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索引。
发布于 2018-06-29 12:05:09
没有程序(ctags,或所有可能的变体)能够这样做,仅仅是因为您的示例中的条件大概是在运行时计算的(例如,因为code_is_2D是从/基于输入读取的),所以在运行程序之前没有指向- to过程(实际上,初始化指针(包括过程指针)到NULL()是很好的做法)。
也许有一些琐碎的情况(我想不出其中一个,但肯定不是问题中的那个),在编码时就知道指向过程,但我怀疑指针过程在这种情况下是否有用。
https://stackoverflow.com/questions/42109336
复制相似问题