मैं किसी मौजूदा टैब को vim में नए टैब में कैसे संपादित करूं?


47

मान लीजिए मैंने इस तरह से शुरुआत की है:

vim foo bar

अब मैं तय करता हूं कि मैं उनमें से प्रत्येक फाइल को अपने टैब में चाहता हूं। क्या ऐसा करने का कोई तरीका है जो विम से बाहर निकले और -pमेरी कमांड लाइन में विकल्प जोड़े बिना हो ?


आप में से कई शायद देख रहे हैं tabe %जिसका उल्लेख liuyang1 के जवाब में नीचे किया गया है।
मट्टुज़ पिओत्रोस्की

1
@MateuszPiotrowski जैसा मैंने उस उत्तर के लिए इस टिप्पणी में उल्लेख किया है , :tabe %बफ़र्स के साथ काम नहीं करता है जिनके पास कोई वैध फ़ाइलपथ नहीं है। :tab sbहर काम करता है।
जोएल

जवाबों:


28

जब आप इस तरह vim शुरू करते हैं, तो आपको vim क्लाइंट नहीं मिलता है, टेक्स्ट एडिटर टर्मिनल या cmd प्रॉम्प्ट का उपयोग कर रहा है - दो फाइल दो अलग-अलग बफ़र्स में हैं। :lsबफ़र्स को सूचीबद्ध करने के लिए उपयोग करें :

:ls
  1 %a   "foo"                 line 6
  2      "bar"             line 0

द% ख एवह स% बबर। आप :b2बफर 2 पर स्विच करने या :bnअगले या :bpपिछले चक्र के लिए उपयोग कर सकते हैं । मैं (CTRL-W v) खिड़कियों को लंबवत रूप से विभाजित करने के बजाय (CTRL-W s) पसंद करता हूं, जो क्षैतिज रूप से विभाजित होता है।

यदि आपके पास 2 फ़ाइलें भरी हुई हैं और कोई टैब (अभी तक) नहीं है, तो आप कर सकते हैं, :tabnewऔर नए टैब प्रकार में:b2

यदि आप हमेशा अपने स्वयं के टैब में बफ़र लोड करना चाहते हैं, तो इस लेख को देखें


हां, लेकिन मैं टैब लेना चाहता हूं।
इन्नाएम

तो आप पहले से ही एक तरह से vim शुरू कर चुके हैं कि आपकी फाइलें vim क्लाइंट में हैं, cmd / टर्मिनल शेल में नहीं?
डेवपरिलो

1
मुझे नहीं पता तुम्हारा क्या मतलब है। मैं ऊपर वर्णित की तरह vim शुरू करने के लिए शेल का उपयोग करता हूं और फिर मेरे पास एक रनिंग विम है।
इन्नाएम

आह! मुझे लगता है कि मैं वास्तव में कभी नहीं समझ पाया कि बफ़र्स टैब्स के लिए स्थानीय नहीं हैं। मैं हमेशा सोचता था (वास्तव में बहुत अधिक सोचने के बिना) कि प्रत्येक टैब की अपनी बफर सूची है।
innaM

मेरी मशीन पर, vimशेल के भीतर एक संपादक लॉन्च करेगा। विम ग्राफिकल यूजर इंटरफेस पाने के लिए मुझे उपयोग करना होगा gvim। और आप सही हैं - बफ़र्स विम एप्लिकेशन के लिए वैश्विक हैं।
डेवपरिलो

45

आप एक नए टैब में एक बफर खोलना चाहते हैं?

स्क्रीन को विभाजित करें (Ctrl-W s), एक विंडो लें, और Ctrl-W T


हम्म। बिल्कुल नहीं जो मेरे मन में था, लेकिन शुरुआत के लिए बुरा नहीं। मैं Ctrl-w Tअभी तक नहीं जानता था । बेशक, पहले टैब में अभी भी दो बफर होंगे।
इन्नाएम

