Vim এবং Ctags টিপস এবং কৌশল [বন্ধ]


485

আমি আমার ভিমে (অথবা বরং জিভিএম) দিয়ে স্যাটাগগুলি (সি ++ বিকাশে সহায়তা করার জন্য) ইনস্টল করেছি এবং আপনার পছন্দসই কমান্ড, ম্যাক্রোস, শর্টকাটস, টিপস যা এর সাথে চলছে তা সন্ধান করতে চাই ...

আপনার সেরা অস্ত্রাগার ভাগ করুন। ভিম বিকাশের জন্য আপনি সি ++ এর জন্য আর কী কী ভিম অ্যাড-অনসের পরামর্শ দিবেন?

সম্পাদনা করুন Ctags এর সাথে মিলিয়ে আপনি আর কী কী অ্যাড-অন ব্যবহার করবেন?

EDIT2 আপনি ট্যাগগুলির সাথে gVim এর কোন সংস্করণ ব্যবহার করেন? এটা কি কোন পার্থক্য তৈরি করছে?

EDIT3 আপনি কীভাবে বড় এবং ছোট উভয় প্রকল্পের জন্য আপনার প্রোগ্রামিং অভিজ্ঞতা বাড়িয়ে তোলেন ?


15
নিশ্চিত করুন যে আপনি সেরা ফলাফলের জন্য
বিস্ময়কর

17
সম্ভবত কেভ গঠনমূলক নয়?
ফ্লয়েড

27
যদিও closed as not constructiveপ্রায় দু'বছর আগে এটি আমার পক্ষে এতটাই গঠনমূলক
সাজারি

15
আমি মনে করি এই প্রশ্নটি বন্ধ করার আসল কারণটি হওয়া উচিত ছিল: "এই প্রশ্নটি অত্যন্ত সহায়ক হওয়া সত্ত্বেও প্রশ্নোত্তরের স্ট্যাক ওভারফ্লো নীতিতে খাপ খায় না this প্রশ্ন এবং উত্তর".
দিয়েগো পিনো

2
এসও এর নিয়ম মেনে এই প্রশ্নটি কেন বন্ধ করা হয়েছে তা আমি বুঝতে পারি। তবে মুছে ফেলার জন্য>> 300-আপভোট উত্তরের সাথে একটি> 400 আপভোট প্রশ্নটি পতাকাঙ্কিত করা ক্ষুধার্ত দিক থেকে কিছুটা নয়, তাই না?
দেবসোলার

উত্তর:


394

Ctrl+ + ]- সংজ্ঞা যান
Ctrl+ + Tসংজ্ঞা থেকে ঝাঁপ দাও ফিরে -।
Ctrl+ W Ctrl+ ]- একটি অনুভূমিক বিভাজনে সংজ্ঞাটি খুলুন

ভিএমআরসি-তে এই লাইনগুলি যুক্ত করুন
map <C-\> :tab split<CR>:exec("tag ".expand("<cword>"))<CR>
map <A-]> :vsp <CR>:exec("tag ".expand("<cword>"))<CR>

Ctrl+ \- একটি নতুন ট্যাবে সংজ্ঞাটি খুলুন
Alt+ ]- একটি উল্লম্ব বিভাজনে সংজ্ঞাটি খুলুন

ট্যাগ তৈরি করার পরে। আপনি ফাংশনগুলি ট্যাগ করতে এবং ট্যাগ করতে নিম্নলিখিত কীগুলি ব্যবহার করতে পারেন:

Ctrl+ + Left MouseClick- সংজ্ঞা যান
Ctrl+ + Right MouseClickসংজ্ঞা থেকে ঝাঁপ দাও ফিরে -


8
সি -] => (নিয়ন্ত্রণ কী) এবং] কী সি - টি => (কন্ট্রোল কী) এবং টি কী কেবল নতুন বাচ্চাদের সিটি্যাগ করতে। নতুন ট্যাব ট্রিকের জন্য ধন্যবাদ
কুমার

