cscope বা ctags কেন একে অপরকে বেছে নেবেন? [বন্ধ]


131

আমি প্রাথমিকভাবে সম্পাদক হিসাবে ভিআইএম / জিভিআইএম ব্যবহার করি এবং কার্নেল উত্স অন্বেষণের জন্য lxr (লিনাক্স ক্রস রেফারেন্স) এবং সিস্কোপ বা সিটি্যাগ ব্যবহার করতে চাই। তবে আমি কখনও সিস্কোপ বা সিটি্যাগ ব্যবহার করিনি এবং প্রাথমিক সম্পাদক হিসাবে আমার ভিমের ব্যবহার বিবেচনায় রেখে কেন অন্য একজনকে বেছে নিতে পারে তা শুনতে শুনতে চাই।

উত্তর:


157

ctags দুটি বৈশিষ্ট্য সক্ষম করে: ফাংশন কলগুলি থেকে তাদের সংজ্ঞায়িত করতে ও ওমনি সমাপ্তির অনুমতি দেয়। প্রথমটির অর্থ হ'ল আপনি যখন কোনও পদ্ধতিতে কল পেলেন তখন হিট করছেন g]বা CTRL-]যেখানে সেই পদ্ধতিটি সংজ্ঞায়িত বা প্রয়োগ করা হয়েছে সেখানে চলে যাবেন। দ্বিতীয় বৈশিষ্ট্যটির অর্থ হ'ল আপনি যখন টাইপ করবেন foo.বা foo->, এবং যদি foo একটি কাঠামো হয়, তবে ক্ষেত্র সমাপ্তির সাথে একটি পপ-আপ মেনু প্রদর্শিত হবে।

cscope এর প্রথম বৈশিষ্ট্যও রয়েছে - ব্যবহার করে set cscopetag- তবে শেষ নয়। তবে সিস্কোপ অতিরিক্তভাবে যেখানে কোনও ফাংশনও বলা হয় সেখানে যে কোনও জায়গায় লাফ দেওয়ার ক্ষমতা যুক্ত করে।

যতক্ষণ না কোনও কোড বেসের চারপাশে জাম্প দেওয়ার বিষয়টি বিবেচনা করা হয়, ctags কেবল আপনাকে সেই জায়গার দিকে নিয়ে যাবে যেখানে ফাংশনটি প্রয়োগ করা হয়েছে, যেখানে সিস্কোপ আপনাকে দেখাতে পারে যেখানে কোনও ফাংশনও বলা হয়।

কেন আপনি একে অপরকে বেছে নেবেন? ভাল, আমি উভয় ব্যবহার। ctags সেট আপ করা সহজ, দ্রুত চালানো এবং যদি আপনি কেবলমাত্র এক উপায়ে ঝাঁপ দেওয়ার বিষয়ে চিন্তা করেন এটি আপনাকে কম লাইন দেখায়। আপনি কেবল চালাতে পারেন :!ctags -R .এবং g]ঠিক কাজ করতে পারেন । এটি ওমনি সম্পূর্ণ জিনিসকে সক্ষম করে।

Cscope বড়, অজানা কোড ঘাঁটির জন্য দুর্দান্ত। সেট আপটি একটি ব্যথা কারণ পার্স করার জন্য সিস্কোপের ফাইলগুলির নামের তালিকা থাকা একটি ফাইল দরকার। এছাড়াও ভিমে, ডিফল্টরূপে কোনও কী বাঁধাই সেট আপ করা হয় না - আপনাকে :cscope blah blahম্যানুয়ালি চালানো দরকার ।

মুষ্টির সমস্যাটি সমাধান করার জন্য আমার কাছে একটি বাশ স্ক্রিপ্ট পাওয়া গেছে cscope_gen.shযা এরকম দেখাচ্ছে:

#!/bin/sh
find . -name '*.py' \
-o -name '*.java' \
-o -iname '*.[CH]' \
-o -name '*.cpp' \
-o -name '*.cc' \
-o -name '*.hpp'  \
> cscope.files

# -b: just build
# -q: create inverted index
cscope -b -q

এটি কোডটি অনুসন্ধান করে যা আমি আগ্রহী, cscope.files তালিকা তৈরি করে এবং ডাটাবেস তৈরি করে। এইভাবে আমি সেট আপের সমস্ত ধাপগুলি মনে রাখার পরিবর্তে ":! Cscope_gen.sh" চালাতে পারি।

