আমি একাধিক সি ++ উত্স ফাইল প্রকল্পে কোনও ফাংশন ঘোষণার বা সংজ্ঞায় যেতে পারি?


15

আমি একাধিক সি ++ উত্স ফাইল প্রকল্পে কোনও ফাংশন ঘোষণার বা সংজ্ঞায় যেতে পারি?

বলুন আমার কাছে একটি শিরোনাম ফাইল রয়েছে foo.hpp:

int bar();

এবং একটি উত্স ফাইল foo.cpp:

#include "foo.hpp"
int bar() { return 42; }

এবং একটি প্রধান ফাইল main.cpp:

#include "foo.hpp"
int main() { bar(); return 0; }

ফাংশন bar()থেকে ফাংশনটির সংজ্ঞা এবং ঘোষণা উভয়ই কি ভিএম খুঁজে পেতে mainপারে?

উত্তর:


15

সমৃদ্ধ ctags এটি অর্জনের সহজ উপায়। জিএনইউ / লিনাক্সের অধীনে (যেমন উবুন্টু বা দেবিয়ান) আপনার কেবলমাত্র করতে সক্ষম হবেন

sudo apt-get install exuberant-ctags

(ওএসএক্সের জন্য "install ব্রিউ ইনস্টল সিটি্যাগস" পর্যাপ্ত হওয়া উচিত; উইন্ডোজের জন্য আপনি http://ctags.sourceforge.net/ এ গিয়ে স্ট্যান্ড স্টোন এক্সিকিউটেবল ডাউনলোড করতে চাইতে পারেন )

তারপরে আপনার প্রকল্পের মূল ফোল্ডারে নেভিগেট করুন এবং রান করুন

ctags -R --exclude=.git .

এটি আপনার পুরো প্রকল্পটি স্ক্যান করবে এবং একটি ./tags ফাইল তৈরি করবে যা ভীম স্বয়ংক্রিয়ভাবে আপনাকে একটি কী এর টিপে ফাংশনগুলিতে ঝাঁপ দেওয়ার ক্ষমতা সরবরাহ করতে ব্যবহার করবে use যথা:

Ctrl + ]

আপনার কার্সারটি ফাংশনে রেখে দিয়ে আপনি এর বাস্তবায়ন দেখতে চান। অন্যান্য সংমিশ্রণ এবং অনেক কমান্ড মোড ফাংশন রয়েছে যা আপনাকে ctags (যেমন Ctrl+ tপুরানো ট্যাগ স্ট্যাক এন্ট্রিতে ঝাঁপ দাও) দ্বারা আপনার কোডের মাধ্যমে চলাচল করতে দেয় । :help 29.1একটি ওভারভিউ জন্য দেখুন ।

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