6
একইভাবে, উইন্ডোটি বিভক্ত করার পরে Ctrl-w C-]আপনি এটি করতে পারেন C-w T(ওরফে শিফট-টি) সেই বিভাজনটিকে নতুন ট্যাবে পরিবর্তন করতে।
ড্যাশ-টম-ব্যাং

1
@ উইল আপনি যদি টার্মিনাল থেকে ভিএম ব্যবহার করে থাকেন তবে বিকল্প কীটি কোনও Alt কীর মতো আচরণ করার জন্য আপনাকে টার্মিনাল পছন্দগুলি পরিবর্তন করতে হবে। আপনি যদি ম্যাকভিম ব্যবহার করছেন তবে এই লাইনটি ভিআমআরসি 'সেট ম্যাকমেটা'তে যুক্ত করুন set ম্যাকমেটার জন্য ডক আছে,: ম্যাকমেটা।
আমজিথ

17
g C-]খুব দরকারী। এটি একাধিক সংজ্ঞার মধ্যে একটি চয়ন করার জন্য একটি দ্রুত কথোপকথন খোলে।
ভিন্সনজো পাইই

3
g]এছাড়াও দরকারী। আপনি ট্যাগের উপর কার্সারটি অবস্থান করতে পারেন এবং g]মেলানো ট্যাগগুলির একটি তালিকা পেতে টিপুন ।
zeekvfu

176

একটি লাইন যা সর্বদা আমার .vimrc এ যায়:

set tags=./tags;/

এটি "ট্যাগগুলি" এর জন্য বর্তমান ডিরেক্টরিতে সন্ধান করবে এবং একটি না পাওয়া পর্যন্ত গাছটিকে মূলের দিকে চালিত করবে। IOW, আপনি এর উত্স গাছের মূলের পরিবর্তে যে কোনও জায়গায় থাকতে পারেন।


37
রুট পর্যন্ত যেতে অতিরিক্ত হয়। আমি পরিবর্তে কেবল বাড়ীতে যাওয়ার পরামর্শ দিই: ট্যাগ + + ট্যাগ;
OME

37
আমি যে উত্স ট্রিগুলিতে কাজ করি তা সবসময় আমার হোম ডিরেক্টরিতে হয় না ... এবং OME HOM মূলত থেকে দুটি ডিরেক্টরি দূরে থাকে ... ভাল, আমি আরও দুটি ডিরেক্টরি অনুসন্ধান করতে পারি। :)
উজি

6
আমি W / uzi রাজি। আমার সিডব্লুটি যদি হয় / হোম / আমার / প্রোগ্রামিং / ফু / বার / বাজ / ব্যাং / বাম যা কেবল 8 ডিরেক্টরি লুপআপ আছে। আমি মনে করি এটি গতির জন্য আপনার সহনশীলতার উপর নির্ভর করে তবে আমার ডিরেক্টরিতে 1 ডিরেক্টরি দেখার সময়টি 8 থেকে আলাদাভাবে আলাদা নয়।
নাট মারে

1
এটি আপনার দৃশ্যের উপর নির্ভর করে, আমার কোনও একটি মেশিনে আমাকে গজেনস পরামর্শ ব্যবহার করা প্রয়োজন কারণ / হোমে মোটামুটি 8,000 ডিরেক্টরি রয়েছে এবং এটি কিছুটা স্বাচ্ছন্দ্য বোধ করে।
জেকেরিয়ান

1
অনুরূপ কিছু আছে কি cscope?
szx

45

সি উন্নয়নের জন্য আরেকটি দরকারী প্লাগইন cscope ঠিক যেমন Ctags আপনি সংজ্ঞা ঝাঁপ দেয়, Cscope জাম্প কলিং ফাংশন।

আপনার যদি আপনার ~ / bin / ডিরেক্টরিতে সিস্কোপ থাকে, তবে আপনার .vimrc এ নিম্নলিখিতগুলি যুক্ত করুন এবং কলিং ফাংশনে যেতে g ^] ব্যবহার করুন (দেখুন: সিস্কোপ সহায়তা করুন)।