আমি এই স্নিপেটের সাহায্যে সিএসপিএল অনুসন্ধানটি সিটিআরএল-স্পেস এক্স 2 এ ম্যাপ করব, যা সিস্কোপের অন্য ডাউনারকে প্রশমিত করে:

nmap <C-@><C-@> :cs find s <C-R>=expand("<cword>")<CR><CR>

আছে প্লাগইন এই cscope_maps.vim অনুরূপ বাইন্ডিং একটি গুচ্ছ আপ যে সেট। সমস্ত বিকল্পের অর্থ কী তা আমি কখনই মনে করতে পারি না, তাই সিটিআরএল-স্পেসে লেগে থাকুন।

সুতরাং উপসংহারে: ctags সেটআপ করা সহজ এবং বেশিরভাগ কিছুই না করে কাজ করে, এটি ওমনি-সম্পূর্ণের জন্যও অত্যাবশ্যক। আপনার যদি একটি বৃহত এবং বেশিরভাগ অজানা কোড বেজ বজায় রাখতে হয় তবে সেক্ষেত্রে আরও বেশি লেগের কাজ প্রয়োজন হলে সিস্কোপ আরও বৈশিষ্ট্য সরবরাহ করে।


2
সিটি্যাগগুলি আরও নির্ভুল করার কোনও উপায় আছে কি? আমি make tagsকর্নেলের রুট ডিয়ারে করেছিলাম এবং চারপাশে লাফিয়ে খেলছিলাম এবং বেশিরভাগ সময় ভুল জায়গায় চলে যায়। আমি পড়লাম যে সিটি্যাগগুলিতে সি প্রিপ্রোসেসর নিয়ে সমস্যা রয়েছে, তবে যে সিটি্যাগগুলি এলএক্সআর-তে ব্যবহৃত হয় তা বিবেচনা করে অবশ্যই কিছু করা উচিত।
রবার্ট এস বার্নেস

2
যদি গভীর ম্যাক্রো ভুডু থাকে তবে ctags সম্ভবত ব্যর্থ হবে :-( আমি এটি বেশিরভাগ সি ++
স্টাফের

12
সেট করুন cscopetag( cst) তৈরি করতে :tagএবং CTRL-]কমান্ডগুলি প্রথমে
সিস্কোপের

1
এছাড়াও, ctags পুনরাবৃত্ত অনুসন্ধানে বেশ ধীর, "ctags -L cscope.files" ব্যবহার করে আপনার ট্যাগ জেনারেশনে উল্লেখযোগ্যভাবে গতি বাড়িয়ে দেবে।
অ্যারন এইচ।

1
@ রবার্টএস.বার্নেস এক ধরণের সমাধান ব্যবহার করছেন g C-], ভিম আপনাকে নামের সাথে মেলে ট্যাগগুলির তালিকা প্রদর্শন করবে। আপনি ম্যানুয়ালি যে সুনির্দিষ্ট সংজ্ঞাটি খুঁজছেন তা আপনাকে খুঁজে পেতে হবে।
হুবার্ট কারিও

15

কয়েক মাস আগেও আমি একই পরিস্থিতিতে ছিলাম ...

সিটি্যাগগুলির নির্ভুলতার অভাব হ'ল একটি বেদনা ... এবং আমি ম্যাক্রো সম্পর্কিত সমস্ত স্টাফের জন্য সিস্কোপকে আরও ভাল দেখতে পেয়েছি (এবং লিনাক্স কার্নেলে ম্যাক্রোগুলির একগুচ্ছ রয়েছে) ..

ব্যবহার সম্পর্কে, এটি আসলে সহজবোধ্য ... আপনি কেবল আপনার কার্নেলের গোড়ায় cscope -R টাইপ করুন এবং তারপরে আপনার কোনও উদ্বেগ করার কিছুই নেই ... (মানে আপনি যদি এটি নিখুঁত অন্বেষণ করতে চান তবে ...)

তারপরে, মূল বাইন্ডিংগুলি সমস্ত Ctrl- on এর উপর ভিত্তি করে (আপনি যদি Ctrl থেকে অ্যালার্জিযুক্ত হন তবে আপনি এটি পুনরায় তৈরি করতে পারেন), আপনি মূলত s এবং g ব্যবহার করেন ....,

