ฉันได้ทดสอบ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
ใน vim8 packpath
$ 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
: MacVim 8.1.950 (155); ติดตั้งจาก DMG จากgithubบน macOS 10.14.3
clangd
: 7.0.0; ติดตั้งด้วย$ brew install llvm
(ไม่ใช่$PATH
ค่าเริ่มต้นให้ใช้พา ธ สัมบูรณ์)
vim-lsp
: e3f6933 (7 มี.ค. 2019) และasync.vim
: f301455 (13 ก.พ. 2019)