मैं एक साथ कई टैब कैसे खोल सकता हूं?


14

अगर मैं उपयोग करता हूं:

:tabedit file1 file2

मुझे मिला:

E172: Only one file name allowed

क्या :tabeditकई फ़ाइल नामों के साथ उपयोग करने का कोई तरीका है ? या एक ही बार में कई टैब खोलने का दूसरा तरीका?


1
संबंधित:
सुपरसियर

@kenorb हाँ। और इसका ठीक वैसा ही उत्तर पहले से ही यहाँ है, सिवाय इसके कि इस पर कोई स्पष्टीकरण नहीं है। तो इसे जोड़ने से कोई मूल्य कैसे जुड़ता है?
मार्टिन टूरनोइज

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

मैंने यह एक-लाइनर सीखा है :args *.c | tab all:। अन्य प्रश्न इससे अधिक लोकप्रिय है, इसलिए इसे भी लिंक करना अच्छा है।
kenorb

संबंधित: स्टैक ओवरफ्लो में VIM के साथ नए टैब में कई फाइलें खोलें
Mihai कैपोटे

जवाबों:


10

तर्क सूची को संशोधित करके "अंतर्निहित" तरीके का उपयोग करके मेरे अन्य उत्तर में समस्याओं और जटिलता को देखते हुए , मैंने ऐसा करने के लिए स्वयं के छोटे फ़ंक्शन द्वारा जोड़ा है:

" Open multiple tabs at once
fun! OpenMultipleTabs(pattern_list)
    for p in a:pattern_list
        for c in glob(l:p, 0, 1)
            execute 'tabedit ' . l:c
        endfor
    endfor
endfun

command! -bar -bang -nargs=+ -complete=file Tabedit call OpenMultipleTabs([<f-args>])

अब आप उपयोग कर सकते हैं :Tabedit *.vim। यह फ़ंक्शन सभी ग्लोबिंग पैटर्न का विस्तार करेगा, और :tabedit <f>प्रत्येक फ़ाइल के लिए निष्पादित करेगा । आप जितने चाहें उतने पथनाम जोड़ सकते हैं, उदाहरण के लिए यह सब काम करता है:

:Tabedit file.rb
:Tabedit *.c
:Tabedit file1.py file2.py _*.py
:Tabedit /etc/hosts file{1,2}.sh

खैर, और आगे ...

मैं एक छोटे से में रखते globedit.vim प्लगइन है, जो भी के लिए आदेश होता है :Edit, :Splitआदि


2
शानदार समारोह और कमान! कुछ सुधार: (1) [<f-args>]इसके बजाय "<args>"- इस तरह से उपयोग करें , patternपैरामीटर एक सूची (सरणी) होगा और आपको स्ट्रिंग को मैन्युअल रूप से विभाजित करने से निपटना नहीं होगा। (2) एक गैर-शून्य पास तीसरे तर्क के रूप में glob()यह एक सूची वापस करने के लिए। फिर आप मैन्युअल रूप से वहाँ भी विभाजित होने से बच सकते हैं। आपको 0व्यवहार को प्रभावित किए बिना इसे छोड़ने के लिए दूसरे तर्क के रूप में पास करना होगा glob(l:p, 0, 1):।
tommcdo

7

जहाँ तक मुझे पता है, ऐसा करने का एकमात्र निर्मित तरीका है:

:args *.vim
:tab all

सबसे पहले, :argsतर्क सूची की जगह लेगा। तर्क सूची उन फ़ाइलों को सूचीबद्ध करती है जिन्हें आपने विम के साथ खोला था; तो vim file1 file2इसका मतलब है कि तर्क सूची में शामिल है file1और file2
हम इसे रनटाइम पर संशोधित कर सकते हैं, और विम तर्क सूची में हर नई प्रविष्टि के लिए एक बफर खोलेगा। अधिक जानकारी
के :help argument-listलिए देखें ।

:allआदेश एक खिड़की तर्क सूची में प्रत्येक प्रविष्टि के लिए खुलती है, जो :tabआदेश एक आदेश कार्यान्वित करता है, और एक नया टैब जब आदेश एक नई विंडो खोलने होता दिया खोलता है।

चेतावनियां

इस विधि के लिए कुछ संकेत हैं।

सबसे पहले, डुप्लिकेट के लिए कोई चेक नहीं है, इसलिए आप एक ही बफर के लिए 2 या अधिक टैब के साथ समाप्त कर सकते हैं।

