ভিএম-তে ফাংশন সংজ্ঞাতে যান Jump


241

আমি কীভাবে ভিএম ব্যবহার করে কোনও ফাংশন সংজ্ঞায় যেতে পারি? উদাহরণস্বরূপ ভিজ্যুয়াল অ্যাসিস্টের সাথে, আমি একটি ফাংশনের অধীনে Alt+ টাইপ করতে পারি gএবং এটি সংজ্ঞাযুক্ত ফাইলগুলি তালিকাভুক্ত একটি প্রসঙ্গ মেনু খুলবে।

আমি কীভাবে এইভাবে কিছু করতে পারি?


2
gnu গ্লোবাল ctags চেয়ে ভাল।
জিচাও

6
@ জিচাও, আপনি কি আমাদের আপনার অভিজ্ঞতা সম্পর্কে আরও কিছু অন্তর্দৃষ্টি দিতে পারেন? কোন ভাষা নিয়ে আপনার জন্য জিএনএন গ্লোবাল আরও ভাল কাজ করেছে? আপনি যে বিষয়টিকে পছন্দ করেছেন তা আমার পক্ষে গুরুত্বপূর্ণ হওয়ার বিষয়ে অন্য কিছু আছে কি? অথবা সম্ভবত আপনি এটি বিভিন্ন বিভিন্ন পরিস্থিতিতে ব্যবহার করেছেন এবং আপনি বেশিরভাগ / সর্বদা এটি পছন্দ করেন বলে মনে করেন? আপনি এটি সম্পর্কে ভাল কি পছন্দ করেন? ধন্যবাদ।
এখনও_ড্রিমিং_1

@ জিচাও আমি আপনার মন্তব্যটিকে একটি সম্প্রদায়ের উইকি উত্তরে রূপান্তরিত করেছি। এই উত্তরের জন্য আমি আপনার পরিবর্তনগুলি এবং ইনপুটকে স্বাগত জানাব।
এখনও_ড্রিমিং_1

উত্তর:


213

Ctags ব্যবহার করুন। একটি ট্যাগ ফাইল তৈরি করুন এবং vim কে এটি ট্যাগ: কমান্ডটি ব্যবহার করছে তা বলুন। তারপরে আপনি কেবল ফাংশন সংজ্ঞা ব্যবহার করে লাফিয়ে উঠতে পারেন Ctrl-]

এই প্রশ্নে আরও ট্যাগ কৌশল এবং টিপস আছে ।


2
পিএইচপি হ'ল সি-এর মতো যথেষ্ট যে "এক্সবিউরেন্ট সিটি্যাগগুলি" এর সাথে কাজ করা উচিত। এটি অজগর মোড আছে কি না জানি না।
পল টমলিন

5
সিস্কোপের সাথে কোনও অভিজ্ঞতা নেই। কী?
পল টমলিন

10
সিটির সাথে সাদৃশ্যটির পিএইচপি সমর্থন করার জন্য কিছুই নেই। এটি পিএইচপি পাশাপাশি পাইথন সমর্থন করে। কটাক্ষপাত আছে ctags.sourceforge.net/languages.html পূর্ণ সমর্থন দেখতে।
ডেটা

1
আমি কীভাবে সিটি্যাগ তৈরি করতে পারি?
dwaynemac

4
এই সিটি্যাগগুলি কীভাবে পরিচালনা করা যায় তা শেখা ভাল যেখানে একটি রেফারেন্স পাওয়া ভাল to
Fzs2

137

যদি সমস্ত কিছু একটি ফাইলে থাকে তবে কমান্ডটি রয়েছে gd('গোটো সংজ্ঞা হিসাবে'), যা আপনাকে কার্সারের নীচে শব্দের ফাইলের প্রথম উপস্থিতিতে নিয়ে যাবে, যা প্রায়শই সংজ্ঞা হয়।


1
আমার যদি কার্সারের নিচে শব্দ না থাকে (আমি বরং এটি টাইপ করব)?
ফুয়াদ সৌদ

@ ফুয়াদসৌদ কেবল এটি ব্যবহার করে সন্ধান করুন/
লুকাশাস

6
/এটি প্রায় সবসময় সুনির্দিষ্ট নয়, কারণ এটি সমস্ত ঘটনাকে মেলাতে চলেছে। আমি জানতে পেরেছিলাম যে আপনি :tag <function_name>ctags এর মাধ্যমে সংজ্ঞাটিতে যেতে পারেন।
ফুয়াদ সৌদ

