आप विम में बफ़र्स के बीच स्विच करना कैसे पसंद करते हैं?


92

मैंने MiniBufExplorer की कोशिश की है , लेकिन मैं आमतौर पर इसे दिखाते हुए या इसे पूरी तरह से बंद करने वाली कई खिड़कियों के साथ समाप्त होता हूं। मुझे क्या पसंद है , वृद्धिशील खोज के साथ LustyJuggler कुछ ऐसा है , जिस तरह से मैं Emacs में बफ़र्स के बीच स्विच करता हूं। निश्चित रूप से इस तरह की एक स्क्रिप्ट है?

जवाबों:


23

मैं कुछ महीनों के लिए विंसेंट कोलायूटा के कमांड-टी विम प्लगइन का उपयोग कर रहा हूं । विन्सेन्ट ने इसके कुछ हिस्सों को लिखा है, जिन्हें C में तेज़ होना चाहिए, और मुझे कहना होगा कि यह है! और, मुझे लगता है कि इसका फ़ाइल पैटर्न मिलान तर्क टेक्स्टमेट के कमांड-टी से भी बेहतर है। स्क्रैंकास्ट की जाँच करें ।

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

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

आसान बफ़र स्विचिंग में कई उपयोगी टिप्स हैं। मैंने अपने .vimrc के लिए निम्नलिखित को अनुकूलित किया है, जो बफ़र-नेम ऑटो-कम्प्लीट करता है, मेरे <लीडर> और लेफ्ट-साइड होम रो कीज़ के लिए सबसे उपयोगी बफर-स्विचिंग कमांड को मैप करता है, और स्टेटस लाइन में करंट बफर नंबर दिखाता है। :

"" Tab triggers buffer-name auto-completion
set wildchar=<Tab> wildmenu wildmode=full

let mapleader = ","

map <Leader>t :CommandT<Return>
map <Leader>a :bprev<Return>
map <Leader>s :bnext<Return>
map <Leader>d :bd<Return>
map <Leader>f :b 

"" Show the buffer number in the status line.
set laststatus=2 statusline=%02n:%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P

मैं MiniBufExplorer का भी उपयोग करता हूं , जो अपने स्वयं के क्षैतिज विभाजन शीर्ष में प्रत्येक सूचीबद्ध बफर की एक कॉम्पैक्ट लिस्टिंग प्रदान करता है।


73

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

तब मैंने जैमिस बक की एक पोस्ट पढ़ी कि कैसे उन्होंने TextMate से वापस विम पर स्विच किया , और कुछ बेहतरीन ट्रिक्स सीखे:

  • वर्तमान विंडो को विभाजित करने के लिए Ctrl-w s और Ctrl-w v
  • एक ही विंडो में दो बफ़र्स के बीच आगे-पीछे जाने के लिए Ctrl-6।
  • भययोग्य fuzzyfinder.vim जो आपको आपकी वर्तमान निर्देशिका या वर्तमान में खुले बफ़र्स की फ़ाइलों की स्वत: पूर्ण खोज देता है
  • जैमिस की अपनी फजी_फाइल_फाइंडर और फजीफाइंडर_टेक्स्टमेट , जो थोड़ा संशोधित करती है कि कैसे फजाइफाइंडर टेक्स्टमैट में एक समान विशेषता की तरह अधिक व्यवहार करने के लिए काम करता है (जहां तक ​​मैं बता सकता हूं, अंतर यह है कि यह केवल शुरुआत के बजाय फ़ाइल नाम में कहीं भी मेल खाता है)। देखो इस वीडियो कार्रवाई में यह देखने के लिए।

अब मेरे पास बस एक gvim उदाहरण है, इसे अधिकतम किया गया है, और इसे कई खिड़कियों में विभाजित किया गया है ताकि मैं एक साथ कई फाइलें देख सकूं। मैं Ctrl-F को fuzzyfinder_textmate के लिए बाध्य करता हूं, इसलिए अब यदि मैं Ctrl (F) टाइप करता हूं तो mod/usobयह एप्लिकेशन / मॉडल / user_observer.rb को खोलता है। मैं लगभग कभी भी टैब से परेशान नहीं करता हूं।

अद्यतन 2010/08/07

जबकि फजीइन्फाइंडर_टेक्स्टमेट भयानक बना हुआ है, जैसा कि केसी टिप्पणियों में बताते हैं, अब इसे बनाए नहीं रखा गया है। इसके अलावा, यह (और / या fuzzyfinder.vim) बड़ी परियोजनाओं (निर्देशिकाओं या फ़ाइलों के बहुत सारे) के साथ काम करते समय थोड़ा धीमा और अस्थिर हो जाता है, इसलिए मैं एक विकल्प की तलाश कर रहा हूं।