কার্নেলের জন্য বিকাশ করছে, আমার এত সমাপ্তির দরকার নেই ...

যাইহোক, সিস্কোপের জন্য যান, এটি অনেক বেশি সুবিধাজনক, নির্ভুল।


4
<< আপনি কেবল আপনার কার্নেলের গোড়ায় cscope -R টাইপ করুন .... কার্নেলের নিচে "Make cscope" টাইপ করা ভাল, অন্যথায় আপনি লিনাক্স কার্নেলে উপস্থিত সমস্ত আর্কিটেকচার সমাপ্ত করবেন এবং সেইজন্য একই সি প্রতীকটির একাধিক সংজ্ঞা পাবেন।
কুমার

4

হুম ... আপনার সম্ভবত সিটি্যাগের পরিবর্তে ইটাগ ব্যবহার করা উচিত ...

আপনি যদি সিস্কোপ ব্যবহার করেন, তবে আপনি কল চেইন দেখতে পাবেন, অর্থাত্ এই ফাংশনটি কে কল করে এবং এই ফাংশনটি কোন ফাংশনটিতে কল করে?

আমি নিশ্চিত না এটিটাগ / সিটি্যাগ ব্যবহার করে এটি করা যায় কিনা ...

এটি কেবল একটি বৈশিষ্ট্য ... একটি নির্দিষ্ট ফাংশন সংজ্ঞা রয়েছে এমন ফাইলটি সন্ধান করার কী আছে? এটি আপনি কেবল সিস্কোপে পাবেন।

আমি ব্যবহার করি সিস্কোপ এবং ইটাগ উভয়ই , এটি উভয়ই বিভিন্ন জিনিসের জন্য বিশেষত লিনাক্স কার্নেলের মতো একটি বৃহত কোডবেস নিয়ে কাজ করার সময়। আসলে, যখন আমি লিনাক্স কার্নেল / জেনের সাথে কাজ শুরু করি তখন আমি সিস্কোপ এবং ইটাগগুলি ব্যবহার শুরু করি।

এলএক্সআর দুর্দান্ত নয়, কারণ আপনাকে ক্লিক করতে হবে, নেটওয়ার্কের উপর দিয়ে যেতে হবে ইত্যাদি, যেখানে আপনি আপনার কার্নেল কোডে সিস্কোপ এবং ট্যাগ ডেটাবেস তৈরি করতে পারেন এবং নেটওয়ার্কের উপর দিয়ে যেতে হবে না (এলএক্সআর এর বিপরীতে)।


ইটাগগুলি কি কেবল ইম্যাকের জন্য নয়? আমি একচেটিয়াভাবে জি / ভিএম ব্যবহার করি।
রবার্ট এস বার্নেস

হ্যাঁ তুমিই ঠিক. ম্যান পৃষ্ঠা থেকে: ইটাগস প্রোগ্রামটি ট্যাগ টেবিল ফাইল তৈরি করতে ব্যবহৃত হয়, ইমে্যাকস (1) দ্বারা বোঝা ফর্ম্যাটে; ভিটি (1) দ্বারা বোঝা ফর্ম্যাটে অনুরূপ টেবিল তৈরি করতে ctags প্রোগ্রামটি ব্যবহৃত হয়।
আরএমকে

1
আমি বিশ্বাস করি এমন দুটি স্বাদযুক্ত ইটাগ এবং সিটি্যাগ রয়েছে। একটি হ'ল ইম্যাকস, অন্যটি হ'ল বিস্তৃত সিটি্যাগস। প্রথমটি ইম্যাক্সের জন্য প্রথম লেখা হয়েছিল, তবে vi এর জন্যও এটি ব্যবহার করা যেতে পারে; দ্বিতীয়টি প্রথম vi এর জন্য লেখা হয়েছিল, তবে ইমাসের জন্যও এটি ব্যবহার করা যেতে পারে। আমি দ্বিতীয়টি (বিস্তৃত ctags) ব্যবহার করা সহজ, যদিও আমি একজন ইম্যাক্স ব্যবহারকারী। আপনি যদি এক্সবিউরেন্ট-সিটি্যাগস প্যাকেজটি ইনস্টল করেন তবে এটিগ / সিটি্যাগস বাইনারিগুলির লিঙ্কগুলি পরিবর্তন হবে এবং বিভিন্ন বাইনারিগুলিতে নির্দেশ করবে।
অস্টুন

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