@ ফাউড জাম্প টু সংজ্ঞা বৈশিষ্ট্যটি কার্সার (প্রতিটি আইডিইতে) দিয়ে একটি সনাক্তকারী চিহ্নিত করার উপর নির্ভর করে। টাইপিং / অনুসন্ধান অন্য বৈশিষ্ট্য, আপনি এগুলি বিভ্রান্ত করছেন।
রক্তাক্ত

101

g* ctags সেট আপ না করে একটি শালীন কাজ করে।

অর্থাৎ টাইপ g, *(বা শুধু *- কার্সার অধীনে শব্দ জন্য অনুসন্ধান করতে (এই ক্ষেত্রে, ফাংশন নামে) নীচে দেখুন)। তারপরে nপরবর্তী (বা Shift- nপূর্ববর্তী) উপস্থিতিতে যেতে টিপুন ।

এটি সরাসরি সংজ্ঞাটিতে ঝাঁপ দেয় না, এই আদেশটি কেবল কার্সারের নীচে শব্দটির সন্ধান করে, তবে আপনি যদি এই মুহুর্তে ctags স্থাপনের সাথে মোকাবিলা করতে না চান তবে আপনি কমপক্ষে নিজেকে পুনরুদ্ধার থেকে বাঁচাতে পারবেন এর সংজ্ঞাটি অনুসন্ধান করতে ফাংশনের নামটি টাইপ করুন।

- সম্পাদনা - যদিও আমি দীর্ঘদিন ধরে জি * ব্যবহার করছি, আমি সম্প্রতি এই শর্টকাটগুলির জন্য দুটি শর্টকাট আবিষ্কার করেছি!

(ক) *কার্সারের নিচে শব্দের পরবর্তী ঘটনাতে লাফিয়ে উঠবে। ( gVi তে 'গোটো' কমান্ডটি টাইপ করার দরকার নেই )।

(খ) #আগের ঘটনাটিতে একই রকম ফ্যাশনে যায়।

এন এবং এন এখনও কাজ করে তবে '#' প্রায়শই বিপরীত দিকে শুরুতে অনুসন্ধান শুরু করার জন্য খুব কার্যকরী হয়, উদাহরণস্বরূপ, কার্সারের নীচে ভেরিয়েবলের ঘোষণার জন্য যখন।


10
মধ্যে পার্থক্য *এবং g*অনুসন্ধান শব্দ সীমানা নেই। *একটি করে \<keyword\>অনুসন্ধান (হিসাবে একই \bkeyword\b, নিয়মিত Regex মধ্যে) যখন g*এর জন্য অনুসন্ধান keywordশব্দ সীমানা ছাড়াই।
নিকোলাই এস

আপনার যদি কোনও ফাইলে কোনও ফাংশনের শতভাগ উপস্থিতি রয়েছে, *সংজ্ঞাটি পাওয়ার আগে আপনাকে গড়ে 50 টি হিট নিতে চলেছে।
nnot101

49

আপনার প্রোগ্রামের যে কোনও ভেরিয়েবলের উপর কার্সার রাখার সময় gdবা ব্যবহার করুন gD

  1. gd আপনাকে স্থানীয় ঘোষণায় নিয়ে যাবে।
  2. gD আপনাকে বিশ্বব্যাপী ঘোষণায় নিয়ে যাবে।

আরও নেভিগেশন বিকল্প এখানে পাওয়া যাবে

লিনাক্স কার্নেলের মতো বড় প্রকল্পের রেফারেন্সিংয়ের জন্য সিস্কোপ ব্যবহার করুন ।


14

পল টমব্লিন যেমন উল্লেখ করেছেন আপনাকে ctags ব্যবহার করতে হবে । আপনি প্লাগিনগুলি যথাযথ বাছাই করতে বা কার্সারের অধীনে কার্যটির সংজ্ঞাটি পূর্বরূপ বিবেচনা করতেও বিবেচনা করতে পারেন । প্লাগিন ব্যতীত আপনার ctags সমর্থন হিসাবে নির্মিত শত শত ওভারলোডেড 'doAction' পদ্ধতিগুলির মধ্যে একটি বেছে নেওয়ার চেষ্টা করে মাথা ব্যথার প্রসঙ্গটি বিবেচনা করে না - কেবল একটি নাম।

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

