ভিম, সিটি্যাগ এবং ওভারলোডিং


10

একাধিক সংজ্ঞা থাকলে স্বয়ংক্রিয়ভাবে সঠিক মিলের সংজ্ঞাটিতে ভিম লাফ দেওয়ার কোনও উপায় আছে কি ? আমাদের সি ++ কোড ভারিভাবে ফাংশন ওভারলোডিং ব্যবহার করে এবং ভিএম এর সিটি্যাগগুলি পরিচালনা করা এর জন্য প্রস্তুত বলে মনে হয় না।

উদাহরণ স্বরূপ,

void abc(int a, int b) {

}

void abc(int a, int b, int c) {

}

আশ্চর্যজনকভাবে, ctrl]চালু

abc(1,2,3);

1 ম সংজ্ঞা গ্রহণ করে এবং সঠিক সংজ্ঞাটি নয় যা ২ য়। এছাড়াও, g]বিকল্পগুলির জন্য অনুরোধ জানানো হয় তবে এটি আমি খুঁজছি না।

ধন্যবাদ

উত্তর:


4

ডকুমেন্টেশন ( :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] আপনি যা সন্ধান করছেন তা নাও হতে পারে তবে ভিমের মধ্যে এটিই সবচেয়ে ভাল।

মূলত, আপনি ctags এবং Vim আপনার কোডটি বোঝার আশা করতে পারবেন না , সুতরাং আপনাকে একটি স্মার্ট ইন্ডেক্সার (সিস্কোপ, জিএনইউ গ্লোবাল, বা ঝড়ের উপর ভিত্তি করে কিছু) সন্ধান করতে হবে বা একটি আসল আইডিই ব্যবহার করতে হবে।


1

জঞ্জাল & vim-lsp

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.vimvim8 প্যাকপথের মধ্যে প্রয়োজন into

$ 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
❯ tree -L 4 -F
.
├── pack/
│   └── prabirshrestha/
│       └── start/
│           ├── async.vim/
│           └── vim-lsp/
└── vimrc

5 directories, 1 file

পরীক্ষা

এখন সিপিপি ফাইল বিবেচনা করুন

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); থেকে DMG হলো থেকে ইনস্টল GitHub MacOS 10.14.3 উপর
  • clangd: 7.0.0; ইনস্টল করা $ brew install llvm( $PATHডিফল্ট হিসাবে নয়, নিখুঁত পাথ ব্যবহার করুন)
  • vim-lsp: e3f6933 (মার্চ 7, 2019) এবং async.vim: f301455 (ফেব্রুয়ারী 13, 2019)

0

যেমনটি রোমানল বলেছে, কোডটি ctagsসত্যই বুঝতে পারে না, তাই এটি সর্বোত্তম যা করতে পারে তা হ'ল আপনি যে নামটি অনুসন্ধান করছেন সেটিকে ভাগ করে নেওয়ার জন্য আপনাকে ফাংশনগুলি নির্দেশ করতে পারে।

তবে আমি বিশ্বাস করি যে clang_completeপ্লাগইনটি আপনি যা কার্যকারিতাটি সরবরাহ করেন তা সরবরাহ করে। এটি clangযে ফাংশনটি আপনি সন্ধান করছেন তার সাথে মেলে এবং একই নামটি ভাগ করে নেওয়ার সাথে কেবল এটি নয়, এটি সন্ধান করতে এটি সংকলকটি ব্যবহার করে। এটি এর ctrl-]কার্যকারিতা ওভাররাইড করবে ctags

আমিও দেখেছি এটা বলেন যে YouCompleteMeরেন্ডার clang_completeসেকেলে, কিন্তু আমি এখনো নিজেকে ব্যবহার করতে হবে, আমি তার উপযোগ নিশ্চয়তা দিতে পারে না।

ঝনঝন_পম্পূর্ণ গিট রেপো: https://github.com/Rip-Rip/clang_complete


আমি ঝনঝন_পম্পূর্ণ সম্পর্কে বলতে পারি না , তবে, ওয়াইসিএম অন্য অনুবাদ ইউনিটে কোনও ফাংশন সংজ্ঞা (sic) খুঁজে পাচ্ছে না। আমাদের কাছে (/ ছিল) ঝনঝন-সূচক (সত্যই রক্ষণাবেক্ষণ করা হয়নি) এবং আরও কয়েকটি প্লাগইন রয়েছে। আজকাল, আমি ল্যাঙ্গুয়েজ সার্ভার প্রোটোকল প্রয়োগকারী সংযুক্ত + প্লাগইনগুলি পরীক্ষা করতে বলব।
লুক হার্মিট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.