vim - विम में कई फाइलों के साथ प्रभावी रूप से कैसे काम करें?




(18)

मैंने पर्ल स्क्रिप्ट विकसित करने के लिए विम का उपयोग करना शुरू कर दिया है और इसे बहुत शक्तिशाली ढूंढना शुरू कर रहा हूं।

मुझे पसंद है कि एक चीज एक साथ कई फाइलें खोलने में सक्षम होना है जैसे vi main.pl maintenance.pl और फिर उनके बीच हॉप:

:n
:prev

और देखें कि कौन सी फाइल खुली है

:args

और एक फाइल जोड़ने के लिए, मैं कह सकता हूं:

:n test.pl

जो मुझे उम्मीद है कि फ़ाइलों की मेरी सूची में जोड़ा जाएगा, लेकिन इसके बजाय यह मेरी वर्तमान फ़ाइल सूची को मिटा देता है और जब मैं टाइप करता हूं :args test.pl कि मेरे पास test.pl खुला है।

तो मैं अपनी तर्क सूची में फ़ाइलों को कैसे जोड़ और हटा सकता हूं?


लिस्टिंग

वर्तमान बफर की एक सूची देखने के लिए, मैं उपयोग करता हूं:

:ls

प्रारंभिक

एक नई फाइल खोलने के लिए, मैं उपयोग करता हूं

:e ../myFile.pl

उन्नत टैब पूर्ण होने के साथ (अपने .vimrc में set wildmenu करें)।

नोट: आप इसका भी उपयोग कर सकते हैं :find जो आपके लिए पथों का एक सेट खोजेगा, लेकिन आपको पहले उन पथों को कस्टमाइज़ करना होगा।

स्विचिंग

सभी खुली फ़ाइलों के बीच स्विच करने के लिए, मैं उपयोग करता हूं

:b myfile

बढ़ाया टैब पूरा करने के साथ (अभी भी set wildmenu )।

नोट:: :b# पिछली देखी गई फ़ाइल चुनता है, ताकि आप इसे दो फाइलों के बीच त्वरित रूप से स्विच करने के लिए उपयोग कर सकें।

खिड़कियों का उपयोग करना

क्षैतिज और लंबवत वर्तमान विंडो को विभाजित करने के लिए Ctrl-W s और Ctrl-W v । आप इसका भी उपयोग कर सकते हैं :split और :vertical split ( :sp और :vs )

खुली खिड़कियों के माध्यम से नेविगेट करने के लिए ओपन विंडोज़, और Ctrl-W h (या j या k या l ) के बीच स्विच करने के लिए Ctrl-W w

वर्तमान विंडो को बंद करने के लिए सभी विंडो को बंद करने के लिए वर्तमान विंडो को बंद करने के लिए Ctrl-W c और Ctrl-W o

एक -o या -O ध्वज के साथ शुरू करना प्रत्येक फ़ाइल को अपने विभाजन में खुलता है।

इन सभी के साथ मुझे विम में टैब की आवश्यकता नहीं है, और मेरी उंगलियों को मेरी आंखों पर नहीं, मेरे बफर मिलते हैं।

नोट: यदि आप सभी फ़ाइलों को विम के एक ही उदाहरण पर जाना चाहते हैं, तो - --remote-silent विकल्प के साथ विम शुरू करें।


आप विम वैश्विक अंक का उपयोग करना चाह सकते हैं।

इस तरह आप फाइलों के बीच तेजी से उछाल सकते हैं, और यहां तक ​​कि फ़ाइल में चिह्नित स्थान तक भी। साथ ही, मुख्य आदेश कम होते हैं: 'C मुझे उस कोड पर ले जाता है जिसके साथ मैं काम कर रहा हूं, 'T मुझे यूनिट टेस्ट में ले जाता है जिसके साथ मैं काम कर रहा हूं।

जब आप स्थान बदलते हैं, तो अंकों को रीसेट करना भी तेज़ होता है: mC नए कोड स्पॉट को चिह्नित करता है, mT नए टेस्ट स्पॉट को चिह्नित करता है।