सौभाग्य से, Wincent Colaiuta के कमांड-टी प्लगइन के रूप में एक बहुत अच्छा विकल्प प्रतीत होता है । यह बहुत समान है (यदि थोड़ा बेहतर नहीं है) fuzzyfinder_textmate के लिए व्यवहार, लेकिन यह काफी तेज है; यह भी एक विभाजन या ऊर्ध्वाधर विभाजन में पाया फ़ाइल को खोलने में सक्षम होने की तरह अच्छी सुविधाएँ है। इसके संकेत देने के लिए डेविड रिवर्स को धन्यवाद (और उत्थान!)।


हां, फजीइंफाइंडर जो मैं चाहता हूं, उसके बहुत करीब है।
एलेक्सी रोमानोव

जैमिस के फजीफाइंडर_टेक्स्टमेट ने विम को पूरा किया। यह वास्तव में एक मुख्य विशेषता बन जाना चाहिए!
csexton

ऐसा लग रहा है कि जैमी ने इस प्रोजेक्ट पर काम करना बंद कर दिया है। शायद मूल लेखक इन विशेषताओं में खींच लेंगे? weblog.jamisbuck.org/2009/1/28/…
cmcginty

सैम, प्रॉप्स के लिए धन्यवाद जो आपने मुझे दिया (मेरे जन्मदिन पर!): डी
डेविड रिवर्स

14
Ctrlp vim plugin ( kien.github.com/ctrlp.vim ) आज़माएं, यह फ़ज़ीफ़ाइंडर लागू करता है, लेकिन एक टन अधिक उपयोगी सुविधाओं के साथ :)
फिलिप

33

मैं मूलभूत बातों का उपयोग करता हूं - ' :ls' + ' :bn' / ' :bp' + ' :b <part-of-name>'


8
:-) मैंने कभी नहीं सोचा था कि मैं "सरल" और "': ls' + ': bn' / ': bp' + ': b <part-of-name>'" एक ही वाक्य में देखूंगा।
पैक्सडीब्लो

16
पैक्स, मैं अभी भी इसे नहीं देखता हूं। :-)
cxtxton

इस के अलावा :map <c-n> :bn<cr>और :map <c-p> :bp<cr>, के बाद से C-nऔर C-pटाइप करने के लिए तेजी से कर रहे हैं और बफ़र्स के बीच साइकिल की अनुमति यदि आप उन्हें बार-बार दबाएँ। (मैं उन्हें उनके मूल उद्देश्य के लिए इस्तेमाल कभी नहीं।) यह साथ ब्राउज़र टैब के बीच साइकिल की तरह है C-PgUpऔर C-PgDnया जो कुछ भी शॉर्टकट आपके ब्राउज़र है।
तोबिया

