Dosya geçmişinde güvenilir bir şekilde ileri geri gitmenin bir yolu var mı


15

En son düzenlediğim dosyaya gitmek istiyorum ve MRU eklentilerinin yaptığı gibi.

:bnextve :bprevbazen çalışıyor, ama çoğu zaman ben sadece bazı hatırlıyorum dosya düzenleme hatırlamıyorum ve MRU eklentisi geri düşmek zorunda kaldı.

Bunu düzeltmenin bir yolu var mı?

Ctrl-^son iki dosya arasında geçiş yapar. Daha fazlası arasında gezinmenin en iyi yolu nedir?

Zor olabileceğini anlıyorum ama mevcut :bn :bpdavranışı iyileştirebilecek her şeye katılıyorum . Sık sık gördüğüm tamponlar tamamen yer dışında. Belki de son dosyaları takip edebilen ve eşlemeler oluşturabilen kancalar sağlayabilen bir eklenti var?

Yorumlara yanıt vermek düşüncelerimi biraz temizledi. İstediğim en son tasarruflara göre dosyalar arasında gezinebileceğime inanıyorum. Bu şekilde tarihe geri dönersem, dosyayı kaydedinceye kadar sipariş değişmez ve bu da sonuncu olur ve bundan önce kaydedilen dosyaya bir adım "geri" yapar, yani başladığım dosya.

Ctrl-O Ctrl-IGeçerli arabellek etrafında atlamadan hemen dosyaları değiştiren çifti gibi bir şey . Benzer uve Unetrw cinsinden:

   u    Change to recently-visited directory                 |netrw-u|
   U    Change to subsequently-visited directory             |netrw-U|

"En son düzenlediğim dosya" ile tam anlamıyla "en son düzenlemelerimi yaptığım dosya" mı kastediyorsunuz? Yoksa sadece Vim'de göründüğünüz sonuncuyu mu kastediyorsunuz?
Zengin

2
İkincisi, oraya gelene kadar kişisel olarak eziyorum Ctrl-O(veya bazen Ctrl-T).
Zengin

Evet ben de öyle böyle yapar Ctrl-Ove Ctrl-I. Ancak düzenleme noktaları arasında atlar ve bu akışı keser. Tüm erişim sırasıyla tamponlar arasında ileri geri gitmek istiyorum. Eklentiler en son dosyaların listesini nasıl görüntüler? Bunları dahili olarak takip ediyorlar mı?
firedev

Ctrl-^son iki dosya arasında geçiş yapar. Ancak daha fazlası arasında gezinmenin en iyi yolu nedir?
firedev

Erişimle, açıldıkları, yazıldıkları, odaklanmış bir pencerede yazıldıkları veya değiştirildikleri siparişi kastediyorsanız hala net değil. Ctrl-O/IMRU genellikle global iken, pencereye özgü fwiw'dir. En son erişilen siparişi istiyorsanız, bir kez geri atlar atmaz, listenin sırası değişir ve işleri daha da karmaşık hale getirir.
Matt Boehm

Yanıtlar:


7

Arabellek değişene kadar CTRL-O'ya tekrar tekrar vurmak için küçük bir işlev yazdım.

Burada bulabilirsiniz . CTRL-U ile eşledim, ancak isterseniz CTRL-O'yu geçersiz kılabilirsiniz.

function! GoBackToRecentBuffer()
  let startName = bufname('%')
  while 1
    exe "normal! \<c-o>"
    let nowName = bufname('%')
    if nowName != startName
      break
    endif
  endwhile
endfunction

nnoremap <silent> <C-U> :call GoBackToRecentBuffer()<Enter>

Muhtemelen için benzer bir şey yazabilirsiniz <C-I>.

Sorunlar:

  • Önceden bir arabellek yoksa, CTRL-C'ye basıncaya kadar sessizce döngü yapmaya devam eder!

İlişkili:

  • :jumps CTRL-O'nun geri adım atacağı geçmiş yerleri listeler.
  • Vim'in varsayılan CTRL-T, daha kaba taneli olduğu için CTRL-O'yu ezmek için iyi bir alternatiftir: yalnızca etiket atlamalarında geri gider.

