Tôi đã thử nghiệm clangdđể xem liệu các hàm quá tải có thực sự được phân biệt khi tìm định nghĩa chính xác từ một dòng mã trong đó một trong các hàm bị quá tải được sử dụng hay không. Trong cấu hình thử nghiệm tối thiểu của tôi bằng cách sử dụng plugin vim, vim-lspnó đã hoạt động.
Cấu hình tối thiểu
$MYVIMRC Là
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
Cài đặt trong vim-lspđó yêu cầu async.vimvào packpath 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/
Bây giờ cấu hình vim của bạn sẽ trông như thế (bỏ qua các tệp và thư mục được lồng sâu hơn)
~/.vim
❯ tree -L 4 -F
.
├── pack/
│ └── prabirshrestha/
│ └── start/
│ ├── async.vim/
│ └── vim-lsp/
└── vimrc
5 directories, 1 file
Kiểm tra
Bây giờ hãy xem xét tệp 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;
}
Nhấn gdvào abccủa
abc(1,2) nhảy đến dòng đầu tiên và
abc(1,2,3) nhảy đến dòng thứ năm.
Môi trường và phiên bản:
vim: MacVim 8.1.950 (155); được cài đặt từ DMG từ github trên macOS 10.14.3
clangd: 7.0.0; được cài đặt với $ brew install llvm(không $PATHtheo mặc định, sử dụng đường dẫn tuyệt đối)
vim-lsp: e3f6933 (ngày 7 tháng 3 năm 2019) và async.vim: f301455 (ngày 13 tháng 2 năm 2019)