इस धागे में अधिकांश उत्तर सादे विम कमांड का उपयोग कर रहे हैं जो कि बिल्कुल ठीक है, लेकिन मैंने सोचा कि मैं प्लगइन और कार्यों के संयोजन का उपयोग करके एक व्यापक उत्तर प्रदान करूंगा जो मुझे विशेष रूप से उपयोगी लगता है (कम से कम इनमें से कुछ सुझाव गैरी बर्नार्ड की फाइल से आए हैं नेविगेशन युक्तियाँ ):

  1. अंतिम दो फ़ाइल के बीच टॉगल करने के लिए बस <leader> दो बार दबाएं। मैं स्पेसबार में <leader> असाइन करने की अनुशंसा करता हूं:

    nnoremap <leader><leader> <c-^>
    
  2. एक परियोजना के चारों ओर जल्दी से चलने के लिए उत्तर एक अस्पष्ट मिलान समाधान जैसे CtrlP । मैं त्वरित पहुँच के लिए इसे <leader>a बांधता हूं।

  3. इस मामले में मैं वर्तमान में खुले बफर का दृश्य प्रस्तुतिकरण देखना चाहता हूं, मैं BufExplorer प्लगइन का उपयोग करता हूं । सामान्य लेकिन प्रभावी।

  4. अगर मैं फाइल सिस्टम के चारों ओर ब्राउज़ करना चाहता हूं तो मैं कमांड लाइन या बाहरी उपयोगिता (क्विकल्सिलवर, अफ्रेड इत्यादि) का उपयोग करूंगा लेकिन वर्तमान परियोजना संरचना को देखने के लिए एनईआरडी ट्री एक क्लासिक है। हालांकि इसका उपयोग मुख्य फ़ाइल खोज विधि के रूप में 2 के स्थान पर नहीं करें। यह वास्तव में आपको धीमा कर देगा। मैं बाइंडिंग <leader>ff उपयोग करता हूं।

ये फ़ाइलों को खोजने और खोलने के लिए पर्याप्त होना चाहिए। निश्चित रूप से क्षैतिज और लंबवत विभाजन का उपयोग करें। विभाजन के बारे में मुझे ये कार्य विशेष रूप से उपयोगी लगता है:

  1. छोटे कमरे में नए विभाजन खोलें जब पर्याप्त जगह न हो और नेविगेशन पर उनका विस्तार करें। टिप्पणियों के लिए यहां देखें कि ये वास्तव में क्या करते हैं:

    set winwidth=84
    set winheight=5
    set winminheight=5
    set winheight=999
    
    nnoremap <C-w>v :111vs<CR>
    nnoremap <C-w>s :rightbelow split<CR>
    set splitright
    
  2. विभाजित से आसानी से विभाजित करने के लिए ले जाएँ:

    nnoremap <C-J> <C-W><C-J>
    nnoremap <C-K> <C-W><C-K>
    nnoremap <C-L> <C-W><C-L>
    nnoremap <C-H> <C-W><C-H>
    

इस धागे में कुछ जवाब टैब का उपयोग करने का सुझाव देते हैं और अन्य एक ही चीज़ को पूरा करने के लिए बफर का उपयोग करने का सुझाव देते हैं। टैब और बफर अलग हैं। मैं दृढ़ता से सुझाव देता हूं कि आप इस लेख को विम टैब पागलपन पढ़ें - बफर बनाम टैब

लेख से खींचा गया एक अच्छा सारांश यहां दिया गया है:

सारांश:

  • एक बफर फ़ाइल के इन-मेमोरी टेक्स्ट है।
  • एक खिड़की एक बफर पर एक व्यूपोर्ट है।
  • एक टैब पेज विंडोज़ का संग्रह है।

कई फ़ाइलों के साथ प्रभावी ढंग से काम करने का मेरा तरीका टीएमयूक्स का उपयोग करना है।

यह आपको लंबवत और क्षैतिज खिड़कियों को विभाजित करने की अनुमति देता है, जैसा कि:

