Vim'deki dosya dizisinde gezinme

Kod değiştirirken, genellikle en basit şeyleri değiştirmek için düzinelerce dosyadan geçmem gerekiyor. Örneğin, pretty_print fonksiyonum olduğunu ve deve durumunda prettyPrint olarak değiştirdiğimi varsayalım. Şimdi apple1.js dosyalarından apple99.js 'ye ve muhtemelen oradaki birkaç orange.js dosyasına gitmek istiyorum. Bunu Vim'de yapmanın hızlı bir yolu var mı?

NOT: Bu otomatikleştirebileceğim bir şey değil, aslında kodun kendime girip değiştirmem gerekiyor.

I know I can do :b , but, although it supports name completion/pattern matching, I don't think the pattern is carried over.

Örneğin, yaparsam

:b apple*.js

ve ben sekme vururum, ben alırım

:b apple1.js

ancak bu fonksiyonu tekrar ziyaret edersem (: + upArrow veya q: tuşlarına basarak), eğer sekmeye bastığımda

:b apple2.js

İstediğim şey gibi bir şey belirtmek

:b apple*.js

dosyayı düzenleyin, sonra : w yazdığımda, sonraki arabelleğe geçer. Vim'de kalmayı tercih ederim, dışarı çıkmak istemiyorum, vim apple * .js yazıp Vim'e geri dönüp : x komutunu kullanıyorum. Bunun işe yaradığını anlıyorum, ama yine de istediğim diğer dosyalara ihtiyacım var, örneğin etiketler arasında atlama.

3

3 cevap

bununla başla:

:set hidden "required because `argdo` won't load next argument into current window
            "if there is a modified buffer displayed inside this window
:args apple*.js
:argdo %s/\/prettyPrint/g
:rewind " if you want to proofread all files then use :next and :prev
:wa

Dosyalarınızı daha iyi uyarın ve böyle bir değişiklikten sonra bir değişiklik yapın.

1
katma

Wikia'nın BufSel işlevi ihtiyaçlarınızı karşılar mı?

arabelleğini listeden seçmeyi tercih ederseniz   kısmi eşleşmeler aşağıdaki işlev kullanılabilir. O atlayacak   tek bir eşleşme bulunursa eşleşen arabellek veya çok fazla varsa   eşleşir, eşleşen arabelleklerin listesini yazdırır.   komut satırı alanı ve eşleşen arabelleklerden birini seçmenizi sağlar   arabellek numarasıyla.

function! BufSel(pattern)
  let bufcount = bufnr("$")
  let currbufnr = 1
  let nummatches = 0
  let firstmatchingbufnr = 0
  while currbufnr <= bufcount
    if(bufexists(currbufnr))
      let currbufname = bufname(currbufnr)
      if(match(currbufname, a:pattern) > -1)
        echo currbufnr . ": ". bufname(currbufnr)
        let nummatches += 1
        let firstmatchingbufnr = currbufnr
      endif
    endif
    let currbufnr = currbufnr + 1
  endwhile
  if(nummatches == 1)
    execute ":buffer ". firstmatchingbufnr
  elseif(nummatches > 1)
    let desiredbufnr = input("Enter buffer number: ")
    if(strlen(desiredbufnr) != 0)
      execute ":buffer ". desiredbufnr
    endif
  else
    echo "No matching buffers"
  endif
endfunction

"Bind the BufSel() function to a user-command
command! -nargs=1 Bs :call BufSel("")
1
katma
Aslında BufSel'i kurdum ve ilk başta kullandım ama sonra pes ettim, burada istediğim şeyi yapıp yapmadığını merak ediyorum. Her durumda, : b üzerinde bir gelişme değildi ve sadece vimi kapatmak çok daha kolay oldu ve sadece düzenlemek istediğim dosyalar ile yeniden başlattı.
katma yazar puk, kaynak

Probably the most suitable solution for you in this case would be to use the grep capabilities integrated in Vim. The following command performs a search for the pattern \ in files matching the wildcard apple*.js, and stores locations of the pattern's occurrences in the quickfix list allowing to easily jump through all the matches.

:vimgrep /\/ apple*.js

Arama ile ilgili olarak quickfix listesine daha ayrıntılı bilgi için dosyalarda bakın. cevabım " Bir dizi dosya yükleniyor cmd-exec aracılığıyla Vim tamponlarına ".

Belirli bir alana uyan dosyaların listesini açmak isterseniz joker, bu dosyaların isimlerini argüman listesine yükle

:args apple*.js

ve sonra her zamanki gibi : n ve : N kullanarak aralarında gezinin.

1
katma