विम में क्विकफिक्स विंडो में बफ़र कैसे सूचीबद्ध हैं?


13

विम एडिटर का उपयोग करना, बफ़र्स ब्राउज़ करने के लिए एक सामान्य कार्य है। मैं अब मानक कमांड का उपयोग करता हूं जैसे :lsया ए :bnext। वास्तव में मैं अपने .vimrc में सेट करता हूं:

"move amongs buffers with CTRL
map <C-J> :bnext<CR>
map <C-K> :bprev<CR>

मैं बफ़र्स को लिस्ट में क्विकफ़िक्स विंडो में, सरल (= उत्कृष्ट) तरीके से एमआरयू प्लग इन लागू करना चाहता हूं ।

वहाँ MRU के रूप में सरल लेकिन बफ़र्स पर अभिनय के रूप में एक प्लगइन है?

ठीक है, एक संभावित समाधान :CtrlpBuffersकमांड का उपयोग करने के लिए हो सकता है , Ctrl प्लगइन का हिस्सा लेकिन मैं Ctrl का बहुत बड़ा प्रशंसक नहीं हूं, क्योंकि कुछ समय में अजीब boursviours है जो मुझे पूरी तरह से समझ में नहीं आता है (फजी-मोड चयन ...); तो मैं MRU प्लगइन के रूप में वास्तव में सरल कुछ के लिए देख रहा हूँ।

BTW, मैंने :cexpr {expr}कमांड के साथ मज़ाक किया :buffers, सफलता के बिना, सूची की सामग्री के साथ क्विकफ़िक्स विंडो को पॉप्युलेट करने की कोशिश कर रहा है (शायद इसलिए कि मेरी अज्ञानता प्रोग्रामिंग vimscripts)

कोई उपाय ?


क्या आपका मतलब :bnextइसके बजाय था :cnext?
तोमकाडो

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

मैं एक विंडो में खुले बफ़र्स ब्राउज़ करने में सक्षम होना चाहता हूं। वास्तव में क्विकफिक्स को फिर से तैयार नहीं किया गया है
जियोर्जियो रॉबिनो

@tommcdo: हाँ क्षमा करें, मेरे सामान्य टाइपोस। मेरा मतलब है: bnext और मैंने इस सवाल को अपडेट किया
जियोर्जियो रॉबिनो

जवाबों:


18

आप इस तरह से प्रत्येक बफ़र के साथ क्विकफ़िक्स सूची पॉप्युलेट कर सकते हैं:

:call setqflist(map(filter(range(1, bufnr('$')), 'buflisted(v:val)'), '{"bufnr": v:val}'))
  • setqflist()प्रत्येक त्रुटि (फ़ाइल नाम, लाइन नंबर, स्थिति, आदि) का वर्णन करने वाले शब्दकोश आइटम की सूची लेता है। इस मामले में हम न्यूनतम जानकारी सेट कर रहे हैं: बफर नंबर
  • map()एक सूची और एक अभिव्यक्ति (एक स्ट्रिंग) लेता है और इनपुट सूची के प्रत्येक आइटम पर लागू अभिव्यक्ति की एक नई सूची देता है। यहां, हम सूचीबद्ध बफर नंबरों की सूची ले रहे हैं और उन्हें उपयोग करने के लिए प्रारूपित कर रहे हैं setqflist()( सूची में आइटम का मूल्य '{"bufnr": v:val}'कहां v:valहै)
  • filter()एक सूची को फ़िल्टर करता है, ऐसे तत्वों को हटाता है जो किसी दिए गए अभिव्यक्ति को संतुष्ट नहीं करते हैं। यहां अभिव्यक्ति है buflisted(v:val), जिसका अर्थ है कि बफर नंबर मौजूद है और सूचीबद्ध है, अर्थात :lsआउटपुट में दिखाई देता है
  • range(a, b)से संख्या की एक सूची बनाता aहैb
  • bufnr()दिए गए बफर नाम की संख्या लौटाता है। यदि तर्क है '$', तो यह उच्चतम बफर नंबर देता है

यह टाइप करने के लिए बहुत कुछ है, और बहुत यादगार नहीं है, इसलिए आप इसे अपने vimrc में एक कमांड में लपेट सकते हैं:

command! Qbuffers call setqflist(map(filter(range(1, bufnr('$')), 'buflisted(v:val)'), '{"bufnr":v:val}'))

अब आप बस :Qbuffersक्विकफ़िक्स सूची को पॉप्युलेट करने के लिए उपयोग कर सकते हैं ।


यदि आप चाहते हैं कि यह स्वचालित रूप से अपडेट हो जाए क्योंकि नए बफ़र्स जोड़े जाते हैं, तो आप ऐसा कुछ कर सकते हैं:

autocmd BufAdd * Qbuffers

हालांकि, मैं इसकी सिफारिश नहीं करूंगा, क्योंकि यह क्विकफिक्स की सूची को प्रस्तुत करने के लिए बहुत ही अनुपयोगी होगा, जैसे कि :makeया :grep


1
स्पष्टीकरण के लिए धन्यवाद, टमकोडो। क्यूबफ़र्स सुंदर है! हो सकता है कि मैं जोड़ दूं: तुरंत कॉल करने के लिए क्विकफिक्स विंडो को खोलने के लिए आपके कॉल के आखिरी में मैथुन किया जाए और हो सकता है कि यह कर्सर स्थिति की रिपोर्ट करने के लिए उपयोगी हो। मुझे विम्सस्क्रिप्ट :-) का थोड़ा अध्ययन करना है
जियोर्जियो रॉबिनो

9

आपको इस मैपिंग को आज़माना चाहिए:

nnoremap gb :ls<CR>:b<Space>

प्रॉम्प्ट पर, वांछित बफ़र नंबर टाइप करें और एंटर दबाएँ।

जीबी


क्वैस्टियन जहां क्विकफ़ेन विंडो में बफ़र्स को सूचीबद्ध करने के बारे में है।
VeXii

हां, और मेरा जवाब एक हल्का विकल्प प्रदान करता है।
रोमेनैल

1
ओपी बताता है कि वह बफरलिस्ट के बारे में जानता है लेकिन इसे क्विकफिक्स विंडो में रखना पसंद करता है। और आप समाधान कर रहे हैं बस बफरलिस्ट का उपयोग करना है?
VeXii

1

Bufexplorer प्लगइन पर एक नज़र है । यह उल्लेखित MRU प्लगइन के समान एक साइडबार में सभी बफ़र्स की ब्राउज़ करने योग्य सूची खोलता है। इसके अलावा, vim.org पर ऐसे कई और प्लगइन्स हैं ।

पुनश्च: आपने स्टैक ओवरफ्लो पर एक ही सवाल पूछा है ; कृपया समानांतर में कई साइटों पर समान प्रश्न सबमिट न करें!


tks Ingo, मैंने थोड़ा सा bufexplorer का परीक्षण किया और मुझे यह पसंद है। मैंने यहां भी पोस्ट किया क्योंकि एक
स्टैकओवरफ्लो

1
हां मैंने वह देखा। मैंने पसंद किया होगा कि आपने तब मूल एसओ पोस्ट को हटा दिया था, या कम से कम क्रॉस-पोस्टिंग से जुड़ा था।
इंगो करकट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.