मैंने अपने मैक और लिनक्स मशीनों पर इस तरह से काम किया है और मुझे यह उपलब्ध है कि मैक पर उपलब्ध देशी विंडो फलक स्विचिंग तंत्र से बेहतर है। मुझे स्विचिंग आसान लगता है और केवल tmux के साथ मैं अपने मैक पर काम कर रहे एक ही वर्तमान निर्देशिका में 'नया पृष्ठ' प्राप्त करने में सक्षम हूं (इस तथ्य के बावजूद कि एक ही निर्देशिका में नए पैन खोलने के विकल्प हैं) एक आश्चर्यजनक रूप से महत्वपूर्ण टुकड़ा। वर्तमान स्थान पर एक त्वरित नया फलक आश्चर्यजनक रूप से उपयोगी है। एक विधि जो ओएस के लिए एक ही कुंजी combos के साथ नए पैनल करता है मेरे लिए महत्वपूर्ण है और भविष्य के व्यक्तिगत संगतता के लिए सभी के लिए एक बोनस है। एकाधिक tmux पैन के अलावा, मैंने कई टैब का उपयोग करने का भी प्रयास किया है, उदाहरण के लिए और कई नई खिड़कियां, उदाहरण के लिए और अंत में मैंने पाया है कि एकाधिक tmux पैन मेरे लिए सबसे उपयोगी हैं। मैं बहुत 'दृश्य' हूं और मेरे सामने अपने विभिन्न संदर्भों को सीधे रखना चाहता हूं, जो पैन के रूप में एक साथ जुड़े हुए हैं।

tmux क्षैतिज और ऊर्ध्वाधर पैन का भी समर्थन करता है जो पुरानी screen नहीं थी (हालांकि मैक का iterm2 इसका समर्थन करता है, लेकिन फिर से, वर्तमान निर्देशिका सेटिंग मेरे लिए काम नहीं करती है)। टीएमयूक्स 1.8


चीजें जैसे :e और :badd केवल एक तर्क स्वीकार करेगा, इसलिए निम्नलिखित विफल हो जाएगा