नहीं। जब आप स्क्रीन को दो विंडो में विभाजित करते हैं, और उनमें से एक को नए टैब में खोलते हैं, तो यह पहले टैब से दूर चला जाता है। यह नहीं रहेगा (कम से कम यह मेरे gvim72 पर नहीं है)। जहां तक ​​बफ़र्स जाते हैं, वे विंडोज़ / टैब से कनेक्ट नहीं होते हैं ... वे मेमोरी की तरह अधिक होते हैं जहां विम सामग्री को स्टोर करते हैं।
रूक

आह! आप सही हे। मैं के उत्पादन की गलत व्याख्या कर रहा था :ls
innaM

इसके अलावा, ctrl-w V विंडो को लंबवत रूप से विभाजित करता है।
शैनन नेल्सन

1
CTRL-w v, विंडोज़ को विभाजित करने के लिए सही कमांड है
JRM

25

ओपी ने जो मांगा वह पूरा करने का एक बेहतर तरीका यह है:

:bufdo tab split

इससे प्रत्येक बफ़र अपने आप एक टैब में खुल जाएगा, चाहे कितने भी हों। यदि आप इसका उपयोग करते हैं, तो आपके .vimrc में मैपिंग करना आसान है। इस छोटे vim प्लगइन की तरह कुछ के साथ संयुक्त निम्नलिखित अपने खुद के एक टैब में :grep(या : Ack ) से हर आइटम खुलेगा :

:grep foo
:QuickFixOpenAll
:bufdo tab split

बेशक, जब एक प्लगइन का सहारा लेते हुए इसे सीधे टैब में क्विकफिक्स सूची सामग्री को खोलने के लिए संशोधित करना काफी आसान होगा।

अद्यतन : मैं सच में नीचे ggustafsson की टिप्पणी के लिए एक चिल्लाओ देने के लिए मिल गया है। यह बहुत दूर का सबसे अच्छा जवाब है और खूबसूरती से रचना के व्यवहार के प्रति विम की प्रवृत्ति को दर्शाता है। सुझाव है:

 :tab sball

यह देखने के लिए अच्छी तरह से विम मदद के लिए लायक है : टैब और : यह देखने के लिए कि यहां क्या हो रहा है।


पूर्ववर्ती संपादन के लिए एक समान दृष्टिकोण, पोस्टीरिटी के लिए है :bufdo execute "tabnew %"। मुझे लगता है कि नया दृष्टिकोण थोड़ा स्पष्ट है।
जॉन व्हिटली

एक चेतावनी: यदि vim में शुरुआती बफ़र खाली नहीं है, तो यह अंतिम बफ़र को दो बार खोलने के लिए लगता है। अगर मुझे एक साधारण फिक्स मिल जाए तो मैं एक अपडेट पोस्ट करूँगा।
जॉन व्हिटले

12
:tab sballबेहतर काम करने लगता है।
ggustafsson

25

आप tabकमांड के साथ कमांड को जोड़कर इसे पूरा कर सकते हैं sb[uffer]

पहले आपको उस बफर की बफर आईडी को जानना होगा जिसे आप एक नए टैब में खोलना चाहते हैं। आप lsकमांड के साथ इसका पता लगा सकते हैं :

:ls
  1 %a   "foo"                          line 1
  2      "bar"                          line 0

एक बार आपके पास आईडी होने के बाद, आप इसे आसानी से एक नए टैब में खोल सकते हैं:

:tab sb 2

sbआदेश सामान्य रूप से एक नया विभाजन खिड़की में दिए गए बफर को खोलता है, लेकिन tabआदेश में यह एक नए टैब में खोलने के लिए, बजाय का कारण बनता है।

tabआदेश भी जहां टैब सूची में नए टैब बनाया जाना चाहिए आप निर्दिष्ट कर सकते हैं। उदाहरण के लिए, :0tab sb 2वर्तमान टैब के बाद सूची की शुरुआत में प्रदर्शित होने वाले नए 'बार' टैब में परिणाम होगा।


