कैसे प्रभावी रूप से विम में कई फ़ाइलों के साथ काम करने के लिए


1098

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

एक चीज जो मुझे पसंद है वह है एक साथ कई फाइलें खोलने में सक्षम होना:

vi main.pl maintenance.pl

और फिर उन दोनों के बीच हॉप:

:n
:prev

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

:args

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

:n test.pl

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

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


5
tmux ... प्रत्येक फलक में विम का उपयोग करें
टॉमी

4
@ टॉमी: इस तरह से आप फ़ाइलों (विम्स बफ़र) को इनबेटीन में याँक्ड / डिलीट किए गए कंटेंट को पेस्ट नहीं कर सकते। यदि केवल उपलब्ध क्लिपबोर्ड मदद कर सकता है (स्वीकृत उत्तर देखें: stackoverflow.com/questions/5532878/… )
क्रिस्टोफ़्स

1
:Nपिछली फाइल पर जाने का एक आसान तरीका लगता है ...
Gert van den Berg

vimcasts.org/categories/the-argument-list ? विम सीखते समय VimCasts वास्तव में अत्यधिक अनुशंसित हैं।
छल

जवाबों:


1171

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

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


72
टैब को सहेजने और बंद करने के लिए, आप ZZइसके बजाय उपयोग भी कर सकते हैं :wq(जैसे सामान्य रूप से सहेजना और बंद करना)
Andreas Grech

40
मैं Ubuntu 10.10 में vim-gnome पैकेज का उपयोग कर रहा हूं, और मैं Ctrl + PageUp और Ctrl + PageDown का उपयोग करके टैब के बीच स्विच कर सकता हूं। मुझे कुछ भी कॉन्फ़िगर करने की आवश्यकता नहीं थी; यह डिफ़ॉल्ट था।
जॉय एडम्स

268
इसके अलावा, संपादन मोड gtमें अगले टैब पर gTजाता है , और पिछले टैब पर जाता है।
डीन

40
आप एनजीटी का उपयोग करके किसी भी टैब पर जा सकते हैं, जहां n टैब का इंडेक्स है (शुरुआत एक के साथ)। मुझे लगता है कि एक विकल्प है जो फ़ाइल नाम के पास प्रत्येक टैब का सूचकांक प्रदर्शित करता है, लेकिन मुझे नहीं पता कि यह क्या है। अगर किसी को पता है, तो मुझे यह सुनना अच्छा लगेगा।
शून्य-सूचक

81
ध्यान दें कि आप -pकमांड लाइन से टैब में कई फाइलों को खोलने के लिए ध्वज का उपयोग कर सकते हैं । उदाहरण के लिए, gvim -p main.pl maintenance.plइन दो फ़ाइलों को टैब में खोलेंगे।
मैथ्यू स्ट्रॉब्रिज

554

लिस्टिंग

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

:ls

प्रारंभिक

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

:e ../myFile.pl

बढ़ाया टैब पूरा होने के साथ (अपने set wildmenuमें डाल .vimrc)।

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


स्विचिंग

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

:b myfile

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

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


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

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

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

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

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


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

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


4
यदि आप कई बफ़र्स के साथ खेल रहे हैं, तो मैं LustyJuggler की सिफारिश करूंगा
अरुण एम

1
कई फ़ाइलों के साथ काम करते समय सबसे अधिक बार उपयोग किए जाने वाले विम आदेशों के लिए एक बहुत अच्छा त्वरित-संदर्भ बनाने के लिए धन्यवाद।
क्वांटिकल

9
:bएक बहुत ही शक्तिशाली कमांड है क्योंकि यह बफर नंबर और बफर नाम दोनों को तर्क के रूप में स्वीकार कर सकता है। और क्या? यह फ़ाइल नाम के किसी भी भाग पर टैब-पूर्णता का भी समर्थन करता है। कहो, आप बफर 2 में खुला foo.txt है, तो आप टाइप कर सकते हैं :b 2<Enter>या :b foo.txtया :b oo<Tab><Enter>संपादित करने के लिए है कि फाइल। हां, जब आप <Tab> दबाते हैं, तो अंतिम 'oo' को 'foo.txt' पूरा कर देगा।
सुषम पाल

21
मेरे पास यह लाइन मेरे .vimrc: में है nnoremap gb :ls<cr>:b<space>। जब मैं gbकमांड मोड में टाइप करता हूं, तो यह मेरे खुले बफ़र्स और प्रकारों को सूचीबद्ध करता है :b , जो मेरे लिए एक बफर नाम / संख्या लिखना शुरू करने के लिए तैयार हैं।
nkorth