:e foo.txt bar.txt
:e /foo/bar/*.txt
:badd /foo/bar/*

यदि आप विम के भीतर से कई फाइलें जोड़ना चाहते हैं, तो arga[dd] उपयोग करें

:arga foo.txt bar.txt
:arga /foo/bar/*.txt
:argadd /foo/bar/*

टैब का उपयोग क्यों न करें (विम 7 में पेश किया गया)? आप टैब के बीच स्विच कर सकते हैं :tabn और :tabp , साथ :tabe <filepath> आप एक नया टैब जोड़ सकते हैं; और नियमित रूप से :q या :wq आप एक टैब बंद करते हैं। यदि आप मानचित्र करते हैं :tabn और :tabp अपने F7 / F8 कुंजी पर :tabp करें, तो आप फ़ाइलों के बीच आसानी से स्विच कर सकते हैं।

अगर ऐसी कई फाइलें नहीं हैं या आपके पास विम 7 नहीं है तो आप अपनी स्क्रीन को कई फाइलों में विभाजित भी कर सकते हैं :sp <filepath> । फिर आप Ctrl + W के साथ स्प्लिटस्क्रीन के बीच स्विच कर सकते हैं और फिर उस दिशा में एक तीर कुंजी जिसे आप स्थानांतरित करना चाहते हैं (या तीर कुंजियों के बजाय, डब्ल्यू के लिए डब्ल्यू और पिछले स्प्लिटस्क्रीन के लिए डब्ल्यू )


मुझे लगता है कि आप खुले फ़ाइलों की सूची को देखने के लिए गलत कमांड का उपयोग कर रहे हैं।

ऐसा करने का प्रयास करें :ls आपके द्वारा खोले गए फ़ाइलों की सूची देखने के लिए :ls और आप देखेंगे:

   1 %a   "./checkin.pl"            line 1
  2 #    "./grabakamailogs.pl"     line 1
  3      "./grabwmlogs.pl"         line 0
  etc.

फिर आप सूचीबद्ध संख्याओं के आधार पर फ़ाइलों के माध्यम से फ़ाइलों के माध्यम से उछाल सकते हैं, उदाहरण के लिए: 3 बी

या आप नंबर दर्ज करके अपनी स्क्रीन को विभाजित कर सकते हैं लेकिन बस बी के बजाय एसबी का उपयोग कर सकते हैं।

एक तरफ% वर्तमान में दिखाई देने वाली फ़ाइल को संदर्भित करता है और # वैकल्पिक फ़ाइल को संदर्भित करता है।

आप Ctrl Shift 6 दबाकर इन दो फ़ाइलों के बीच आसानी से टॉगल कर सकते हैं

संपादित करें: जैसे :ls आप इसका उपयोग कर सकते हैं :reg 0-9 रजिस्टरों सहित आपके रजिस्टरों की वर्तमान सामग्री को देखने के लिए :reg जिसमें आपने हटा दिया है। यह विशेष रूप से उपयोगी होता है यदि आप पहले से हटाए गए कुछ पाठ का पुन: उपयोग करना चाहते हैं।


मैं कमांड लाइन का उपयोग करता हूं और बहुत गिट करता हूं, इसलिए मेरे पास मेरे bashrc में यह उपनाम है:

alias gvim="gvim --servername \$(git rev-parse --show-toplevel || echo 'default') --remote-tab"

यह प्रत्येक नई फ़ाइल को मौजूदा विंडो पर एक नए टैब में खुल जाएगा और प्रत्येक गिट भंडार के लिए एक विंडो बनाएगा। तो यदि आप रेपो ए से दो फाइलें खोलते हैं, और रेपो बी से 3 फाइलें खोलते हैं, तो आप दो विंडोज़ के साथ समाप्त हो जाएंगे, एक रेपो ए के लिए दो टैब के साथ और तीन टैब के साथ रेपो बी के लिए एक।

अगर आप जो फ़ाइल खोल रहे हैं वह गिट रेपो में निहित नहीं है तो यह एक डिफ़ॉल्ट विंडो पर जाएगी।

टैब के बीच कूदने के लिए मैं इन मैपिंग का उपयोग करता हूं:

nmap <C-p> :tabprevious<CR>
nmap <C-n> :tabnext<CR>

एक साथ कई फाइलें खोलने के लिए आपको इसे अन्य समाधानों में से एक के साथ जोड़ना चाहिए।


मैं जीवीआईएम और कमांड लाइन विम के लिए एक ही .vimrc फ़ाइल का उपयोग करता हूं। मैं कमांड लाइन विम में जीवीआईएम और बफर में टैब का उपयोग करता हूं, इसलिए मेरे पास दोनों .vimrc दोनों के साथ काम करने के लिए आसान है:

" Movement between tabs OR buffers
nnoremap L :call MyNext()<CR>
nnoremap H :call MyPrev()<CR>

" MyNext() and MyPrev(): Movement between tabs OR buffers
function! MyNext()
    if exists( '*tabpagenr' ) && tabpagenr('$') != 1
        " Tab support && tabs open
        normal gt
    else
        " No tab support, or no tabs open
        execute ":bnext"
    endif
endfunction
function! MyPrev()
    if exists( '*tabpagenr' ) && tabpagenr('$') != '1'
        " Tab support && tabs open
        normal gT
    else
        " No tab support, or no tabs open
        execute ":bprev"
    endif
endfunction

यह एच और एल के लिए मौजूदा मैपिंग है, लेकिन यह फाइलों के बीच बहुत तेज़ और आसान स्विचिंग करता है। अगले के लिए बस "एच" दबाएं और पिछले के लिए "एल" दबाएं; चाहे आप टैब या बफर का उपयोग कर रहे हों, आपको इच्छित परिणाम मिलेंगे।


मैं बफर कमांड का उपयोग करता हूं - :bn (अगला बफर) :bp (पिछला बफर) :buffers (सूची खुले बफर) :b<n> (खुला बफर एन) :bd (बफर हटाएं)। :e <filename> बस एक नए बफर में खुल जाएगा।


मैंने वर्कफ़्लो दिखाते हुए एक बहुत ही सरल वीडियो बनाया है जिसका मैं उपयोग करता हूं। असल में मैं Ctrl-P Vim प्लगइन का उपयोग करता हूं, और मैंने एंटर कुंजी पर बफर नेविगेशन मैप किया।

इस तरह से मैं सामान्य मोड में एंटर दबा सकता हूं, खुली फ़ाइलों की सूची (जो स्क्रीन के नीचे एक छोटी नई विंडो में दिखाई देता है) देखें, उस फ़ाइल का चयन करें जिसे मैं संपादित करना चाहता हूं और फिर एंटर दबाएं। कई खुली फ़ाइलों के माध्यम से जल्दी से खोजने के लिए, बस फ़ाइल नाम का हिस्सा टाइप करें, फ़ाइल का चयन करें और एंटर दबाएं।

मेरे पास वीडियो में कई फाइलें नहीं खुलती हैं, लेकिन जब आप उनमें से बहुत कुछ शुरू करते हैं तो यह अविश्वसनीय रूप से सहायक हो जाता है।

चूंकि प्लगइन एक एमआरयू ऑर्डरिंग का उपयोग कर बफर को टाइप करता है, इसलिए आप केवल दो बार एंटर दबा सकते हैं और सबसे हालिया फाइल पर जा सकते हैं जिसे आप संपादित कर रहे थे।

प्लगइन स्थापित होने के बाद, आपको केवल एक ही कॉन्फ़िगरेशन की आवश्यकता है:

nmap <CR> :CtrlPBuffer<CR>

बेशक आप इसे एक अलग कुंजी पर मैप कर सकते हैं, लेकिन मुझे मैपिंग बहुत आसान होने के लिए मिलती है।


यदि आप एकाधिक बफर का उपयोग करने जा रहे हैं, तो मुझे लगता है कि सबसे महत्वपूर्ण बात छिपी हुई है ताकि यह आपको बफर स्विच कर दे, भले ही आपके द्वारा छोड़े गए किसी भी में सहेजे गए परिवर्तन न हों।


यदि आप ओएसएक्स पर हैं और अपने टैब पर क्लिक करने में सक्षम होना चाहते हैं, तो माउस टर्म और सिमबीएल ( here से लिया गया) का उपयोग करें। इसके अलावा, इस संबंधित चर्चा की जांच करें।


विम (लेकिन मूल वीआई नहीं!) में टैब हैं जो मुझे (कई संदर्भों में) बफर से बेहतर पाते हैं। आप कह सकते हैं :tabe [filename] एक नए टैब में एक फ़ाइल खोलने के लिए। टैब के बीच या कुंजी संयोजनों [ gt ] gt और gt पर क्लिक करके टैब के बीच साइकलिंग किया जाता है। ग्राफिकल विम में भी ग्राफिकल टैब हैं।


विम में एकाधिक फ़ाइलों का उपयोग करते समय, मैं इन आदेशों का अधिकतर उपयोग करता हूं (~ 350 फाइलें खुली हैं):

  • :b <partial filename><tab> (एक बफर पर कूदें)
  • :bw (बफर मिटाएं, बफर हटाएं)
  • :e <file path> (संपादित करें, एक नया बफर खोलें>
  • pltags - pltags / विधि परिभाषाओं को कूदने में सक्षम करें

args सूची में जोड़ने के लिए:

:argadd

args सूची से हटाने के लिए:

:argdelete

आपके उदाहरण में, आप args सूची में test.pl जोड़ने और एक चरण में फ़ाइल को संपादित करने के लिए :argedit test.pl का उपयोग कर सकते हैं।

:help args अधिक विस्तार और उन्नत उपयोग देता है


:ls

खुले बफर की सूची के लिए

  • :bp पिछले बफर
  • :bn अगले बफर
  • :bn ( n संख्या) n'th बफर पर ले जाएँ
  • :b <filename-part> टैब-कुंजी के साथ स्वत: पूर्णता प्रदान करना (भयानक !!)

विम के कुछ संस्करणों में, bn और bp वास्तव में क्रमशः bnext और bprevious हैं। इस मामले में टैब ऑटो-पूर्ण सहायक है।

या जब आप सामान्य मोड में होते हैं, तो उस अंतिम फ़ाइल पर स्विच करने के लिए ^ का उपयोग करें जिस पर आप काम कर रहे थे।

इसके अलावा, आप विम के सत्रों को बचा सकते हैं

:mksession! ~/today.ses

उपरोक्त आदेश वर्तमान खुले फ़ाइल बफर और सेटिंग्स को ~/today.ses । आप उस सत्र को उपयोग करके लोड कर सकते हैं

vim -S ~/today.ses

कल आपको छोड़ने पर कोई परेशानी नहीं है। ;)





vi