लेकिन सबसे बड़ी समस्या यह है कि यह आपके सभी टैब की जगह ले लेता है जो तर्क सूची में है; इसलिए आपने सभी मौजूदा टैब खो दिए हैं।
आप थोड़ा का उपयोग करके इस को नाकाम कर सकते हैं :argadd *.vimकरने के लिए जोड़ने के बजाय इसे बदलने की तर्क सूची,; लेकिन इस तरह के आदेशों :editया तर्क सूची में परिवर्तन नहीं:tabedit करते हैं , और आप उन टैब को खो देंगे जब तक आप उन्हें तर्क सूची में नहीं जोड़ते (आप अभी भी उन्हें बफर सूची में हैं, हालांकि)। आप एक टैब में अपनी तर्क सूची में सब कुछ नहीं खोलना चाह सकते हैं, शायद आप अतिरिक्त टैब के रूप में केवल 2 फाइलें खोलना चाहते हैं।

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


मैं गलत हो सकता हूं, लेकिन यह एक अतिरिक्त टैब नहीं खोलता है (जैसा कि डिफ़ॉल्ट रूप से टैब खोलने के बारे में मेरे प्रश्न में देखा गया है)?
मूरू

1
यदि आप उस प्रश्न पर मेरे उत्तर की बात कर रहे हैं, तो वहाँ अंतर यह है कि मैंने उपयोग किया है :argdo tabedit %, जो प्रत्येक तर्क के लिए एक नया टैब खोलता है। एक टैब से शुरू करना और n नए को खोलना स्वाभाविक रूप से n + 1 टैब के साथ आपको छोड़ देगा । :tab allएक बेहतर समाधान है।
tommcdo

@tommcdo मैं जोश पेट्री के जवाब की बात कर रहा था । आप उसके किसी एक उपनाम से नहीं होंगे, क्या आप :)
मूरू

हाहा, नहीं। मैं एक अलग सवाल सोच रहा होगा!
tommcdo

2

आप :nextइसके बजाय आदेश का उपयोग कर सकते हैं , उदाहरण के लिए:

:n file1 file2

या:

:n *.txt

यह प्रयोग करने के समान ही लगता है :args *.vim? कम से कम, यह एक ही व्यवहार करता है, और :help next_fइसे एक ही होने के रूप में दस्तावेज करता है ...
मार्टिन टूरनोइज

यह छोटा और सरल है और आपने इसका उल्लेख नहीं किया है। व्यवहार वही है, जैसा आपने उस प्रश्न में पूछा था।
kenorb

2

कमांड लाइन से आप उपयोग कर सकते हैं:

vim file1 ... filen -p

और अगर आप -pअभी भी उपयोग करना भूल गए तो आप उपयोग कर सकते हैं

:tab ball

Btw, यह मत भूलो कि चर tabpagemax(डिफ़ॉल्ट मान 10) सीमित है कि आप इस तरह से कितने टैब खोल सकते हैं।


0

आप वास्तव में नए टैब खोल सकते हैं और नए कार्यों को लिखे बिना अपने वर्तमान टैब को रख सकते हैं ( स्टैक ओवरफ्लो पर यह उत्तर देखें ):

:args file1 file2 | argdo tabe

आप ऐसा करने :tabeसे पहले एक नया खाली टैब ( ) खोलना चाह सकते हैं , क्योंकि वर्तमान टैब में पहली फ़ाइल खुलेगी। इसके अलावा, एक अतिरिक्त खाली टैब खुला छोड़ दिया जाएगा (यह :help argdoसमझने के लिए देखें )।


आपको सिंटैक्स हाइलाइटिंग (किसी कारण से) को ठीक करने की भी आवश्यकता है, जैसा कि लिंक में बताया गया है और अंतिम टैब को बंद करना है, इसलिए 'पूर्ण' कमांड होगा: :tabnew | args file1 file2 | argdo tabe | tabdo syntax onआपको प्रॉम्प्ट को साफ़ करने के लिए एंटर की आवश्यकता है और :closeअंतिम को हटाने के लिए टाइप करें ( खाली) टैब ... यह टाइपिंग का एक बहुत बड़ा कारण है, और केवल इसके लायक है यदि आप बहुत सारे टैब खोल रहे हैं (2 या 3 फ़ाइलों के लिए, बस :tabeदो बार उपयोग करना तेज होगा)।
मार्टिन टूरनोइज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.