5
यह भी उल्लेखनीय है कि :bजब तक यह असंदिग्ध है एक विकल्प मैच को स्वीकार करेगा। तो अगर आप खुली फ़ाइलों है foo, barहै, और baz, बस :b zपर स्विच करने के लिए पर्याप्त है bazबफर, और :b ooया :b oके लिए ले जाएगा fooबफर।
सोरेन ब्योर्नस्टैड

233
:ls

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

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

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

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

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

:mksession! ~/today.ses

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

vim -S ~/today.ses

कोई परेशानी याद नहीं है कि आप कल कहाँ गए थे। ;)


एक विशिष्ट बफर पर जाएं: एन सीटीआरएल- ^
टॉम यांग

8
@ श्याम मुझे लगता है कि मैं तुमसे प्यार करता हूँ! किसी तरह मैं mksession कमांड के बारे में सुनिश्चित करने के लिए कभी नहीं जानता था, लेकिन आज नीले रंग से बाहर मैंने फैसला किया कि उन्हें आसानी से खोलने के लिए फ़ाइलों की एक सूची को बचाने के लिए कुछ तरीका होना चाहिए। यह और भी बेहतर है क्योंकि यह चीजों की पूरी स्थिति (विंडो विभाजन, बफर स्थान आदि) को संग्रहीत करने के लिए भी लगता है। तो धन्यवाद!
कासापो

इसके अलावा, "पिछली बार फ़ाइल में आप कहाँ थे, कूदने के लिए चिह्न का उपयोग करें।
क्रोमियम

113

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

:argadd

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

:argdelete

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

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


4
यह वास्तव में पूछे गए प्रश्न का उत्तर है, हालांकि शीर्षक को दिए गए अन्य उत्तर पूरी तरह से उचित हैं।
सोरेन ब्योर्नस्टैड

48

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


18
: ls इससे अधिक: बफ़र्स
aehlke

42

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

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

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

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

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

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

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

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


2
% और # जैसी संबंधित सूचनाओं को एक साथ देखकर अच्छा लगा। +1
आशीष

35

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


1
धन्यवाद, बहुत अच्छा लगता है, लेकिन हम दुर्भाग्य से केवल वीआईएम 6.1 सर्वर पर स्थापित है।
एडवर्ड तुंगाय सेप