আপনি যদি জানেন যে ফাংশনটি বর্তমান ফাইলে সংজ্ঞায়িত করা হয়েছে, তবে আপনি 'জিডি' কীস্ট্রোককে কার্সারের অধীনে প্রতীকটির সংজ্ঞাটিতে যেতে একটি সাধারণ মোডে ব্যবহার করতে পারেন।

নেভিগেশনের জন্য এখানে সবচেয়ে ডাউনলোড করা প্লাগইন
http://www.vim.org/scriptts/script.php?script_id=273

Http://www.vim.org/scriptts/script.php?script_id=2507 ট্যাগ করার জন্য প্রসঙ্গ নির্বাচন করতে আমি এখানে একটি লিখেছি


হাই @ মাইকোলা-গোলুয়েভ, স্ক্রিপ্টের Detailed descriptionঅংশে আপনার সরবরাহিত লিঙ্কটি নষ্ট #2507হয়ে গেছে। আপনি দয়া করে অন্য একটি সরবরাহ করতে পারেন?
ফেলিকজেড

12

আর একটি সাধারণ কৌশল হ'ল প্রথম কলামে ফাংশনটির নাম স্থাপন করা। এটি সাধারণ অনুসন্ধানের সাথে সংজ্ঞাটি সন্ধান করতে দেয়।

int
main(int argc, char *argv[])
{
    ...
}

উপরের ফাংশনটি তখন /^mainফাইলের ভিতরে বা :grep -r '^main' *.cডিরেক্টরিতে পাওয়া যায়। যতক্ষণ কোড সঠিকভাবে ইন্টেন্ট করা থাকে কেবলমাত্র রেখার শুরুর দিকে সনাক্তকারীটি ঘটবে কেবল ফাংশন সংজ্ঞাতে।

অবশ্যই আপনি যদি এই মুহূর্ত থেকে ctags ব্যবহার না করেন তবে আপনার নিজের জন্য লজ্জা পাওয়া উচিত! তবে আমি এই কোডিং স্ট্যান্ডার্ডটিকে পাশাপাশি একটি সহায়ক সংযোজন বলে মনে করি।


13
আমি সবসময় ভাবছিলাম যে কেন কিছু কোডাররা তাদের স্বাক্ষরগুলি সেভাবে লেখেন!
টারাসাচ

