Vim'de tamponlar arasında nasıl geçiş yapmayı tercih edersiniz?


Yanıtlar:


23

Wincent Colaiuta'nın Command-T vim eklentisini birkaç aydır kullanıyorum. Wincent, C de hızlı olması gereken kısımlarını yazdı ve ben de öyle olduğunu söylemeliyim! Ve bence dosya kalıbı eşleştirme mantığı Textmate'in Command-T'sinden bile daha iyi. Ekran yayınına göz atın .

VIM için Command-T eklentisi, dosyaları minimum sayıda tuş vuruşuyla açmak için son derece hızlı, sezgisel bir mekanizma sağlar. TextMate'te Command-T'ye bağlı "Dosyaya Git" penceresinden esinlendiği için "Command-T" olarak adlandırılmıştır.

Dosyalar, yollarında görünen karakterler yazılarak seçilir ve belirli yerlerde görünen karakterlere (örneğin, yol ayırıcıdan hemen sonra) daha fazla ağırlık verilmesi gerektiğini bilen bir algoritma tarafından sıralanır.

Daha kolay arabellek değiştirme birçok yararlı ipucu içerir. Aşağıdakileri arabellek adı otomatik tamamlama yapan, en kullanışlı arabellek değiştirme komutlarını <Leader> ve sol taraftaki ana satır tuşlarına eşleyen ve durum satırında geçerli arabellek numarasını gösteren .vimrc dosyama uyarladım. :

"" 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

Ayrıca , listelenen her arabellek için kendi yatay bölünmüş tepesinde kompakt bir liste sağlayan MiniBufExplorer'ı da kullanıyorum .


73

Eskiden, ilgili dosya gruplarını her örnekte sekme olarak tutarak sekmelerin ve birden çok gvim örneğinin birleşimini kullanırdım. Bir örnekte çok fazla sekme ile karşılaşmadığım sürece, sekme çubuğu size bir bakışta düzenlemekte olduğunuz her dosyanın adını gösterir.

Sonra Jamis Buck'ın TextMate'ten vim'e nasıl geçtiğini anlatan bir gönderiyi okudum ve bazı harika numaralar öğrendim:

  • Geçerli pencereyi bölmek için Ctrl-w s ve Ctrl-w v
  • Aynı pencerede iki arabellek arasında geçiş yapmak için Ctrl-6.
  • mevcut dizininizdeki dosyaları veya şu anda açmış olduğunuz arabellekleri otomatik olarak aramanızı sağlayan harika fuzzyfinder.vim
  • Jamis'in kendi fuzzy_file_finder ve fuzzyfinder_textmate'i , fuzzyfinder'ın TextMate'teki benzer bir özellik gibi davranmak için çalışma şeklini biraz değiştiriyor (anlayabildiğim kadarıyla, fark, sadece baştan değil, dosya adındaki herhangi bir yerle eşleşmesidir). Nasıl çalıştığını görmek için bu videoyu izleyin .

Şimdi sadece bir gvim örneğim var, büyütülmüş ve birden çok pencereye bölerek aynı anda birkaç dosyayı görebilirim. Ctrl-F'yi fuzzyfinder_textmate'e bağladım, bu yüzden şimdi Ctrl-F yazarsam (söylersem) mod/usobapp / models / user_observer.rb'yi açar. Artık neredeyse hiç sekme ile uğraşmıyorum.

2010/08/07 Güncellemesi

Fuzzyfinder_textmate harika olmaya devam ederken, Casey'nin yorumlarda belirttiği gibi, artık korunmuyor. Ayrıca, büyük projelerle (çok sayıda dizin veya dosya) çalışırken, o (ve / veya fuzzyfinder.vim) biraz yavaş ve dengesiz oluyor, bu yüzden bir alternatif arıyorum.

Neyse ki, şeklinde çok güzel bir alternatif gibi görünüyor Wincent Colaiuta 'ın Command-T eklentisi . Bu, fuzzyfinder_textmate'e çok benzer (biraz daha iyi değilse de) davranışa sahiptir, ancak fark edilir şekilde daha hızlıdır; ayrıca bulunan dosyayı bölünmüş veya dikey bölünmüş olarak açabilmek gibi güzel özelliklere sahiptir. David Rivers'a işaret ettiği için teşekkürler (ve olumlu oylar!).


