2010-01-24 11 views
5

Bir dosyayı açmak için vi'yi kullandığımda * .c, imlecin otomatik olarak "ana" dizgisine gitmesini isterim . "Ana" yoksa, imlecin hata istemi olmadan "void" e gitmesini istiyorum. Benim .vimrc yılındaVim: Bir kaynak dosyada imlecin bir hata dosyasına gönderilmemesi durumunda hata mesajı olmadan hareket ettirilmesi

Ben

:autocmd BufRead *.c 1;/main 

belirledik ama bu benim tüm gereksinimlerini uygulayamaz. Özellikle, bazı açık C kaynak dosyasında "ana" yoksa, vi kaldırmak istediğim davranış olan "Hata, ana .... 'yi bulamaz."

<silent> veya :silent satırını autocmd satırına eklemeyi de denedim, ancak istediğimi yapmıyor. Biri bana yardım edebilir mi? Teşekkürler.

cevap

0

/Ana \ |^deneyin, ancak ilk satırda dosyada imleci değilse - istediğiniz gibi değil.

3

Yalnızca normal iletileri değil, hatalarını da komut engellemeyi çalıştıran :silent!'u kullanın. Bu arada

, sana BufReadPost (bir tampon yüklenmiş olacaktır sonra komut çalıştırmak için) ve bir bütün kelime olarak main aramak kullanılması tavsiye edilir.

Yani bu deneyin:

:autocmd BufReadPost *.c :silent! 1;/\<main\> 
+0

teşekkür ederiz. If-else yapısı gibi vimrc'de yapı kontrolünün nasıl uygulanacağını söyleyebilir misiniz? Örneğin, "ana" varsa, imleç "ana" ye gider ve "ana" olmazsa, imleç "geçersiz" olur. – fortunetell

+0

/Diğer yapı karmaşık değilse, '' help if '' bölümüne bakın. Arama yapmak için, olayın bulunmadığı veya sıfır olduğu satır numarasını döndüren 'arama 'işlevini kullanabilirsiniz (bir hata yaratmadan). Örneğin, ': eğer arama ('\ ') == 0 | arama araması ('\ ') | endif' Bu komut, "ana" kelimesinin geçerli imleç konumundan başlayarak bulunup bulunamayacağını ve "void" –

+0

için arama işlevini çağırıp aramadığını (sıfır döndürdüğünü) test eder, böylece autocmd'nizi şu şekilde bir şeye dönüştürebilirsiniz: autocmd BufReadPost * .c: sessiz! 1 | eğer arama ('\ ') == 0 | arama araması ('\ ') | endif' Bir satırdaki birkaç ifadenin '|' ile ayrılması gerektiğini unutmayın. Ayrıca, Vim komutunun dışında işlev çağırmak için ('if',' while', 'let', vb.)' Call' kullanmak gereklidir. –

İlgili konular