Vim, CTRL-^ 'ye maruz kalan sadece bir seviye MRU dosya geçmişi sunuyor gibi görünüyor. Bununla birlikte :kwbd, birkaç tamponu kapatmak için kullanırken , Vim'in önceki tamponlara beklenen ters-tarihsel sırayla geri adım attığını fark ettim . Belki de Vim'in bizimle paylaşmadığı bir MRU listesi var veya belki de CTRL-O konum geçmişine ( :jumps) dayanarak hangi tamponun geri düşeceğini seçiyor .
joeytwiddle

1
Alternatif olarak, Zautocmd InsertLeave * normal mZ genel işaretindeki son düzenlenen dosyayı hatırlar . İle geri dönebilirsiniz . // Var ama yine de Ctrl-U daha sık kullanma eğilimindeyim. g'Znmap <C-y> g'Z
joeytwiddle

6

:lsTüm arabellekleri göstermek için kullanabilirsiniz . Örneğin:

:ls
  1      "vim.markdown"                 line 160
  2      "ext.markdown"                 line 0
  3 #    "~/to"                         line 1
  4 %a   "~/TODO"                       line 68

Arabelleğe geri dönmek için ext.markdown, kullanın :e +Nbuf, Nilk sütundaki tampon numarası. Örneğin: :e +2buf.

Daha etkileşimli bir deneyim için basit bir işlev oluşturabilirsiniz:

fun! ChooseBuf()
    redir => buffers
        silent ls
    redir end

    echo l:buffers
    let l:choice = input('Which one: ')
    execute ':edit +' . l:choice . 'buf'
endfun
command! ChooseBuf call ChooseBuf()
nnoremap <Leader>b :call ChooseBuf()<CR>

Kullandıktan sonra :ChooseBufveya <Leader>bdüzenlemek istediğiniz arabellek numarasını yazabilirsiniz.

Bu sipariş "en son açılan" olduğu için, oldukça "en son kullanılan" değildir (muhtemelen de neden beklediğiniz gibi :bnext/ :bprevçalışmıyor).


4

<C-6>İhtiyacınız olan şey, sizi mevcut olandan önce açmış olduğunuz bir önceki tampona geri götürür. Ayrıca :bprevve :bnextaynı için kullanabilirsiniz.


<C-6>fena değil ama iki tampon geri atlamak için kullanamam. bprevve bnextzıplama sırasına göre değil.
Praxeolitic

Evet, tarihin derinliklerine inmenin iyi bir yerel yolu olduğunu düşünmüyorum. Bazı MRU eklentilerini kullanmanız gerekir, hatta CtrlP'de bile var, diğerleri olmalı
Dhruva Sagar

2
Not: değil <C-6>, değil <C-^>. Birçok terminal emülatöründe hiçbir ayrım yoktur, bazılarında (OS X ile birlikte gelenler dahil) vardır. İkinci durumda, Shiftanahtarın kullanılması gerekir (Qwerty düzenini varsayarak).
tommcdo

@tommcdo ilginç, ben osx üzerinde, ama terminal.app yerine iterm kullanın, benim için de aynı şekilde çalışıyor. Üstünde Shift tuşunu kullanmak bir serseri olurdu.
Dhruva Sagar

Düşünmeye gel, sadece işletim sistemimin bu anahtar bağlamayı tutuyor ve Vim'e yaymıyor olabilir. İşletim sistemim durdurulmalı!
tommcdo

2

:oldfilesDüzenlediğiniz dosyaların bir listesini almak için de kullanabilirsiniz .

Listede dosya adlarıyla ilişkilendirilmiş sayılar olacaktır. Bir dosya seçin, numarayı not edin (14 diyelim) ve ile açın:edit #<14

Ayrıca, o dosya üzerinde başka komutlar çalıştırabilir veya bir komuta birden çok dosyayı aynı anda iletebilirsiniz. Bu konuda daha fazla bilgi BURAYA


1
Bağlantıdaki diğer cevap bana öğretti:bro[wse] ol[dfiles][!]
Steve
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.