Fonksiyon çağrısına nasıl atlanır?


14

Bir etiket dosyası oluşturduktan sonra exuberant-ctags, bir işlev çağrısından bildirimine <C-]>oldukça uygun olana atlayabilirim .

Benim sorum başka türlü nasıl yapılır? İmlecim bir işlevin tanımının üzerindeyken, işlevin çağrıldığı satırlara nasıl gidebilirim?

Ctags tarafından oluşturulan dosyaya baktığımda, çağrıların değil, tanımın yeri ile ilgili bilgileri görüyorum, bu yapamam, akıllı bir geçici çözüm olarak Vim veya bir şey kullanmam gerektiği anlamına mı geliyor? başka exuberant-ctags?


Ack veya Ag da çalışır ve bu komut satırı araçları için eklenti sarmalayıcılarını kolayca bulabilirsiniz. Örneğin, github.com/mileszs/ack.vim ve github.com/rking/ag.vim
dash-tom-bang

Yanıtlar:


11

İle işlev çağrılarına atlayamazsınız ctags. C / C ++ ve Java cscopeiçin Vim ile güzel bir şekilde bütünleşir (bkz. :help cscope). Diğer dillerde, cscopeuyumlu veritabanları üreten / dışa aktaran bir araç bulabilirsiniz ( hscopeHaskell ve starscopeRuby, Go ve JavaScript için fi ). Ayrıca kullanabilirsiniz cscopeile GNU küresel işaret ederek, veritabanları cscopeprgiçin gtags-cscope.

Bir yan notta: zaman zaman Engrish kullanımını şaşırtmazsanız ;) muhtemelen bunun yerine evrensel ctags kullanmak istersiniz exuberant-ctags. İkincisi yıllardır güncellenmedi. Birincisi aktif olarak korunan bir çatal.


Cscope, C / C ++ ve Java dışındaki dilleri destekliyor mu?
edi9999

@ edi9999 cscope, C / C ++, Lex ve Yacc'ı destekler. Java desteği marjinal olarak faydalıdır. (Eski stil) PHP ve JavaScript için GNU'dan yardımcı program globalaracılığıyla destek alabilirsiniz gtags-cscope. Yukarıda da söylediğim gibi, cscopeuyumlu veritabanlarını dışa aktarabilen başka dizinleyiciler de vardır .
Sato Katsura

8

Bunu ctags ile yapamazsın.

Cscope (hatta kendi yardım bölümüne sahip :):help cscope veya global gibi daha iyi bir alternatif deneyin .


Cscope, C / C ++ ve Java dışındaki dilleri destekliyor mu?
edi9999

Evet, en azından PHP ve JavaScript.
romainl

1
@romainl Hayır, cscopekendisi ne PHP ne de JavaScript'i desteklemez. Bununla birlikte, PHP ve JavaScript dosyalarını GNU ile dizine ekleyebilir global, ardından gtags-cscopeortaya çıkan gtagsdosyayı kullanmak için çalıştırabilirsiniz cscope.
Sato Katsura

@SatoKatsura, evet, cscope JavaScript'i (ve görünüşe göre CSS) destekler.
romainl

2
Sen bakarak düşünmelisiniz @romainl cscopebireyin kaynaklarının yerine hızlı deneylere dayanarak spekülasyon. cscopeoldukça rahat bir C ayrıştırıcıya sahiptir. Tüm sahip olduğu ve yaptığı her şey bu. Bu ayrıştırıcı ile uygun "destek" değerleri için birçok dili "destekler". Yapılar aşağı yukarı C'ye benzediği sürece tanınırlar. Bu yüzden fi Java sınıfları ve daha yeni PHP yapıları tanınmaz. Fi'yi yeni diller eklemeye izin veren starscope ile karşılaştırın .
Sato Katsura

8

Projenizdeki tüm dosyaları aramak için Vim'in grep komutunu kullanabilirsiniz:

:grep! "\<<cword>\>" . -r
:copen

Bunu bir tuş takımına koyalım:

nnoremap <F4> :grep! "\<<cword>\>" . -r<CR>:copen<CR>

Ben büyük bir yabancı kod temeli keşfetmek zaman bu tek anahtar proje çapında arama paha biçilmez buluyorum.

\<ve \>bir kelimenin başlangıcını ve sonunu gösteren regexp dizileridir, böylece kısmi eşleşmeler elde edemezsiniz. ( -wGrep seçeneği bunu başarmanın başka bir yolu olabilir.)

Bununla birlikte, bu akıllıca olmayan bir aramadır , bu nedenle aynı kelime ilgisiz bağlamlarda görünüyorsa yanlış pozitifler üretebilir.


Gerçekten, grep.vim eklentisinin kendi değiştirilmiş sürümünü kullanıyorum. Bu biraz daha dostça:

  • Arama desenini ve ayrıca grep komut satırını ( src/ lib/bunun yerine belirli klasörleri hedefleyebilmenizi sağlar .) düzenlemenizi sağlar ve değişiklikleri hatırlar.
  • Google'ın csearch'ü için destek ekledim . Bu, grep'ten çok daha hızlı olabilir, çünkü her seferinde her dosyayı taramak yerine bir kelime dizini oluşturur. Özellikle, csearch biraz farklı bir normal ifade standardı kullanır, bu nedenle ve \byerine kullanılmalıdır .\<\>

Yapılandırıyorum ve bunun gibi bazı standart dosyaları hariç tutuyorum .

Hızlı erişim için iki tuş takımı oluşturuyorum . F3komut satırını düzenlememe izin verir F4, önceden yapılandırılmış komut satırını fazladan tuşa basmadan kullanır. Mekanizma oldukça çirkin ve biraz temizlik yapabilirdi, ama bana iyi hizmet etti.

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.