Evet, fuzzyfinder istediğim şeye çok yakın.
Alexey Romanov

Jamis'in fuzzyfinder_textmate'i vim'i tamamlar. Gerçekten temel bir özellik haline gelmeli!
csexton

Görünüşe göre Jami bu proje üzerinde çalışmayı bıraktı. Belki orijinal yazar bu özellikleri çekecek? weblog.jamisbuck.org/2009/1/28/…
cmcginty

Sam, bana verdiğin eşyalar için teşekkürler (doğum günümde!): D
David Rivers

14
Fuzzyfinder uygulayan ctrlp vim eklentisini deneyin ( kien.github.com/ctrlp.vim ), ancak bir ton daha kullanışlı özellik ile :)
Philip

33

Temelleri kullanıyorum - ' :ls' + ' :bn' / ' :bp' + ' :b <part-of-name>'


8
:-) Aynı cümlede "basit" ve "': ls' + ': bn' / ': bp' + ': b <bölüm-adı>'" göreceğimi hiç düşünmemiştim.
paxdiablo

16
Pax, hala göremiyorum. :-)
csexton

Bu artı :map <c-n> :bn<cr>ve :map <c-p> :bp<cr>yana C-nve C-pyazmak için hızlı ve tamponların arasına bisiklet izin art arda bunları basarsanız. (Ben kendi orijinal amaçla hiç kullanmadım.) O ile tarayıcı sekmeleri arasında bisiklet gibi C-PgUpve C-PgDnveya tarayıcı vardır kısayol neyse.
Tobia

Ctrl + N, diğer düzenleyicilerin çoğunda 'Yeni Dosya' için standarttır ve Ctrl + P yapıştırma komutudur, bu nedenle çoğu insan için bunlar gerçekten kafa karıştırıcı olacaktır. Tim Pope'un vim-unpaired size [bönceki tampon ve bir ]bsonraki tampon için verir. Ayrıca ], sonraki ve [önceki için kavramını kullanan bir sürü başka güzellik .
icc97

31

Pencereyi bölmek için "ctrl-w s" ve "ctlr-w v" yi seviyorum. Ardından, bölünmüş pencereler arasında hareket etmek için ctrl tuşunu basılı tutarak hareket tuşlarını (h, j, k, l) eşlerim:

" 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>

Elimi ok tuşlarına doğru hareket ettirmek can sıkıcı.

Daha sonra, mevcut penceredeki tamponlar arasında geçiş yapmak için ctlr-tab kurdum (diğer birçok ortam gibi):

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

Bunlar, son birkaç yıldır benim için oldukça iyi çalıştı, ancak vim'in her zaman bildiğinden daha fazla sırrı var.


3
"Alternatif dosyaya geç" yorumunuz yanıltıcıdır çünkü Vim zaten bir alternatif dosyaya sahiptir, o daha önce bulunduğunuz dosyadır ve ctrl-6'yı kullanarak mevcut (%) ve alternatif (#) dosyaları kolayca değiştirebilirsiniz.
graywh

10
Ayrıca, hjkl ile <Cw> pencereleri değiştirir - ok tuşlarına gerek yoktur.
graywh

4
<CS-Tab> RSI istiyor. <SJ> ile :bpve <SK> ile :bn
eşledim

3
<SJ> 'yi yeniden eşleştirmek, yaygın olarak kullanıldığı için (satırları birleştirmek için) normal modda kötü bir seçim gibi görünüyor.
Michael Percy

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

ve kimse ctrlp.vim eklentisinden bahsetmedi . Bu eklentiyi kullanarak tamponu isme göre arayabilirsiniz.


Bu haritalamayı seviyorum! Akıllı ve esnek.
ivan


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
Vim ile ilgili en ilginç şey, her gün bir şeyler öğrenebilmenizdir!
Luc M

Soru sekmelerle değil tamponlarla ilgili ... ama önce yapabilirsin , ya da kullanmak yerine kullanmalısın:tab sball:tabn:buffer
pera

5

Son zamanlarda daha minimalist oldum.

