2011-07-13 18 views
7

Çıkışı cscope'tan Vim quickfix penceresine yeniden yönlendirmek istiyorum. Tutkal parçası yeterince kolay, ancak şu anda hata formunda kaldım. Bu fan() içinde gelirVim quickfix penceresinde cscope çıkışı nasıl ayarlanır?

Format: "filename scope linenumber sourceline" 
Example: "abc.cpp foo 25 bar()" 

abc.cpp içinde hat 25 ile çubuk için bir çağrı(), orada: Burada cscope çıkışından bir örnek (cscope -L 1 bar) bulunuyor.

efm = %f\ %*[^\ ]\ %l\ %m çalışır ancak kapsam bilgileri kaybolur. Örneğin:

Input: "abc.cpp foo 25 bar()" becomes 
Output: "abc.cpp |25| bar() inside foo()" 

o sadece errorformat ile bunu yapmak mümkün mü yoksa bir senaryo yazmaya gerek var mı:

Input: "abc.cpp foo 25 bar()" becomes 
Output: "abc.cpp |25| bar()" 

İstediğim böyle QuickFix pencerede kapsamını, eklemektir Vim'e beslemeden önce çıkışı manipüle etmek için?

+0

Bu, belki de buraya koyduğum yararlı olabilir: Bir programın çıktısını Vim quickfix ile bağlayabilirsiniz. ': Cex'. Örneğin: cex sistemi ("cscope -L -1") ("")) '. Şahsen C++ kodunun statik analizi için cppcheck ve vera ++ ile kullanıyorum. –

cevap

8

errorformat ile uğraşmak yerine, cscopequickfix'u ayarlayın ve normal :cscope komutlarını kullanın. Örneğin. (Dan vim yardım)

:set cscopequickfix=s-,c-,d-,i-,t-,e- 

Düzenleme

Ayrıca

sed -e 's/^\([^ ]\+\) \([^ ]\+\) \([^ ]\+\) \(.*\)$/\1 \3 \4 inside \2/' 

Mesajınızı filtrelemek için ayarlayın alanları yeniden sıralamak aşağıdaki ardından efm

kullanmak gibi bir filtre kullanabilirsiniz
errorformat=%f\ %l\ %m 
+0

Teşekkürler, daha önce cscopequickfix'i bilmiyordum. Bu iyi bir btw çalışıyor gibi görünüyor, bu yüzden size karşı. Ancak, bu yine de hata formatı ile çıktı eşleştirmesi hakkındaki soruma cevap vermiyor. Yerleşik olmayan diğer programların çıkışını bağlamaya yardımcı olabilir. –

+0

@ThanhDK: İstediğiniz şeyi yapmak için küçük bir filtre komut dosyası ekledim, vim yardımı, iletilerin cscopequifix'i kullanması için – Hasturkun

+1

biçim dizgesine uymazsa yapmanızı önerir, bu da quickfix modülünü devre dışı bırakmanız gerekir. Başka zamandan tasarruf ederek yanıtınızı plz'e ekleyin. – MaikoID