回答:
ドキュメント(:help ctrl-]
)は言う:
When there are several matching tags for {ident}, jump
to the [count] one. When no [count] is given the
first one is jumped to.
g]
あなたが探しているものではないかもしれませんが、それはあなたがVimで得ることができる最高のものです。
基本的に、ctagsとVimがコードを理解することは期待できないため、よりスマートなインデクサー(cscope、GNU GLOBAL、またはclangに基づく何かなど)を探すか、実際のIDEを使用する必要があります。
clangd
オーバーロードされた関数の1つが使用されているコード行から正しい定義を探すときに、オーバーロードされた関数が実際に区別されるかどうかをテストしました。vimプラグインを使用した私の最小限のテスト構成では、vim-lsp
うまくいきました。
$MYVIMRC
です
source $VIMRUNTIME/defaults.vim
if executable('/usr/local/Cellar/llvm/7.0.0/bin/clangd')
augroup Clangd
autocmd User lsp_setup call lsp#register_server({
\ 'name': 'clangd',
\ 'cmd': {server_info->['/usr/local/Cellar/llvm/7.0.0/bin/clangd']},
\ 'whitelist': ['c', 'cpp', 'objc', 'objcpp'],
\ })
autocmd FileType c,cpp,objc,objcpp nmap <buffer> gd <plug>(lsp-definition)
autocmd FileType c,cpp,objc,objcpp setlocal omnifunc=lsp#complete
augroup END
endif
vim8 packpathへのインストールがvim-lsp
必要async.vim
$ cd ~/.vim
$ git clone https://github.com/prabirshrestha/async.vim pack/prabirshrestha/start/async.vim/
$ git clone https://github.com/prabirshrestha/vim-lsp pack/prabirshrestha/start/vim-lsp/
これで、vim構成は次のようになります(より深くネストされたファイルとフォルダーを省略)
~/.vim
❯ tree -L 4 -F
.
├── pack/
│ └── prabirshrestha/
│ └── start/
│ ├── async.vim/
│ └── vim-lsp/
└── vimrc
5 directories, 1 file
次に、cppファイルを検討します。
void abc(int a, int b) {
}
void abc(int a, int b, int c) {
}
int main(int argc, char const *argv[])
{
abc(1,2);
abc(1,2,3);
return 0;
}
押すとgd
上abc
の
abc(1,2)
最初の行にジャンプし、abc(1,2,3)
5行目にジャンプします。環境とバージョン:
romanlが述べたように、ctags
はコードを実際には理解していません。そのため、最善の方法は、検索している名前を共有する関数をポイントすることです。
しかし、私はclang_complete
プラグインがあなたが求める機能を提供すると信じています。clang
コンパイラを使用して、同じ名前を共有する関数だけでなく、検索している関数と実際に一致する関数を見つけます。のctrl-]
機能を上書きしますctags
。
また、私はそれがあると述べ見ているYouCompleteMe
レンダリングclang_complete
時代遅れが、私はそれを自分で使用するためには至っていないとして、私はその有用性を保証することはできません。
clang_complete gitリポジトリ:https : //github.com/Rip-Rip/clang_complete