Saya telah menguji clangduntuk melihat apakah fungsi kelebihan beban sebenarnya dibedakan ketika mencari definisi yang benar dari baris kode di mana salah satu fungsi kelebihan digunakan. Dalam konfigurasi pengujian minimal saya menggunakan plugin vim vim-lspitu berhasil.
Konfigurasi Minimal
$MYVIMRC adalah
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
Instalasi vim-lspyang memerlukan async.vimpaket vim8
$ 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/
Sekarang konfigurasi vim Anda akan terlihat seperti (menghilangkan file dan folder yang bersarang lebih dalam)
~/.vim
❯ tree -L 4 -F
.
├── pack/
│ └── prabirshrestha/
│ └── start/
│ ├── async.vim/
│ └── vim-lsp/
└── vimrc
5 directories, 1 file
Uji
Sekarang perhatikan 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;
}
Menekan gdpada abcdari
abc(1,2) melompat ke baris pertama, dan dari
abc(1,2,3) melompat ke baris kelima.
Lingkungan dan versi:
vim: MacVim 8.1.950 (155); diinstal dari DMG dari github di macOS 10.14.3
clangd: 7.0.0; diinstal dengan $ brew install llvm(tidak $PATHsecara default, gunakan jalur absolut)
vim-lsp: e3f6933 (7 Maret 2019) dan async.vim: f301455 (13 Feb 2019)