এছাড়াও, যখন আপনি প্রথম কলামে '{' সহ আপনার ফাংশন স্বাক্ষরগুলি লিখবেন, আপনি ফাইলটিতে এগিয়ে যেতে এবং] [[পিছনে যেতে) টিপে প্রতিটি ফাংশনে দ্রুত ঘুরে আসতে পারেন।
বেন্টচেইনরিং

12

টি এল; ডিআর:

আধুনিক উপায় হ'ল ইন্টেলিজেন্স-এর মতো সমাপ্তির জন্য সিওসি এবং একাধিক ভাষা সার্ভার (এলএস) লাফ-টু-ডেফিনেশনের জন্য (এবং উপায় আরও বেশি) ব্যবহার করা। আরও কার্যকারিতার জন্য (তবে এটি জাম্প-টু-ডেফিনেশনের প্রয়োজন নেই) আপনি এক বা একাধিক ডিবাগার ইনস্টল করতে পারেন এবং একটি সম্পূর্ণ প্রস্ফুটিত IDE অভিজ্ঞতা পেতে পারেন। দ্রুত শুরু:

  1. আপনার ভিআইএম প্লাগ-ইনগুলি পরিচালনা করতে ভিআইএম -প্লাগ ইনস্টল করুন
  2. যোগ cóc এবং (ঐচ্ছিকভাবে) Vimspector উপরের ~/.vimrc:
    call plug#begin()
    Plug 'neoclide/coc.nvim', {'branch': 'release'}
    Plug 'puremourning/vimspector'
    call plug#end()
    
  3. :source $MYVIMRC | PlugInstallভিআইএম প্লাগইনগুলি ডাউনলোড করতে কল করুন
  4. পুনরায় চালু করুন vimএবং :CocInstall coc-marketplaceসিওসি এক্সটেনশনে সহজে অ্যাক্সেস পেতে কল করুন
  5. :CocList marketplaceভাষা সার্ভারের জন্য কল এবং অনুসন্ধান করুন, যেমন:
    • pythonখুঁজে পেতে টাইপ করুন coc-jedi,
    • টাইপ phpএটি coc-phpls, ইত্যাদি
  6. ( install_gadget.py --helpallyচ্ছিকভাবে ) উপলব্ধ ডিবাগারগুলির জন্য দেখুন , যেমন:
    • ./install_gadget.py --enable-python,
    • ./install_gadget.py --force-enable-phpইত্যাদি

পুরো উত্তর:

ল্যাঙ্গুয়েজ সার্ভার (এলএস) একটি পৃথক স্ট্যান্ডএলোন অ্যাপ্লিকেশন (প্রতিটি প্রোগ্রামিং ভাষার জন্য একটি) যা ব্যাকগ্রাউন্ডে চলে এবং আপনার সম্পাদকের কাছে অতিরিক্ত দক্ষতা প্রকাশ করার জন্য রিয়েল টাইমে আপনার পুরো প্রকল্পটিকে বিশ্লেষণ করে (কোনও সম্পাদকই নয়, কেবল vim)। আপনি যেমন জিনিস পান:

  • নেমস্পেস সচেতন ট্যাগ সমাপ্তি
  • সংজ্ঞায় ঝাঁপ দাও
  • পরবর্তী / পূর্ববর্তী ত্রুটির দিকে ঝাঁপ দাও
  • কোনও অবজেক্টের সমস্ত রেফারেন্স সন্ধান করুন
  • সমস্ত ইন্টারফেস বাস্তবায়ন সন্ধান করুন
  • পুরো প্রকল্প জুড়ে নতুন নামকরণ করুন
  • হোভার নেভিগেশন ডকুমেন্টেশন
  • স্নিপেটস, কোড ক্রিয়া, ফর্ম্যাটিং, লেটিং এবং আরও অনেক কিছু ...

ভাষা সার্ভারের সাথে যোগাযোগ ল্যাঙ্গুয়েজ সার্ভার প্রোটোকল (এলএসপি) এর মাধ্যমে হয়। উভয় nvimএবং vim8(বা উচ্চতর) প্লাস-ইনগুলির মাধ্যমে এলএসপিকে সমর্থন করে, সর্বাধিক জনপ্রিয় হচ্ছে কনকয়ের অব কমপ্লিট (সিওসি)।

সক্রিয়ভাবে বিকশিত ভাষা সার্ভারগুলির তালিকা এবং তাদের ক্ষমতা ল্যাং সার্ভার ওয়েবসাইটে উপলব্ধ। এর সবগুলিই সিওসি এক্সটেনশান দ্বারা সরবরাহ করা হয় না। আপনি যদি তাদের মধ্যে একটি ব্যবহার করতে চান তবে আপনি নিজেই একটি সিওসি এক্সটেনশন লিখতে পারেন বা ম্যানুয়ালি এলএস ইনস্টল করতে পারেন এবং নিম্নলিখিত ভিআইএম প্লাগ-ইনগুলির কম্বোকে সিওসি বিকল্প হিসাবে ব্যবহার করতে পারেন:

ডিবাগদের সাথে যোগাযোগ ডিবাগ অ্যাডাপ্টার প্রোটোকল (ডিএপি) এর মাধ্যমে হয়। ভিআইএমের জন্য সর্বাধিক জনপ্রিয় ডিএপি প্লাগ-ইন হ'ল ভিমস্পেক্টর

মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিও কোডের জন্য ল্যাঙ্গুয়েজ সার্ভার প্রোটোকল (এলএসপি) তৈরি করেছিল এবং অনুমতিপ্রাপ্ত এমআইটি লাইসেন্স (রেড হ্যাট এবং কোডেনভির সহযোগিতায় মানকৃত) সহ একটি ওপেন সোর্স প্রকল্প হিসাবে প্রকাশিত হয়েছিল । পরে মাইক্রোসফ্ট ডিবিগ অ্যাডাপ্টার প্রোটোকল (ডিএপি) পাশাপাশি প্রকাশ করে। ভিএসকোড দ্বারা সমর্থিত যে কোনও ভাষা ভিআইএম-এ সমর্থিত।

আমি ব্যক্তিগতভাবে cóc + + ভাষা + + cóc এক্সটেনশন দ্বারা উপলব্ধ সার্ভারগুলি ব্যবহার সুপারিশ বীয়ার অতিরিক্ত linting জন্য (কিন্তু LSP সমর্থন cóc সঙ্গে এড়ানোর দ্বন্দ্ব অক্ষম সঙ্গে) + + Vimspector + + Vimspector দ্বারা উপলব্ধ debuggers + + নিম্নলিখিত VIM প্ল্যাগ-ইনগুলি ( "গ্যাজেটগুলি" বলা):

call plug#begin()
Plug 'neoclide/coc.nvim'
Plug 'dense-analysis/ale'
Plug 'puremourning/vimspector'
Plug 'scrooloose/nerdtree'
Plug 'scrooloose/nerdcommenter'
Plug 'sheerun/vim-polyglot'
Plug 'yggdroot/indentline'
Plug 'tpope/vim-surround'
Plug 'kana/vim-textobj-user'
  \| Plug 'glts/vim-textobj-comment'
Plug 'janko/vim-test'
Plug 'vim-scripts/vcscommand.vim'
Plug 'mhinz/vim-signify'
call plug#end()

তারা প্রতিটি কি করে তা দেখতে আপনি গুগল করতে পারেন।


11

1- এক্সবিউরেন্ট সিটি্যাগগুলি ইনস্টল করুন। আপনি যদি অক্স ব্যবহার করছেন তবে এই নিবন্ধটি একটি সামান্য কৌশল দেখায়: http://www.runtime-era.com/2012/05/exuberant-ctags-in-osx-107.html

2- আপনি যদি কেবলমাত্র আপনার ডিরেক্টরিতে ফাইলের জন্য ctags অন্তর্ভুক্ত করতে চান তবে এই ডিরেক্টরিটি আপনার ডিরেক্টরিতে চালান:

ctags -R

এটি আপনার জন্য একটি "ট্যাগ" ফাইল তৈরি করবে।

3- আপনি যদি রুবি ব্যবহার করেন এবং আপনার রত্নগুলির জন্য ctags অন্তর্ভুক্ত করতে চান (এটি আমার জন্য রুবিমোশন এবং স্থানীয় রত্নগুলির সাথে সত্যই সহায়ক হয়ে উঠেছে), নিম্নলিখিতগুলি করুন:

ctags --exclude=.git --exclude='*.log' -R * `bundle show --paths`

ক্রেডিট: https://coderwall.com/p/lv1qww (নোট করুন যে আমি -e বিকল্পটি বাদ দিয়েছি যা ভিমের পরিবর্তে ইম্যাকের জন্য ট্যাগ উত্পন্ন করে)

4- আপনার ~ / .vimrc এ নিম্নলিখিত লাইনটি যুক্ত করুন

set autochdir 
set tags+=./tags;

(কেন আধা কোলন: http://vim.wikia.com/wiki/Single_tags_file_for_a_s Source_tree )

5- আপনি যে শব্দটি অনুসরণ করতে এবং আঘাত করতে চান তাতে যান ctrl + ]; আপনি যদি ফিরে যেতে চান তবে ব্যবহার করুন ctrl+o(উত্স: https://stackoverflow.com/a/53929/226255 )


উল্লিখিত ম্যাক নিবন্ধটির লিঙ্কটি নষ্ট হয়ে গেছে। এখানে আপডেট লিংকটি রয়েছে: রানটাইম-era.blogspot.com/2012/05/… আপনার সেরা
বেটটি

6

পলের দ্বিতীয় প্রতিক্রিয়ায়: হ্যাঁ, ctags (বিশেষত বিস্ময়কর- ctags ( http://ctags.sourceforge.net/ )) দুর্দান্ত। আমি এটি আমার ভিএমআরসি-তেও যুক্ত করেছি, তাই আমি পুরো প্রকল্পের জন্য একটি ট্যাগ ফাইল ব্যবহার করতে পারি:

set tags=tags;/

2

ইনস্টল করুন cscope। এটি অনেক বেশি পছন্দ করে ctagsতবে আরও শক্তিশালী কাজ করে। সংজ্ঞা যেতে, Ctrl+ এর পরিবর্তে ], Ctrl+ \+ করুন g। অবশ্যই আপনি উভয় একযোগে ব্যবহার করতে পারেন। তবে একটি বড় প্রকল্পের সাথে (লিনাক্স কার্নেল বলুন), সিস্কোপটি কয়েক মাইল এগিয়ে।


1

সিটি্যাগগুলি তৈরি করার পরে, আপনি নিম্নলিখিতটি ভিএম-এ ব্যবহার করতে পারেন:

:tag <f_name>

উপরে আপনাকে কার্যকারিতা সংজ্ঞাতে নিয়ে যাবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.