2010-03-15 10 views
26

जब एक एकल फाइल के साथ काम कर के माध्यम से खोज, मैं करने के लिए इस्तेमाल कर रहा हूँ:विम सभी मौजूदा बफ़र्स

/blah 
do some work 
n 
do some work 
n 
do some work 

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

उत्तर

9

मेरे पास निम्नलिखित मैपिंग्स (विम्परेटर द्वारा प्रेरित) है जो पिछले/अगले बफर को स्विच करना आसान बनाता है।

nmap <C-P> :bp<CR> 
nmap <C-N> :bn<CR> 

यह वास्तव में 'एन' के साथ काम करता है।जब आप अपनी फ़ाइल के साथ काम कर रहे हैं, तो फिर से एनटी मारने से पहले CTRL-n दबाएं और आप अगले बफर में खोज रहे हैं। जब तक आप सभी बफर के माध्यम से नहीं हो जाते तब तक फिर से करें।


कई फ़ाइलों के साथ काम करने का एक और तरीका तर्क सूची है।

इसमें वीम शुरू करने पर पैरामीटर के रूप में पारित की गई कोई भी फाइलें शामिल हैं (उदा: vim someFile.txt someOtherFile.py)। [ब्रैकेट्स] के भीतर फ़ाइल वर्तमान फ़ाइल है।

:args 
[someFile.txt] someOtherFile.py 

: n सूची में अगले फ़ाइल पर ले जायेगा और: लागू नहीं तुम वापस लाएगा। तुम भी साथ argslist को जोड़ सकते हैं: argadd, या एक नया आर्ग सूची भी (देखें: मदद क्यू) आर्ग सूची मैक्रो के साथ अच्छी तरह से काम

:n some.py files.py you.py want.py to.py work.py with.py 
or to open all *.py files recursively from some project. 
:n ~/MyProjects/TimeMachine/**/*.py 

साथ बनाने के लिए, यदि आप अपनी फ़ाइलों के लिए इसी तरह के परिवर्तन की है। बस अपनी फ़ाइल को पहली फ़ाइल पर रिकॉर्ड करें, इसके साथ समाप्त करें: n अगली फ़ाइल पर जाने के लिए, और रिकॉर्डिंग को रोकें।

qq/searchForSomethingAndDoStuffOrWhatever:nq 

तो सभी फ़ाइलों (6 @ क्यू) के माध्यम से अपने मैक्रो चलाने के लिए, यकीन है कि सब कुछ करने के लिए एक नज़र में अच्छी तरह से चला गया है, और के साथ एक खत्म: दीवार।


यह थोड़े पर निर्भर करता है कि आप क्या करना चाहते हैं। यदि आपके पास सिर्फ एक ही बदलाव है जो कई फ़ाइलों में बिल्कुल समान है (और वे केवल आपके द्वारा लोड किए गए हैं), मुझे यह भी पसंद है: ba (: tabdo sp) कमांड। यह बहुत तेज़ है और आप देख सकते हैं कि क्या हो रहा है।

और यदि आपके पास बफर खोलने का एक समूह है, तो आप उन फ़ाइलों को लोड कर सकते हैं जिन्हें आप काम करना चाहते हैं, प्रत्येक खिड़की में, और उन सभी पर एक regexp करें।

CTRL-w v :b someFile 
:sp anotherFile 
... 
:windo :%s/foo/bar/g 

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

http://www.vim.org/scripts/script.php?script_id=1984

Mmmmmmmm विम अच्छा है! तो सेक्स! : https://github.com/jeetsukumaran/vim-buffersaurus

इस सुंदर प्लगइन आप सभी फ़ाइलें एक अलग विंडो, जिसमें से आप चुन सकते हैं में आपकी क्वेरी से मिलान दिखाता है:)

38

bufdo कमांड का उपयोग करें।

:bufdo command 

:bufdo command मोटे तौर पर प्रत्येक बफर से अधिक पुनरावृत्ति और आदेश को क्रियान्वित करने के बराबर है।

:bufdo! %s/FIND/REPLACE/g 

या मान लीजिए कि हम पाठ के सभी लाइनों है कि सभी बफ़र्स से रेगुलर एक्सप्रेशन "एसक्यूएल" से मेल को नष्ट करना चाहते हैं::

:bufdo! g/SQL/del 
उदाहरण के लिए, मान लीजिए कि आप एक मिल रहा है और सभी बफ़र्स भर की जगह करना चाहते हैं

या हो सकता है कि हम सभी बफ़र्स पर UTF-8 में फ़ाइल एन्कोडिंग सेट करना चाहते हैं:

:bufdo! set fenc=utf-8 

ऊपर विंडोज (:windo), टैब (के लिए वाग्विस्तार किया जा सकता है 0), और तर्क (:argdo)। अधिक जानकारी के लिए: bufdo पर सहायता देखें।

+1

यहां देखें http://vim.wikia.com/wiki/Run_a_command_in_multiple_buffers – Rod

+0