Kullandığım ]bve [bbozulmamış arabellekleri değiştirmek için : https://github.com/tpope/vim-unimpaired

Doğrudan açık bir tampona atlamak için sadece Vim'in sekme tamamlamasını kullanın :b. Bir veya iki sekme içeren herhangi bir açık arabelleğe ulaşmak için birkaç harf yeterlidir.

Açık tamponlara benzer şekilde :e, göreli yollar ve sekme tamamlandı ile kullanıyorum.

Ayrıca, :lshangi arabellekleri açtığımı görmek için (ve değiştirilmiş durumlarını kontrol etmek için) ara sıra kullanıyorum.

Bir arabellekten kurtulmak için arabelleği :bwsilmek için kullanırım . Düzenimi korumak için genellikle geçici bir bölme yapar ve tamponları değiştiririm, ancak :bwetkin pencereyi de kapatır.

Denediğim tüm minibuf şeyler beni sinirlendirdi ve bazı akıllı eşleştirmelerin benim için rastgele dosyalar açmasını istemiyorum. Gerçekten bir şeye göz atmam gerekirse, NERDtree ( :e .) kullanıyorum.

IDK, Son zamanlarda Yankring'i de düşürdüm (çünkü hata yapıyor xp) ve kayıtları kullanmaya başladım ve son zamanlarda f/ thareketlerinin şimdiye kadarki en büyük şey olduğuna karar verdim ...


Bunların hepsi harika bir tavsiye. Ben eşlenen <leader>lliçin :ls. Ayrıca bulunmadığından emin olmak için gerçekten yararlıdır set wildmenusenin içinde .vimrciçin tüm alternatifleri çıkageldi olarak o zaman olsun küçük bir menü:b
icc97

2

Mükemmel Buffer Explorer , be o kadar güçlü bir kas hafızası haline geldi ki, kendimi başka uygulamalarda kullanabilmeyi dileyerek buldum. İkiden fazla dosyayı aktif olarak düzenlerken son derece hızlı buluyorum.


2

Dört yıldır üzerinde çalıştığım bu HTML :: Mason projesiyle çalışmak için .vimrc'mi oluşturmak için epey bir zaman harcadım, bu yüzden tuhaf bir sekme ve bölünmüş pencereler karışımı var. İzleme keyfiniz için:

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

Kullandığım tselectbuffer . Gerçekten hızlıdır ve bufexplorer'ın aksine pencerenizde yer kaplamaz. Ayrıca artımlı bir arama var. Minibufexplorer'ı denedim ve arabellekte gezinmeyi biraz zor buldum.


İşaretçi için teşekkürler, şimdi ikisini de kullanıyorum. BufExplorer için varsayılan vardır ,be, ,bs, ,bv, bu yüzden hiç TSelectBuffer eşleştirilmiş ,bb.
Brady Trainor

2

Kullandığım arabellekleri listelemek ve aralarında geçiş yapmak için:

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

Arabellekler arasında geçiş yapmak için:

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

2

Ben eşlenen <S-J>ve <S-K>etmek :bpve :bnben dosya sayısı olarak kullanmayın itiraf rağmen büyük 10 daha Sonra eşlenen <C-J>ve <C-K>Gnome Terminal önceki ve sonraki sekmelerin ve genellikle her biri için vim 4 örneklerini çalıştırmak üzerinde çalıştığım 4 farklı proje. Hala bir sonraki ve önceki tamponun, tampon listesine değil, üzerinde çalıştığım tamponların geçmişine gitmesini diliyorum.


2

Tselectbuffer kullanıyorum. Gerçekten hızlıdır ve bufexplorer'ın aksine pencerenizde yer kaplamaz. Ayrıca artımlı bir arama var. Minibufexplorer'ı denedim ve arabellekte gezinmeyi biraz zor buldum.


0

basit: vsplit ile ^ W + w / ^ W + r ve: Ctrl + Alt + PgUp / PgDown tuş kombinasyonları ile tabnew kullanıyorum.


1
Ne ile anlaşmak zorunda Zathrus söyledi buraya . Vim'deki sekmeler (veya bu konuda TabBar'lı Emacs) normal sekmeli arabirimlerdeki gibi çalışmaz.
Alexey Romanov

0

Bir Vim oturumunda açık birkaç arabellek olduğunda, arabellekleri ve ilgili arabellek numaralarını takip etmek zorlaşabilir. Durum buysa, basit bir harita kullanılarak farklı bir dosyaya geçiş yapmak daha kolay olabilir:

: nnoremap (F5): tamponlar (CR): tampon (Boşluk)

vim.wikia.com

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.