if has("cscope")
    set csprg=~/bin/cscope
    set csto=0
    set cst
    set nocsverb
    " add any database in current directory
    if filereadable("cscope.out")
        cs add cscope.out
        " else add database pointed to by environment
    elseif $CSCOPE_DB != ""
        cs add $CSCOPE_DB
    endif
endif

প্রায় ভুলে গিয়েছে ... ঠিক যেমন ctags - আপনাকে ডেটাবেস তৈরি করতে হবে (এবং পর্যায়ক্রমে আপডেট করতে হবে)। আমি নিম্নলিখিত স্ক্রিপ্ট ব্যবহার

select_files > cscope.files
ctags -L cscope.files
ctags -e -L cscope.files
cscope -ub -i cscope.files

যেখানে 'সিলেক্ট ফাইলস' হ'ল অন্য স্ক্রিপ্ট যা মেকফাইল থেকে সি এবং শিরোনাম ফাইলগুলির তালিকা বের করে। এইভাবে আমি প্রকল্পের দ্বারা ব্যবহৃত ফাইলগুলিকে কেবল সূচীকরণ করি।


Ctags ওভার সিস্কোপ সুবিধা কি? তারা সবাই প্রশংসা করেন?
হোয়্যালডগ

4
তারা একে অপরের পরিপূরক। Ctags একটি প্রতীক বা একটি ফাংশন সংজ্ঞা খুঁজে পায়। Cscope সমস্ত ফাংশন কল করার জায়গা খুঁজে পেতে পারে। এগুলির দুটি ব্যবহারই বৃহত উত্স গাছগুলিতে নেভিগেশনকে খুব সহজ করে তোলে।
নিমরোডম

1
তবে এএফএআইসি সিএসকোপ এর সি ++ এর সীমিত ধারণা রয়েছে।
লুক হার্মিটে

এটি সীমিত, এবং খুব ভাল না। তবে এটি কী করে (ইউএসএজেজে ঝাঁপিয়ে পড়ে) এর চেয়ে ভাল বিকল্প আর নেই। এর প্রধান সমস্যাটি হ'ল আপনি যখন ফাংশন কলগুলিতে (চ) ঝাঁপিয়ে পড়তে চান, তখন আপনাকে প্রায়শই যে কোনও জায়গায় যে চিহ্নটি ব্যবহার করা হয় সেগুলি থেকে ঝাঁপিয়ে
গ্রেগ রজার্স

2
@ হোয়েলডেগ হ্যাঁ, যখন আমি সিটিআরএল + টিপছি] আমার সাউন্ড কার্ড আউটপুটটিতে "ক্লিপ.ওয়াভ" প্রেরণ করে :)
প্যাট্রিজিও রুলো

27

আপনি আপনার ctags অনুসন্ধানে ডিরেক্টরি যুক্ত করতে পারেন। উদাহরণস্বরূপ, আমি Qt4 এর জন্য একটি ctags সূচক তৈরি করেছি এবং এটি আমার .vimrc এ রেখেছি:

set tags+=/usr/local/share/ctags/qt4

23

উপরের সমস্ত এবং ...

কোড_পম্পূর্ণ: ফাংশন প্যারামিটার সম্পূর্ণ, কোড স্নিপেটস এবং আরও অনেক কিছু।

ট্যাগলিস্ট.ভিম: উত্স কোড ব্রাউজার (সি / সি ++, জাভা, পারল, পাইথন, টিসিএল, এসকিএল, পিএইচপি, ইত্যাদি সমর্থন করে)


5
আমি মনে করি যে ট্যাগলিস্ট যুক্ত করা ভাল হবে vvim সর্বাধিক ডাউনলোড ভিএম প্লাগইন।
amit

16

আমি ট্যাগ স্ট্যাক থেকে / পপ / পুশ করতে ALT- বাম এবং ALT- রাইট ব্যবহার করি।

" Alt-right/left to navigate forward/backward in the tags stack
map <M-Left> <C-T>
map <M-Right> <C-]>

আপনি ব্যবহার করেন তাহলে hjklআন্দোলন করার জন্য আপনাকে ম্যাপ করতে পারেন <M-h>এবং <M-l>পরিবর্তে।


