मैंने यह clangd
देखने के लिए परीक्षण किया है कि क्या ओवरलोड कार्यों को वास्तव में एक कोड लाइन से सही परिभाषा की तलाश में प्रतिष्ठित किया जाता है, जहां ओवरलोड कार्यों में से एक का उपयोग किया जाता है। मेरे न्यूनतम परीक्षण विन्यास में विम प्लगइन का उपयोग करके 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
vim-lsp
जिसकी स्थापना के लिए async.vim
v88 पैकटपथ की आवश्यकता होती है
$ 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)
पांचवीं पंक्ति के लिए कूदता है।
पर्यावरण और संस्करण:
vim
: मैकविम 8.1.950 (155); से डीएमजी से स्थापित GitHub MacOS 10.14.3 पर
clangd
: 7.0.0; के साथ स्थापित $ brew install llvm
( $PATH
डिफ़ॉल्ट रूप से नहीं, निरपेक्ष पथ का उपयोग करें)
vim-lsp
: e3f6933 (मार्च 7, 2019) और async.vim
: f301455 (13 फरवरी, 2019)