2017-02-08 20 views
0

this類似,我想知道是否有辦法讓ctags識別一個過程指針,當然它指向的地方。Fortran中的過程指針ctags

實施例:

if(code_is_2D) then 
    get_convective => get_convective_2D 
else 
    get_convective => get_convective_3D 
end if 

通過按壓get_convectiveCTRL-],我想將要採取的步驟爲準它指向。我試着加入--fortran-kinds=+i,但那不起作用。

編輯:

我不知道有LucHermitte的評論之前的ctags(exhuberant /通用)的多個版本。我正在使用前者。我刪除它並安裝了universal-ctags。現在,當使用標誌--fortran-kinds=+i時,我將被移動到過程指針的定義,而不是它指向的實際過程。

+0

您是否在使用廢棄的exhuberant-ctags或其維護的叉子,即universal-ctags? –

+0

@LucHermitte請參閱編輯 – solalito

回答

0

tags文件中的字段只有當你這樣做<C-]>事關對Vim的是:

  • 標籤,
  • 文件名,
  • 用來尋找標籤的Ex命令。

其他字段根本不使用。

當你做<C-]>時,Vim會在tags文件的每一行的開頭搜索光標下的單詞。例如:

/^\<get_convective\> 

然後,它打開關聯的文件名並執行關聯的Ex命令。喜歡的東西:

:e path/to/filename 
:/^\ \ \ \ get_convective 

但你不希望get_convective標籤本身,任何你想要它指向在你的代碼。這個問題,在這裏,是Vim的:

  • 不理解你的代碼,
  • 永遠不會看什麼點什麼在標籤搜索的範圍內。

此外,C標籤本身:

  • 沒有任何理解你的代碼,
  • 沒有記載這種關係呢。

因此,你幾乎肯定會需要這樣一個自定義功能:

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> 

注意,此功能假定您的接口由CTAGS索引。