2014-12-26 25 views
5

Vimscript'i öğrenmeye çalışıyorum. Ben "sert bir şekilde vimscript öğrenmek' de biraz okudum, ama benim sorunun cevabını yoktur:? Bir arama vimscript içinde başarılı olup olmadığını nasıl anlayabilirimVimscript'de bir aramanın başarılı olup olmadığını nasıl anlarım?

iki vaka hve:

: endif

:./searchtarget bar yok başarılı olursa: Mevcut hat üzerinde (foo di yapmak varsa. endif

cevap

6

Bağlamlara bağlı olarak çeşitli yaklaşımlar vardır.

: Sen @ Kent'in Yanıt başına kadar, search() kullanabilirsiniz Bu {stopline} argüman destekler, geçerli hat ötesinde önlemek için

endif. Varsa akım hattında (foo Eğer imleci konumlandırmak zorunda kalacak, böylece (sen line('.') aracılığıyla geçebildiği). Ama sadece (veya arkaya) tek yönde arama yapar.

Yani bu sesler if getline('.') =~ '(' daha iyi bir testtir gibi. Bu bir does Geçerli satırınile düzenli ifade karşılaştırması. Bunun yerine match()'u da kullanabilirsiniz (tüm API belgeleri ve örnekler BTW için :help aracılığıyla herhangi bir fonksiyona bakın) veya regexp olmayan bir stridx() (daha hızlı olabilir, ancak daha az okunabilir).

:/searchtarget çubuğunu yapmak başarılı olursa: Yine

endif bu /search gibi bir maç konuna search() için bir kullanım, gibi geliyor. Ancak, ikincisini (:normal ile) kullanabilir ve komutun öncesinde ve sonrasında imleç konumlarını (getpos('.') aracılığıyla elde edilen) karşılaştırarak bir atlama olup olmadığını kontrol edebilirsiniz.

+0

:: normal/ 'ile arama yaptıktan sonra imleç konumunun değişip değişmediğini kontrol etmekle ilgili bir uyarı: Dosyada yalnızca bir eşleşme varsa ve aramanın başında imleç konumunda olduğunda arama, dosyanın sonunu kaydırır (seçeneğin açık olduğunu varsayar) ve geçerli imleç konumuna gider. Bu durumda, arama gerçekte başarılı olacaktır, ancak değiştirilmiş bir imleç pozisyonunun kontrol edilmesi, bunun olmadığını (yanlış) gösterecektir. –

2

Vim işlevi açıklamayı okumak için search() fonksiyon :h search( sahiptir

Bir eşleşme bulunursa, func satır numarasını döndürür, aksi halde 0'u döndürür. Mantığınızı, işlevin dönüş değerini temel alarak yapabilirsiniz.

Geçerli satırdaki bazı kalıpları kontrol etmek için search() işlevini de kullanabilirsiniz, ayrıca 2 satırdan fazla sonuç listesi olup olmadığını görmek için geçerli satırın metnini split() yapabilirsiniz.

İlgili konular