यह एक अच्छा जवाब नहीं है। यहां तक ​​कि यदि यह सही है, तो इसके लिए टिप्पणियों को देखने के बाद टिप्पणियों को देखना आवश्यक है जो उत्तर प्रदान कर सकते हैं या नहीं। एक अनुभवी SO उपयोगकर्ता को इस तरीके से एक प्रश्न का जवाब देना निराशाजनक है। – arman

+1

मैंने कुछ उदाहरण और स्पष्टीकरण जोड़े हैं जो मुझे आशा है कि उपयोगी हैं। अगर आपको अभी भी लगता है कि इसमें कुछ याद आ रही है तो मुझे बताएं। –

1

मुझे विश्वास नहीं है कि फाइलों या बफर में 'एन' को कार्यान्वित करना संभव है। आप इस्तेमाल कर सकते हैं

:grep blah * 

और फिर कर

:cn 

उस पर blah साथ अगली पंक्ति में ले जाने के लिए। यह फाइलों के बीच स्विच करेगा लेकिन यह काफी साफ नहीं है। यह हर समय कोलन टाइप करने के लिए अधिक बोझिल है, और यह आपको केवल लाइन पर ले जाएगा, शब्द नहीं।

मैं आमतौर पर उन फ़ाइलों को खोलने के लिए करता हूं जिन्हें मैं टैब में खोजना चाहता हूं और फिर फ़ाइल के अंत तक पहुंचने पर, अगले टैब पर जाने के लिए 'n' और 'gt' का उपयोग करें, या फ़ाइलों को सूचीबद्ध करें जब मैं इसे संपादित कर रहा हूं तो मैं कमांड लाइन को अगली फाइल पर 'wn' के साथ छोड़ सकता हूं।

उम्मीद है कि यह मदद करता है!

0

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

:tab sp 
:bufdo sp 

फिर प्रत्येक फ़ाइल एक के बाद एक के माध्यम से खोज और बंद अपनी खिड़की जब आप पूरा कर (:q या :close उपयोग करें)। प्रत्येक विंडो को अधिकतम करने के लिए CTRL + W_ का उपयोग करें ताकि आप इसमें काम कर रहे हों। जब आप समाप्त कर लेंगे और आप आखिरी विंडो बंद कर देंगे, तो टैब पेज बंद हो जाएगा और आप खोज करने का निर्णय लेने से पहले जहां भी थे, आपको वापस छोड़ दिया जाएगा।

2

यहाँ अपने सुसमाचार है। यह regex का समर्थन करता है।

21

हम vimgrep का उपयोग करके और Argslist में खोज कर ऐसा कर सकते हैं। लेकिन पहले के हमारे सभी बफ़र्स के साथ हमारे argslist पॉप्युलेट करते हैं:

:bufdo :args ## % 

अब हम हमारी argslist

:vimgrep /blah/ ## 

कहाँ % == the current filepath और ## == the arglist में खोज सकते हैं।

मैं इन vimcasts देखने की सलाह देते है, तो आप और अधिक जानना चाहते हैं: Populate the arglist, Search multiple files with vimgrep

+2

धन्यवाद! यह वही है जो मैं उम्र के लिए देख रहा था। (बस '##' vimgrep तर्क खो रहा था।) मुझे लगता है कि हम वैकल्पिक रूप से ': arga [dd]' का उपयोग करके सूची में तर्क भी जोड़ सकते हैं। –

+0

विम '## 'में वर्तमान arglist है और'% 'वर्तमान फ़ाइल नाम है। हम पहले वर्तमान arglist को ':% argd' के साथ साफ़ करते हैं, फिर एक समय में arglist को बफर जोड़ने के लिए 'bufdo' का उपयोग करें। अंत में, हम arglist को खोजने के लिए '##' के साथ ': vimgrep' का उपयोग करते हैं। – JPaget

0

कभी भी आप एक और बफर करने के लिए स्विच करना चाहते हैं इस प्रयास करें।

:b + <any part of file in buffer> + tab 

उदाहरण के लिए। मैं अपने बफर

77 "/var/www/html/TopMenuAlertAlert.vue" लाइन 65
78 "/var/www/html/MainSidebar.vue" लाइन 29
79 "/ var में इस राशि /www/html/FullScreenSearch.vue "लाइन 26
80" /var/www/html/Menu.vue "लाइन 93
81" /var/www/html/layouts/RightSidebar.vue "रेखा 195

जैसा कि मैं किसी अन्य बफर में बदलना चाहता हूं, मुझे शायद 'अलर्ट'

जैसी फ़ाइल के बारे में कुछ जानकारी याद है

तो मैं बस जाओ

:b Alert + tab 

यदि दिए गए फ़ाइल एक मैं चाहता हूँ नहीं है, मैं सिर्फ टैब दबाने पर रहते हैं।

विम अगली फाइल को इसके करीब दे रहा है।

एक बार जब आप इसे प्राप्त कर लेंगे। एंटर दबाए।