ইঙ্গিত: আপনি যদি ctags এর ব্যাপক ব্যবহার করেন তবে সম্ভবত ভিম-ট্যাগলিস্ট ( http://vim-taglist.sourceforge.net ) প্লাগইনটিও এক নজর দেখার মতো। এটি আপনাকে সেই শ্রেণি / ফাইলের জন্য সমস্ত ফাংশনের তালিকা সহ একটি IDE- শৈলীর রূপরেখা দেয়।


দুটি জিনিস জেনে রাখা উচিত: সর্বজনীন-সিটি্যাগগুলি বিভিন্ন উপায়ে সমৃদ্ধ-সিটি্যাগগুলিকে ছাড়িয়ে যায়। এছাড়াও, কীভাবে গিটকে আপনার ট্যাগগুলি সিঙ্ক করতে দেওয়া যায়
ডি বেন নোবল

4

এখন পর্যন্ত আমি ঘোষণা বা কোনও ফাংশনের সংজ্ঞা নির্ধারণের সমস্যার দুটি সমাধানের নাম বলতে পারি can আমি জানি ট্যাগগুলি ভিত্তিক সমাধানের মতো আরও একটি সুপরিচিত আছে, তবে আমি এটি ব্যবহার না করায় আমি অন্যকে এটি দিতে দেব।

আরও ট্রেন্ডি প্রথমটি: YouCompleteMe এর একটি :GoToDefinitionএবং :GoToDeclarationএকজোড়া কমান্ড রয়েছে।

আমি যেটি ব্যবহার করি (10 বছরের দীর্ঘ অভ্যাসগুলি পরিবর্তন করা শক্ত)। আমার এলএইচ-ট্যাগ্স প্লাগইনটিতে একটি ctags ডাটাবেস উত্পন্ন করার এবং এটি বাড়িয়ে আপডেট করার একটি উপায় রয়েছে a এবং এটি CTRL+W Meta+Downসমস্ত ঘোষণাপত্র এবং সংজ্ঞা উপস্থাপনের জন্য একটি উপায়ও সরবরাহ করে যা কার্সারের অধীনে যা আছে তার সাথে মেলে (/ কী নির্বাচিত হয়)। যেহেতু এই সমাধানটি ctags এর উপর নির্ভর করে, এটি কার্সারের নীচে সনাক্তকারীকে ওভারলোডের বিষয়টি সত্যিই সম্পর্কিত কিনা তা জানতে সক্ষম হবে না। অন্যান্য ctags ভিত্তিক সমাধানগুলি এই বিষয়ে খারাপ (/ হিসাবে ভাল) হওয়া উচিত। তবে এখানে ওয়াইসিএম আরও ভাল হওয়া উচিত।

ডিস্কেল: আমি এর চেয়ে বেশি এরগনোমিক বিকল্প হিসাবে এলএইচ-ট্যাগগুলি প্রয়োগ করেছি :tselect

(আসলে আমি একটি তৃতীয় সমাধান মনে করি: আমি ঝনঝন-সূচক এবং এর সাথে সম্পর্কিত ভিআইএম প্লাগইন একটি কাঁটাচামড়া শুরু করেছিলাম যা এটি আবৃত করে ফেলেত। তবে ওয়াইসিএমের সাথে, আমি এই সমাধানটি ভুলে যেতে চাই)

সম্পাদনা: 2019 হিসাবে, সবচেয়ে কার্যকর সমাধানটি এলএসপি সার্ভারগুলির উপর নির্ভর করে । আমি ইনডেক্সে সিওসি + সিসিএল ব্যবহার করছি , লাফিয়ে আরও অনেক কিছু করি। আমি এমন কোনও প্রকল্পের জন্য সিওসি কনফিগার করতে খুব অলস হয়ে থাকি যেখানে আমি বেশি সময় ব্যয় করি না বা যেখানে আমি ঝনঝন এবং সিসিএলস এর সাম্প্রতিক সংস্করণগুলি ইনস্টল করতে পারি না তার জন্য আমি ট্যাগগুলি ভিত্তিক সমাধানগুলিতে ফিরে যাচ্ছি।


1
ইনপুট দেওয়ার জন্য আপনাকে ধন্যবাদ, প্রতিটি সমাধান পরীক্ষা করবে। আমি YouCompleteMe পরীক্ষা করেছি এবং কেবল GoToDeclarationএকাধিক উত্স ফাইলগুলির সাথে কাজ করি। এখানে ডক্স থেকে উদ্ধৃতি এর GoToDefinition: For C-family languages this only works ... when the definition of the symbol is in the current translation unit.। কমান্ডগুলি হ'ল :YcmCompleter GoTo*
অ্যালান হাসেগওয়া

আমি এই লাইন মিস করেছি। এর অর্থ হ'ল ঝনঝন_আইডেক্সার এখনও কার্যকর হতে পারে। অন্যান্য সমাধানগুলি ইনস্টল করতে কিছুটা জটিল হতে পারে। প্রয়োজন হলে আমাকে ইমেল দিতে দ্বিধা করবেন না।
লুক হার্মিটে

3

কয়েকটি বিকল্প আছে। প্রথমটি হ'ল ctags। আপনার যদি আরও উন্নত সূচকের প্রয়োজন হয় তবে cscopeএটি একটি ভাল বিকল্প। উদাহরণস্বরূপ এটি আপনাকে প্রদত্ত ফাংশনটির সমস্ত কলার তালিকাবদ্ধ করতে দেয় । এই সরঞ্জামগুলি সঠিকভাবে বুঝতে না পেরে আপনার কোডটি সূচী করবে (প্রদত্ত প্রতীকটির অর্থ কী তা জানার জন্য তাদের একটি ব্যাকরণ সংজ্ঞা রয়েছে)। ব্যাকরণটি প্রসারিত করা তুলনামূলকভাবে সহজ। taglistপ্লাগ-ইন একটি এই জন্য থাকতে হবে এবং এটি taglist শো ফলাফলে indexer ব্যাকরণ প্রসারিত করা সম্ভব।

আপনার যদি সূচকের চেয়ে আরও কিছু প্রয়োজন হয় তবে সিনট্যাক্স চেক করার মতো YouCompleteMeসম্ভবত এটিই যাওয়ার উপায়। এটি শীর্ষে নির্মিত llvmএবং সুতরাং সঠিক পার্সার রয়েছে। এটি কোড সিনট্যাক্স এবং শব্দার্থবিজ্ঞান চেক করতে দেয় ।

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


0

আমি মনে করি যে এটি আপনার প্রয়োজন যা ctags। ভিম স্থানীয়ভাবে ctags এর সাথে একীভূত হয় এবং সংজ্ঞা এবং ঘোষণাগুলি কার্যকর করতে সহজে লাফিয়ে উঠতে পারে।

এই নিবন্ধটি দেখুন: http://andrew.stwrt.ca/posts/vim-ctags


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