ctrl -] এবং ctrl-t এর মতো নয় - আমার ধারণা, আপনার পরামর্শটি কিছুটা পরিষ্কার।

@ সাশা, ক্ষমা? আপনি কি বলছেন তা জানেন না। = এক্স লক্ষণীয়, এটি এতে কাজ করে: সহায়তাও।
স্টারগার

2
আমি মনে করি এটি ডিফল্টের চেয়ে স্বজ্ঞাত এবং পরিষ্কার er
আয়মান

1
@ আয়মান তবে তীর কী বনাম hjkl ব্যবহার করার মতো হোমরো থেকে হাত সরিয়ে না রাখার নীতিটি লঙ্ঘন করেছে।
ট্যাঙ্কোরস্যামশ

@ ট্যাঙ্কোরস্যামশ, কী নীতি?
স্টারগার

10

একই নামের বেশ কয়েকটি সংজ্ঞা

<C-w>g<C-]>একটি বিভাজনে সংজ্ঞাটি খুলুন, তবে এমনটিও করুন :tjumpযা হয় সংজ্ঞাতে চলে যায় বা, যদি বেশ কয়েকটি সংজ্ঞা থাকে তবে আপনাকে বেছে নিতে সংজ্ঞাগুলির একটি তালিকা উপস্থাপন করে।


2
প্রথম কমান্ডের মতোই, ভিমের একটি :ptagকমান্ড রয়েছে যা একটি পূর্বরূপ উইন্ডোতে সংজ্ঞাটি খুলবে।
ইডব্রাই

1
পূর্বরূপ উইন্ডোটি দুর্দান্ত কারণ আপনি এটিকে বন্ধ করতে পারবেন: অন্য কারও উইন্ডো থেকে পিসি না করে প্রথমে কার্সারটিকে প্রাকদর্শন উইন্ডোতে না নিয়েই।
হাইক্কি ন্যাসকি

পিটিএগের সাথে একটি ঝরঝরে অটোম্যাকড ট্রিক রয়েছে :h CursorHold-exampleযা কনফিগারযোগ্য সময়সীমার পরে পূর্বরূপ উইন্ডোতে কার্সারের নীচে আইটেমটির জন্য ট্যাগ প্রদর্শন করে।
ড্যাশ-টম-ব্যাং

+1 এর জন্য: tjump আমি এখন আবদ্ধ: tjump <Cr><Cw> <CR> <সি -]> থেকে আরও ভাল কাজ করে imho এই আচরণটি একত্রিত করতে পছন্দ করবেন: পিটিএজি
আন্ড্রেস ফ্লাইসবার্গ

:helpকখনও কখনও দুর্দান্ত হয় ... দেখুন :help CTRL-W_g}এবং:ptjump
আন্দ্রেস ফ্লাইসবার্গ

8

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


16
সিটি-] স্ট্যাকের এক স্তর পিছনে ফিরে যায়, যখন কো একটি আন্দোলনের পরে পূর্ববর্তী কার্সার অবস্থানে ফিরে যায়। সুতরাং আপনি যদি কোনও ফাংশনে সি-] থাকেন তবে পৃষ্ঠাগুলি ডাউন করুন, সিটি তত্ক্ষণাত্ ফিরে যাবে এবং কো ফাংশনের শুরুতে ফিরে যাবে , তারপরে কলটিতে ফিরে যাবে।
গ্রেগ হিউগিল

6

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

আমি এটি বেশিরভাগ পাইথন বিকাশের জন্য ব্যবহার করি তবে এটি কেবল সি / সি ++ এর জন্য আরও ভাল হতে পারে।


5

আমি একটি পরীক্ষামূলক প্লাগইনে ট্যাগ ম্যানিপুলেশনকে এমপ্যাপুলেটেড করেছি

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


5

আমি যথেষ্ট বড় সি ++ প্রকল্প সমর্থন করতে দুই বছর ধরে আমার ভিআইএম প্লাগইনগুলির সাথে খাপ খাইচ্ছি। আপনি এগুলি একবার দেখে নিতে পারেন।

তারা ctags এবং cscsope ব্যবহার করুন।