Ctrl + N अन्य संपादकों के बहुमत में 'नई फ़ाइल' के लिए मानक है और Ctrl + P पेस्ट कमांड है, इसलिए अधिकांश लोगों के लिए ये वास्तव में भ्रमित करने वाले होंगे। टिम पोप का विम-अनइम्पेयर आपको [bपिछले बफर के ]bलिए और अगले बफर के लिए देता है। प्लस अन्य उपहारों का भार जो ]अगले और [पिछले के लिए अवधारणा का उपयोग करते हैं ।
icc97

31

मुझे विंडो को विभाजित करने के लिए "ctrl-w s" और "ctlr-w v" पसंद है। तब मैं विभाजन की चाबियाँ (एच, जे, के, एल) को ctrl के साथ विभाजित खिड़कियों के बीच स्थानांतरित करने के लिए नीचे रखता हूं:

" Map ctrl-movement keys to window switching
map <C-k> <C-w><Up>
map <C-j> <C-w><Down>
map <C-l> <C-w><Right>
map <C-h> <C-w><Left>

तीर कुंजियों से मेरा हाथ हिलाना कष्टप्रद है।

इसके बाद, मैंने वर्तमान विंडो में बफ़र्स के बीच स्विच करने के लिए ctlr-tab की स्थापना की (बहुत सारे अन्य वातावरण की तरह):

" Switch to alternate file
map <C-Tab> :bnext<cr>
map <C-S-Tab> :bprevious<cr>

ये पिछले कई वर्षों में मेरे लिए बहुत अच्छी तरह से काम किया है, हालांकि विम के पास हमेशा से अधिक रहस्य हैं जो आप जान सकते हैं।


3
आपकी टिप्पणी "स्विच करने के लिए वैकल्पिक फ़ाइल" भ्रामक है क्योंकि विम के पास पहले से ही एक वैकल्पिक फ़ाइल है, यह आपकी पिछली फ़ाइल थी और आप वर्तमान (%) और वैकल्पिक (#) फ़ाइलों को आसानी से ctrl-6 का उपयोग करके स्विच कर सकते हैं।
ग्रेव

10
इसके अलावा, <Cw> के साथ hjkl विंडोज़ स्विच करेगा - तीर कुंजी की आवश्यकता नहीं है।
ग्रेव

4
<CS-Tab> RSI के लिए पूछ रहा है। मैंने :bp:bn
puk

3
रीमैपिंग <SJ> सामान्य मोड में एक खराब पसंद की तरह लगता है, जैसा कि आमतौर पर इस्तेमाल किया जाता है (लाइनों को समेटने के लिए)।
माइकल पर्सी

18
nmap <Leader>bb :ls<CR>:buffer<Space>

और किसी ने भी अच्छा प्लगइन ctrlp.vim का उल्लेख नहीं किया । इस प्लगइन का उपयोग करके आप नाम से बफर खोज सकते हैं।


मुझे वह मैपिंग पसंद है! स्मार्ट और लचीला।
ivan

14

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

CTRL- Jअगले बफर के लिए

CTRL- Kपिछले बफर के लिए

CTRL- Lअगले टैब के लिए

CTRL- Hपिछले टैब के लिए

यहाँ .vimrcविन्यास है:

map <C-J> :bnext<CR>
map <C-K> :bprev<CR>
map <C-L> :tabn<CR>
map <C-H> :tabp<CR>

Http://syskall.com/my-biggest-vim-productivity-boost/ देखें


5
imap <A-1> <Esc>:tabn 1<CR>i
imap <A-2> <Esc>:tabn 2<CR>i
imap <A-3> <Esc>:tabn 3<CR>i
imap <A-4> <Esc>:tabn 4<CR>i
imap <A-5> <Esc>:tabn 5<CR>i
imap <A-6> <Esc>:tabn 6<CR>i
imap <A-7> <Esc>:tabn 7<CR>i
imap <A-8> <Esc>:tabn 8<CR>i
imap <A-9> <Esc>:tabn 9<CR>i

map <A-1> :tabn 1<CR>
map <A-2> :tabn 2<CR>
map <A-3> :tabn 3<CR>
map <A-4> :tabn 4<CR>
map <A-5> :tabn 5<CR>
map <A-6> :tabn 6<CR>
map <A-7> :tabn 7<CR>
map <A-8> :tabn 8<CR>
map <A-9> :tabn 9<CR>

1
विम के साथ सबसे दिलचस्प बात यह है कि आप हर दिन कुछ सीख सकते हैं!
ल्यूक एम

सवाल बफ़र्स के बारे में है , टैब के बारे में नहीं ... लेकिन आप :tab sballपहले कर सकते हैं , या उपयोग करने के बजाय :tabnआपको उपयोग करना चाहिए:buffer
पेरा

5

मैं हाल ही में अधिक न्यूनतर गया हूं।

मेरे द्वारा उपयोग किए जाने वाले बफ़र्स को साइकिल से लाने के लिए ]bऔर https://github.com/tpope/vim-unimpaired पर[b

एक खुले बफ़र पर सीधे कूदने के लिए, विम के टैब को पूरा करने के लिए उपयोग करें :b। कुछ अक्षर टैब या दो के साथ किसी भी खुले बफर में जाने के लिए पर्याप्त है।

इसी तरह बफ़र्स खोलने के लिए मैं :eसापेक्ष पथ और टैब पूर्ण के साथ उपयोग करता हूं ।

मैं :lsकभी-कभी यह देखने के लिए भी उपयोग करता हूं कि मेरे पास क्या बफ़र्स हैं (और उनकी संशोधित स्थिति की जांच करने के लिए)।

एक बफर से छुटकारा पाने के :bwलिए मैं बफर को पोंछने के लिए उपयोग करता हूं । मैं आमतौर पर एक अस्थायी विभाजन बनाता हूं और अपने लेआउट को संरक्षित करने के लिए बफ़र्स बदलता हूं, हालांकि तब से:bw यह सक्रिय विंडो को भी बंद कर देता है।

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

IDK, हाल ही में मैंने यांकिंग को भी गिरा दिया (क्योंकि यह खराब हो गया है xp) और रजिस्टरों का उपयोग करना शुरू कर दिया है, और मैंने हाल ही में फैसला किया है f/ tआंदोलनों अब तक की सबसे बड़ी बात है ...


यह सब बहुत अच्छी सलाह है। मैंने मैप <leader>llकिया :ls। इसके अलावा यह सुनिश्चित करने के लिए वास्तव में उपयोगी है कि आपके पास आपके पास set wildmenuहै .vimrcतो आपको एक छोटा मेनू मिलता है जो सभी विकल्पों के साथ आता है:b
icc97

2

उत्कृष्ट बफ़र एक्सप्लोरर , हो सकता है कि इस तरह के मजबूत मांसपेशी स्मृति हो कि मैं अपने आप को चाह रहा हूं कि मैं इसे अन्य अनुप्रयोगों में उपयोग कर सकूं। जब दो से अधिक फ़ाइलों को सक्रिय रूप से संपादित करना मुझे बेहद तेज लगता है।


2

मैंने अपने HTML निर्माण के लिए काफी समय बिताया है। इस HTML के साथ काम करने के लिए :: मेसन प्रोजेक्ट मैं चार साल के लिए रहा हूं, इसलिए मेरे पास टैब और स्प्लिट विंडो का एक अजीब मिश्रण है। आपके देखने के आनंद के लिए:

map ;o :Sex <CR>
map <C-J> <C-W>j
map <C-K> <C-W>k
map <C-l> <C-W>l
map <C-h> <C-W>h
map ;] :tabnext<CR>
map ;[ :tabprev<CR>
map <C-t> :tabe +"browse ."<CR>
map <C-O> :NERDTreeToggle ~/curr/trunk/<CR>

2

मैं tselectbuffer का उपयोग करता हूं । यह वास्तव में तेज़ है और इसके विपरीत bufexplorer आपकी विंडो में जगह नहीं लेता है। इसमें एक वृद्धिशील खोज भी है। मैंने मिनीबुक्सप्लेपर की कोशिश की और मैंने बफर में नेविगेशन को थोड़ा मुश्किल पाया।


सूचक के लिए धन्यवाद, अब मैं दोनों का उपयोग करता हूं। BufExplorer के लिए डिफ़ॉल्ट हैं ,be, ,bs, ,bv, इसलिए मैं TSelectBuffer को मैप किया ,bb
ब्रैडी ट्रेनर

2

मेरे द्वारा उपयोग किए जाने वाले बफ़र्स के बीच सूची और स्विच करने के लिए:

nnoremap <Leader>l :ls<CR>:b<space>

बफ़र्स के बीच स्विच करने के लिए:

map <Leader>n :bn<CR>
map <Leader>p :bp<CR>

2

मैं मैप किया गया है <S-J>और <S-K>करने के लिए :bpऔर :bnहै, हालांकि मैं मानता हूं मैं फ़ाइलों की संख्या के रूप में उपयोग नहीं करते हैं 10 से अधिक है मैं तो मैप किया गया है <C-J>और <C-K>ग्नोम टर्मिनल के पिछले और अगले टैब के लिए, और मैं आमतौर पर से प्रत्येक के लिए vim के 4 उदाहरणों को चलाने 4 विभिन्न परियोजनाएँ जिन पर मैं काम करता हूँ। मैं अब भी वास्तव में अगले और पिछले बफ़र की इच्छा रखता हूं, मैं उन बफ़र्स के इतिहास पर जाऊंगा जिन पर मैं काम कर रहा हूं, न कि वह आदेश बफ़र सूची में।


2

मैं tselectbuffer का उपयोग करता हूं। यह वास्तव में तेज़ है और इसके विपरीत bufexplorer आपकी विंडो में जगह नहीं लेता है। इसकी एक वृद्धिशील खोज भी है। मैंने मिनीब्यूक्सप्लेयर की कोशिश की और मुझे बफर में नेविगेशन थोड़ा मुश्किल लगा।


0

मैं सरल का उपयोग करता हूं: ^ W + w / ^ W + r के साथ और Ctrl + Alt + PgUp / PgDown कुंजी संयोजनों के साथ सारणीबद्ध करें।


1
मुझे इस बात से सहमत होना होगा कि ज़थ्रस ने यहाँ क्या कहा । विम में टैब्स (या उस मामले के लिए टैबर के साथ Emacs) बस सामान्य वर्जित इंटरफेस की तरह काम नहीं करते हैं।
एलेक्सी रोमनोव

0

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

: nnoremap (F5): बफ़र्स (CR): बफर (स्पेस)

vim.wikia.com

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