1
टैब वाइल्डकार्ड के साथ बहुत उपयोगी हैं vim -p dir/*:। अधिकतम टैब का आकार 10 है, लेकिन आप इसे किसी अन्य मान पर ~/.vimrcसेट tabpagemaxकरने में बदल सकते हैं ।
कैम्पा

27

यहाँ कई जवाब! पहिया को फिर से मजबूत किए बिना मैं क्या उपयोग करता हूं - सबसे प्रसिद्ध प्लगइन्स (जो जल्द ही किसी भी समय मरने वाले नहीं हैं और कई लोगों द्वारा उपयोग किए जाते हैं) अल्ट्रा फास्ट और गीकी होने के लिए।

  • ctrlpvim / ctrlp.vim - नाम से फ़ाइल खोजने के लिए उसके स्थान या उसके नाम से फ़ज़ी सर्च करें
  • jlanzarotta / bufexplorer - खोले गए बफ़र्स को ब्राउज़ करने के लिए (जब आपको याद नहीं है कि आपने कितनी फाइलें खोली और हाल ही में संशोधित की हैं और आपको याद नहीं है कि वे कहाँ हैं, शायद इसलिए क्योंकि आपने उनके साथ एजी की खोज की थी)
  • gitignore के संबंध में फाइलों को खोजने के लिए rking / ag.vim
  • scrooloose / nerdtree निर्देशिका संरचना को देखने के लिए, फ़ाइलों को देखने, हटाने / संशोधित / संशोधित करने के लिए

संपादित करें: हाल ही में मैं प्रासंगिक दृश्य (जैसे उदात्त खोज) के साथ खोज करने के लिए dyng / ctrlsf.vim का उपयोग कर रहा हूं और मैंने इंजन को एजी से रिपग्रेप पर स्विच किया । प्रदर्शन उत्कृष्ट है।

EDIT2: CtrlSF के साथ आप mg979 / vim-visual-multi का उपयोग कर सकते हैं , एक साथ कई फ़ाइलों में परिवर्तन कर सकते हैं और फिर अंत में उन्हें एक बार में सहेज सकते हैं।


2
ctrlp स्थानांतरित हो गया है, और अब ctrlpvim / ctrlp.vim
डेव

1
यह सही जवाब है! यह अधिक upvotes क्यों नहीं है?
थॉमस म्बियस

2
यह अधिक अपवित्र नहीं है क्योंकि प्रश्न 2008 में पूछा गया था। :)
burnettk

बिल्कुल सही। मैं उन plugins के बिना एक देव सेटिंग में कल्पना नहीं कर सकते।
एडगर अल्लोरो

25

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

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

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

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

21

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

यहाँ एक अच्छा सारांश है जो मैंने लेख से लिया है:

सारांश:

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

2
आप उस सारांश :help windowको Vim
icc97

19

Vim में कई फ़ाइलों का उपयोग करते समय, मैं इन कमांड्स का उपयोग ज्यादातर (~ 350 फाइलों के साथ खुला) करता हूं:

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

2
350 फाइलें !!! यह प्रभावशाली है। आपको सही बफर कैसे मिलेगा? क्या आप कभी विभाजन करते हैं?
ब्रायन ओ'डेल

3
@ BrianO'Dell :b <partial filename><tab>प्लस set wildmenuअपने में .vimrcअच्छी तरह से उसके खुलने का समय बफ़र्स की टन मिल गया है के लिए काम करता है। फिर आप बस आंशिक मिलान करते हैं और इसे ढूंढने वालों के माध्यम से स्क्रॉल करते हैं। अन्य सभ्य संपादकों में आप फजी खोज कर रहे हैं, लेकिन आम तौर पर आप उस फजी खोज को सिर्फ आपके द्वारा खोली गई फाइलों तक सीमित नहीं रख सकते।
icc97

17

एक और उत्तर जोड़ना क्योंकि यह उत्तर में से किसी के द्वारा कवर नहीं किया गया है

सभी बफ़र्स को tabदेखने के लिए परिवर्तित करने के लिए ।

 :tab sball

टैब को देखने के लिए सभी बफ़र्स खोलेंगे। फिर हम टैब से संबंधित किसी भी कमांड का उपयोग कर सकते हैं

gt or :tabn           "    go to next tab
gT or :tabp or :tabN  "    go to previous tab

पर विवरण :help tab-page-commands

हम टैब दृश्य, एकाधिक फ़ाइलों के रूप में खोलने के लिए विम का निर्देश दे सकते हैं vim -p file1 file2alias vim='vim -p'उपयोगी हो जाएगा।
ऑटोकॉमंड इन का पालन करके भी यही बात हासिल की जा सकती है~/.vimrc

 au VimEnter * if !&diff | tab all | tabfirst | endif

वैसे भी सवाल का जवाब देने के लिए: आर्ग सूची में जोड़ने के लिए: arga file ,

अर्ग सूची से हटाने के लिए: argd pattern

अतिरिक्त जानकारी का संपर्क :help arglist


16

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

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

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


12

मैं gvim और कमांड लाइन Vim के लिए समान .vimrc फ़ाइल का उपयोग करता हूं। मैं कमांड लाइन विम में gVim और बफ़र्स में टैब का उपयोग करने के लिए हूं, इसलिए मेरे पास अपना .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

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


1
मुझे ये मैपिंग पसंद हैं। Ctrl-H, Ctrl-L भी आज़माएं। मैं एक ही मैपिंग के साथ फ़ायरफ़ॉक्स और सूक्ति टर्मिनल सेटअप करता हूं। बहुत अच्छा लगातार टैब कुंजी शॉर्टकट है।
सेमीकंजेसी

4
मौजूदा mappings clobbering से बचने के लिए ctrl के बजाय अपने नेता की कुंजी का उपयोग करें
aehlke

10

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


9

अगर केवल vim बिल्ट-इन कमांड्स का उपयोग किया जाता है , तो सबसे अच्छा जो मैंने कभी कई बफ़र्स के बीच स्विच करने के लिए देखा है वह यह है:

nnoremap <Leader>f :set nomore<Bar>:ls<Bar>:set more<CR>:b<Space>

यह पूरी तरह से दोनों को जोड़ता है :lsऔर :bकमांड करता है - सभी खोले गए बफ़र्स को सूचीबद्ध करता है और बफर स्विच करने के लिए कमांड का इनपुट करने की प्रतीक्षा करता है।

एक बार टाइप करने पर vimrc में मैपिंग के ऊपर <Leader>f,

  • सभी खोले गए बफ़र प्रदर्शित किए गए हैं
  • आप ऐसा कर सकते हैं:
    • प्रकार 23बफर 23 में जाने के लिए करें,
    • प्रकार #वैकल्पिक / MRU बफर में जाने के लिए करें,
    • फ़ाइल का आंशिक नाम टाइप करें, फिर टाइप करें <Tab>, या<C-i> स्वतः पूर्ण करने के लिए,
    • या बस <CR>या <Esc>वर्तमान बफर पर रहने के लिए

उपरोक्त कुंजी मानचित्रण के लिए आउटपुट का एक स्नैपशॉट है:

:set nomore|:ls|:set more
  1  h    "script.py"    line 1
  2 #h  + "file1.txt"    line 6  -- '#' for alternative buffer
  3 %a    "README.md"    line 17 -- '%' for current buffer
  4       "file3.txt"    line 0  -- line 0 for hasn't switched to
  5     + "/etc/passwd"  line 42 -- '+' for modified
:b '<Cursor> here'

उपरोक्त स्नैपशॉट में:

  • दूसरा स्तंभ: %aवर्तमान के लिए, hछिपा हुआ,# पिछले के लिए, खाली के लिए स्विच नहीं किया गया है।
  • तीसरा कॉलम: +संशोधित के लिए।

इसके अलावा, मैं दृढ़ता से सुझाव देता हूं set hidden। देख लो :help 'hidden'


यह एक महान विचार है! मैं उपयोग कर रहा हूं :bऔर :lsबहुत कुछ लेकिन स्वतंत्र रूप से। मुझे लगता है कि यह कम उपयोगी हो जाता है जब आपको बफ़र्स के लायक एक पेज से अधिक मिला हो, लेकिन फिर भी आप बस वापस आ सकते हैं:b
icc97

खुशी है कि यह देखने में मदद करता है। चीयर्स! :)
क्यूटीज़ी

इस विम विकिया से , आप इसे थोड़ा नीचे कर सकते हैं nnoremap <leader>f :ls<cr>:b<space>, जो कि 'अधिक' कमांड के साथ मुद्दों को हिट कर सकता है
icc97

हां, यह तरीका पूरी तरह से काम करता है अगर कम फाइलें खुली होती हैं (सामान्य उपयोग का मामला)। set moreसामान केवल तभी फर्क करता है जब कई फाइलें खुली हों (एक से अधिक पृष्ठ), उदाहरण के लिए vim /usr/include/*, हालांकि तब कम उपयोगी होती है।
चीता

8

मैं निम्नलिखित का उपयोग करता हूं, इससे आपको बहुत सारी सुविधाएं मिलती हैं जो आप अन्य संपादकों जैसे कि सबलाइम टेक्स्ट / टेक्स्टमेट में होने की उम्मीद करेंगे

  1. बफ़र्स का उपयोग करें 'टैब पृष्ठ' नहीं। लगभग सभी अन्य संपादकों में टैब के समान बफ़र्स एक ही अवधारणा है।
  2. आप टैब होने आप उपयोग कर सकते हैं की एक ही नज़र चाहते हैं vim-एयरलाइन अपने में निम्न सेटिंग वाले प्लगइन .vimrc: let g:airline#extensions#tabline#enabled = 1। जब आप कोई टैब पृष्ठ नहीं खोलते हैं तो यह स्वचालित रूप से सभी बफ़र्स को टैब हेडर के रूप में प्रदर्शित करता है
  3. टिम पोप के विम-बेपनाह का प्रयोग करें जो क्रमशः पिछले / अगले बफ़र्स को [bदेने के ]bलिए और इसके अलावा (अन्य अच्छाइयों की एक पूरी मेजबानी)
  4. लो set wildmenuअपने में .vimrcजब आप लिखते हैं तो :b <file part>+ Tabएक बफर के लिए क्या आप छोड़ दिया उपयोग कर सकते हैं कि / सही तीर के माध्यम से स्क्रॉल करने के लिए संभव बफ़र्स की एक सूची मिलेगी
  5. टिम पोप के विम-ऑब्सेशन प्लगइन का उपयोग सत्रों को संग्रहीत करने के लिए करें जो एयरलाइन के साथ अच्छी तरह से खेलते हैं (मुझे सत्र और प्लगइन्स के साथ बहुत दर्द था )
  6. टिम पोप के विम-सिरका प्लगइन का उपयोग करें । यह मूल के साथ काम करता है, :Exploreलेकिन इसके साथ काम करना बहुत आसान है। आप बस -एक्सप्लोरर को खोलने के लिए टाइप करते हैं, जो कि एक्सप्लोरर में डायरेक्टरी में जाने के लिए एक ही कुंजी है। तेज़ गति से चलना बनाता है (हालाँकि fzf के साथ मैं शायद ही कभी इसका उपयोग करता हूँ)
  7. fzf (जिसे vim plugin के रूप में स्थापित किया जा सकता है) वास्तव में एक शक्तिशाली फ़ज़ी फ़ाइंडर है जिसका उपयोग आप फ़ाइलों (और बफ़र्स) की खोज के लिए भी कर सकते हैं। fzf भी बहुत अच्छी तरह से fd के साथ खेलता है (खोजने का तेज़ संस्करण)
  8. अपने कोड आधार के माध्यम से खोज करने के लिए vim- ripgrep के साथ Ripgrep का उपयोग करें और फिर आप खोज करने और बदलने के लिए परिणामों पर उपयोग कर सकते हैं:cdo

fzf और fzf-vim ने मेरे जीवन को बदल दिया, इसे पर्याप्त रूप से अनुशंसित नहीं किया जा सकता है। यह विंडोज़ पर भी बहुत अच्छी तरह से काम करता है, यहाँ तक कि कंसोल में फाइलों की खोज करने के लिए भी। खिड़कियों पर ripgrep (rg) बैकएंड का उपयोग करते हैं, जो कि मेरे अनुभव में किसी अन्य खोज / grep टूल (जैसे सिल्वरसर्चकर या डी डिफॉल्ट विंडोज़ को पता चलता है कि fzf iirc का उपयोग करता है) से बेहतर प्रदर्शन करता है। आप इसका उपयोग किसी भी आइटम की सूची के माध्यम से खोज करने के लिए कर सकते हैं: सबसे हाल ही में उपयोग की गई फ़ाइलें, वर्तमान में खोली गई बफ़र्स, वर्तमान बफ़र में लाइनें, कोडबेस (सीडब्ल्यूडी), टैग्स में लाइनें, .. आप आसानी से अपनी सूची फजी खोज को प्रोग्राम कर सकते हैं। बहुत अच्छा! (मैं ctrl-p से आया था और फिर कभी पीछे मुड़कर नहीं देखा)
Emile Vrijdags

7

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

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

यहां छवि विवरण दर्ज करें

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

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


1
जब मुझे आपके "कई विंडोज़" के आर्टिफ़िकल उदाहरण देखने को मिले तो मुझे लोल पड़ना पड़ा। मुझे उम्मीद है कि कोई भी इस तरह से काम नहीं करेगा :-) वैसे भी, मैं टाइलिंग wm का उपयोग करता हूं जो और भी बेहतर है (मैं tmux से i3mm पर स्विच किया गया)। बस अपना जवाब पूरा करने के लिए।
lzap

1
Tmux बहुत बढ़िया है और मैंने इस दृष्टिकोण का लंबे समय तक उपयोग किया, लेकिन यह दो फाइलों के बीच नेविगेशन और कॉपी करना और चिपकाना अधिक कठिन बना देता है।
neallred

1
मैं ऐसा करता था, लेकिन कई vim बफ़र्स बेहतर होते हैं जब आपको yank / पेस्ट करने की आवश्यकता होती है
टिटौ

3

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

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

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

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

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

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

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


3

मैं कई बफ़र्स का उपयोग करता हूं जो मेरी ~/.vimrcफ़ाइल में छिपे हुए हैं ।

अपने बफर की अच्छी कॉम्पैक्ट लिस्टिंग पाने के लिए मिनी-बफर एक्सप्लोरर स्क्रिप्ट बहुत अच्छी है। तब :b1या :b2... उपयुक्त बफर पर जाने के लिए या बफ़र्स के माध्यम से मिनी-बफर एक्सप्लोरर और टैब का उपयोग करें।


2

कई फ़ाइलों को संपादित करने की सुविधा के लिए मानचित्रों का प्रयास करें

"विभाजित खिड़कियां

nmap <leader>sh :leftabove vnew<CR>

nmap <leader>sl :rightbelow vnew<CR>

nmap <leader>sk :leftabove new<CR>

nmap <leader>sj :rightbelow new<CR>

" आसपास घूम रहा

nmap <C-j> <C-w>j

nmap <C-k> <C-w>k

nmap <C-l> <C-w>l

nmap <C-h> <C-w>h


2

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

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

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

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

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

nmap <CR> :CtrlPBuffer<CR>

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


2

मैं प्लगइन का उपयोग करने का सुझाव दूंगा

NERDtree

यहाँ निर्देशों के साथ github लिंक दिया गया है।

Nerdtree

मैं एक प्लगइन मैनेजर के रूप में विम-प्लग का उपयोग करता हूं, लेकिन आप वुंडल का भी उपयोग कर सकते हैं।

vim-प्लग

Vundle


2

मेरे और अन्य कई विम उपयोगकर्ताओं में, सबसे अच्छा विकल्प है,

  • फ़ाइल का उपयोग कर खोलें,

: ई file_name.extension

और फिर अंतिम बफर को बदलने के लिए बस Ctrl + 6। या, आप हमेशा दबा सकते हैं

: बफर को सूचीबद्ध करने के लिए ls और फिर बफर नंबर के बाद b का उपयोग करके बफर को बदलें।

  • हम एक ऊर्ध्वाधर या क्षैतिज विभाजन का उपयोग करते हैं

: ऊर्ध्वाधर विभाजन के लिए वी.एस.पी.

: क्षितिज विभाजन के लिए सपा

और तब <C-W><C-H/K/L/j> कार्य विभाजन को बदलने के लिए।

आप किसी भी फ़ाइल को किसी भी विभाजन में किसी भी फाइल को संपादित कर सकते हैं।


कृपया अपने उत्तर को यह सुनिश्चित करने के लिए संपादित करें कि यह इस प्रश्न में पहले से मौजूद अन्य उत्तरों में सुधार करता है।
hongsy

1

जब मैंने वीआईएम का उपयोग करना शुरू किया तो मुझे महसूस नहीं हुआ कि टैब को अलग-अलग विंडो लेआउट के रूप में उपयोग किया जाना था, और बफर एक दूसरे के बीच कई फ़ाइल संपादन / स्विचिंग के लिए भूमिका निभाता है। वास्तव में शुरुआत में v7.0 से पहले टैब भी नहीं थे और मैंने टर्मिनल टैब के अंदर सिर्फ एक VIM खोला था (मैं इस समय सूक्ति-टर्मिनल का उपयोग कर रहा था), और टैब के बीच स्विच + अल्ट + नंबरों का उपयोग करते हुए, क्योंकि मैंने सोचा था कि जैसे कमांड का उपयोग कर : बफ़र्स,: बीएन और: बीपी मेरे लिए बहुत ज्यादा थे। जब वीआईएम 7.0 जारी किया गया था, मुझे लगता है कि यह बहुत सारी फ़ाइलों को प्रबंधक के लिए आसान है और इसे स्विच किया गया है, लेकिन हाल ही में मुझे एहसास हुआ कि बफ़र्स को हमेशा जाने का रास्ता होना चाहिए, जब तक कि एक चीज नहीं: आपको इसे सही काम करने के लिए इसे कॉन्फ़िगर करने की आवश्यकता है।

इसलिए मैंने विम-एयरलाइन की कोशिश की और विजुअल ऑन-टॉप टैब-जैसे बफर बार को सक्षम किया, लेकिन ग्राफिक को मेरे iTerm2 के साथ समस्या हो रही थी, इसलिए मैंने दूसरों के एक जोड़े की कोशिश की और ऐसा लगता है कि MBE मेरे लिए सबसे अच्छा काम करता है। मैंने शिफ्ट + एच / एल को शॉर्टकट के रूप में भी सेट किया है, क्योंकि मूल वाले (वर्तमान पृष्ठ के सिर / पूंछ पर जा रहे हैं) मेरे लिए बहुत उपयोगी नहीं हैं।

map <S-h> :bprev<Return>
map <S-l> :bnext<Return>

यह जीटी और जीटी से भी आसान लगता है, और: ई भी आसान है: टैबन्यू से भी। मुझे लगता है: bd उतना सुविधाजनक नहीं है: q हालांकि (MBE को इससे कुछ समस्या है), लेकिन मुझे लगता है कि मैं बफर की सभी फाइलों के साथ रह सकता हूं।



0

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

  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>
    

0

आप में जोड़कर एक पूर्ण पागल और उर्फ vimहो vim -pसकते हैं .bashrc:

alias vim="vim -p"

यह :tab ballबाद में विम के भीतर से आह्वान किए बिना, टैब में शेल से कई फाइलें खोलने का परिणाम देगा ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.