http://www.vim.org/scriptts/script.php?script_id=1638
http://www.vim.org/scriptts/script.php?script_id=2507


4

আমি আমার .gvimrc ফাইলটিতে নিম্নলিখিতটি রেখেছি, যা যখন gvim শুরু হয় তখন কোনও ট্যাগ ফাইলের জন্য যে কোনও বিন্দু থেকে গাছটি অনুসন্ধান করে:

function SetTags()
    let curdir = getcwd()

    while !filereadable("tags") && getcwd() != "/"
        cd ..
    endwhile

    if filereadable("tags")
        execute "set tags=" . getcwd() . "/tags"
    endif

    execute "cd " . curdir
endfunction

call SetTags()

আমি পরে পর্যায়ক্রমে আমার উত্স গাছের শীর্ষে একটি ট্যাগ ফাইল পুনরায় জেনারেট করি যা দেখতে এমন স্ক্রিপ্ট সহ:

#!/bin/bash

find . -regex ".*\.\(c\|h\|hpp\|cc\|cpp\)" -print | ctags --totals --recurse --extra="+qf" --fields="+i" -L -

7
আপনি কেবল wardর্ধ্বমুখী অনুসন্ধানটি পুনরায় উদ্ভাবন করেছেন। দেখুন: এইচ ফাইল অনুসন্ধান। আরও দেখুন stackoverflow.com/questions/563616/vimctags-tips-and-tricks/...
gotgenes

2

আমি ম্যাকোসে ভিএম ব্যবহার করি এবং মূল সিটি্যাগগুলি ভাল কাজ করে না, তাই আমি নতুন ডাউনলোড করি এবং মেক মেকটি কনফিগার করে। আমি / ইউএসআর / লোকাল / বিন / সিটি্যাগগুলিতে সিটিগস ইনস্টল করি (মূলটি রাখার জন্য)

"taglist
let Tlist_Ctags_Cmd = "/usr/local/bin/ctags"
let Tlist_WinWidth = 50
map <leader>ta :TlistToggle<cr>
map <leader>bta :!/usr/local/bin/ctags -R .<CR>
set tags=tags;/
map <M-j> <C-]>
map <M-k> <C-T>

1

আমি উপরের সেটট্যাগগুলি () অনুসন্ধান ফাংশনটি (যা সমপরিমাণ দ্বারা প্রতিস্থাপন করা উচিত) সিস্কোপের set tags+=./tags;/জন্য কাজ করার জন্য রূপান্তর করেছিলাম । মনে হচ্ছে কাজ!

"cscope file-searching alternative
function SetCscope()
    let curdir = getcwd()

    while !filereadable("cscope.out") && getcwd() != "/"
            cd ..
                endwhile

    if filereadable("cscope.out")
            execute "cs add " . getcwd() . "/cscope.out"
                endif

    execute "cd " . curdir
    endfunction

call SetCscope()

3
গোগেনেস যেমন বলেছিল, আপনি কেবল wardর্ধ্বমুখী অনুসন্ধানটি পুনরায় উদ্ভাবন করেছেন। দেখুন: এইচ ফাইল অনুসন্ধান। প্রাসঙ্গিক উদাহরণের জন্য এই প্লাগইনটি দেখুন ।
idbrii

1

উপরের সেটস্কোপ () ফাংশনে আরেকটি পুনরাবৃত্তি। এটি "সিস্কোপ.আউট" যেখানে আছে সেখানে দির না থাকায় ম্যাচগুলি পেতে সিস্কোপ প্রাক-পথ নির্ধারণ করে:

function s:FindFile(file)
    let curdir = getcwd()
    let found = curdir
    while !filereadable(a:file) && found != "/"
        cd ..
        let found = getcwd()
    endwhile
    execute "cd " . curdir
    return found
endfunction

if has('cscope')    
    let $CSCOPE_DIR=s:FindFile("cscope.out")
    let $CSCOPE_DB=$CSCOPE_DIR."/cscope.out"
    if filereadable($CSCOPE_DB)
        cscope add $CSCOPE_DB $CSCOPE_DIR
    endif

    command -nargs=0 Cscope !cscope -ub -R &
endif

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