2
आपको बफर नंबर की आवश्यकता नहीं है, इसे बफर नाम का एक नायाब हिस्सा दें और VIM आपके लिए बाकी काम करता है।
मिठाई

यह ऐसा जवाब था जिसकी मुझे तलाश थी और जरूरत थी। जब :tab buffer part-of-nameनया टैब नहीं खोला तो मैं निराश हो गया था ! लेकिन :tab sb part-of-nameएक आकर्षण की तरह काम किया। धन्यवाद!!!!
सुकिमा

6

1. विम में दो फाइलें खोलें।

$ वीम फू बार

2. बफ़र्स की संख्या की जाँच करें।

: ls
  1% एक "फू"
  2 "बार"

3. चेन दो कमांड्स: tabnewएक नया टैब खोलने के b <buffer_number>लिए और टैब में वांछित बफर को लोड करने के लिए।

: सारणी | बी २

8
चरण 3 के साथ समस्या यह है कि यह पहले एक खाली बफर के साथ एक नया टैब बनाता है, और फिर बफर 2 को खोलता है, जिसके परिणामस्वरूप बफर सूची में एक अतिरिक्त अनटाइटल्ड बफर होता है। उपयोग करने के लिए बेहतर है:tab sb 2
rkjnsn

1
@rkjnsn आपको एक उत्तर के रूप में पोस्ट करना चाहिए - यह इस सवाल का सबसे अच्छा जवाब देता है कि 'मैं एक मौजूदा टैब को vim में नए टैब में कैसे संपादित करूं?'
जोन्निरा

1
@JonnyLeeds ने किया।
rkjnsn

4

बस कुछ बिंदु जोड़ें जो अन्य लोगों ने उल्लेख नहीं किया है।

  • नई टैब में वर्तमान विंडो

यदि एक से अधिक विंडो हैं, तो <C-W>Tइस विंडो को नए टैब पर ले जाएगा। हालांकि, यह शॉर्टकट केवल "विंडो" के लिए है, न कि "बफर" के लिए। यदि इस शैली को पसंद करते हैं, :spया <C-W>sवर्तमान बफर को एक और विंडो में डुप्लिकेट करने के लिए, तो <C-W>Tइसे नए टैब पर ले जाने के लिए।

4 कीस्ट्रोक्स या 7 कीस्ट्रोक्स।

  • नए टैब के लिए वर्तमान बफर

:tabe % चालू बफ़र के लिए नया टैब खोलने के लिए।

7 कीस्ट्रोक्स।

  • नए टैब के लिए बफर

यदि CtrlP प्लगइन का उपयोग करें, "CtrlPBuffer" का भी उपयोग कर सकते हैं, तो <C-t>शॉर्टकट के साथ इसे नए टैब पृष्ठ के साथ खोलें। यह शैली, आसानी से विभिन्न बफ़र्स पर स्विच करने के लिए।

"CtrlPBuffer" के शॉर्टकट के साथ, 4 कीस्ट्रोक्स या अधिक।


:tabe %वह है जो मैं लंबे समय से देख रहा हूं, धन्यवाद!
पाविक ​​डिक

नहीं, :tabe %वास्तव में वर्तमान बफर के लिए एक नया टैब नहीं खोलता है। क्या होता है कि %वर्तमान बफर की फ़ाइलपथ तक विस्तारित हो जाता है और :tabeउस पथ को खोलता है। विम देखेंगे कि आप एक फ़ाइल खोलने की कोशिश कर रहे हैं जो आपके पास पहले से खुली है और आपके पास मौजूद बफर का पुनः उपयोग करेगा। इसका मतलब है कि यह उन बफ़र्स के साथ काम नहीं करता जिनके पास कोई फ़ाइलपथ नहीं है। यदि आप एक नई फ़ाइल खोलते हैं :newऔर आपने इसे सहेजा नहीं है, तो आप इसे इसके साथ एक नए टैब पर नहीं डाल सकते। असली कमांड जो आपको चाहिए वह है उनके जवाब में rkjnsn डाल: :tab sb %या कम::tab sb
जोएल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.