2014-11-05 16 views
7

Vim sözdizimi vurgulamasında ilginç bir kenar durumu keşfettim. Bir şirket Makefile'dan aşağıdaki pasajı düşünün:Vim: Sözdizimini Yeniden Başlat Arbitrary Line'dan Vurgulama

LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT)) 

yukarıdaki satır sadece belirli bir LDSCRIPT gelen çift tırnak kaldırır. Sözdizimsel olarak yanlış bir şey yok; make beklendiği gibi ve sorunsuz çalışır.

Sorun

Yukarıdaki satır tek çift tırnak içerdiğinden vurgulama kuralları yanlışlıkla Makefile vücudun geri kalanı böyle gibi metin ve renkleri alıntı olduğunu düşünüyorum. Basit Makefiller için bu bir rahatsızlıktır; 1KLOC + Makefiles için, bu gerçek bir güçlük haline gelir (özellikle bu ön işlem dosyanın üst kısmına yakın olduğu için).

Soru

ya devre dışı sözdizimi bazı verilen düzenli ifadeyi (örn. subst[ \t]*['"],.*) ya da benzer bir şey eşleşen hatlar dayalı vurgulayarak için herhangi bir yolu var mı? Başarısız olan, Vim'in yukarıda belirtilenleri koruyarak bazı keyfi satırlarda vurgulamayı yeniden başlatmanın bir yolu var mı?

Mümkünse Makefile'de yapılan düzenlemelerden kaçınmak isterim, çünkü bu betik birkaç bölüm boyunca paylaşılmaktadır.

Bunu başarmak için vimscript yazmayı/değiştirmeyi tercih ediyorum, ancak bunu daha önce yapmadım (herhangi bir makul dereceye kadar). Herhangi bir ipucu, işaretçi veya diğer yararlı ipuçları çok takdir edilecektir. Ben yukarıda

:syntax sync minlines=1 
:syntax sync fromstart 
:syntax sync clear 

Hiçbiri çalıştı gelmiş ne

düzenleyicisinde çalıştırdığınızda vurgulama üzerinde herhangi bir etkisi var gibi gözüküyor. Vim yardım belgelerine baktığımızda, :syn-sync-fourth'un sonra ne yaptığımı yapabileceği görünüyor, ancak bunun ters bir şekilde nasıl işleyeceğinden emin değilim (örneğin, uygulamak yerine vurgulamayı devre dışı bırakmak).

+0

Aranıyor ve son olarak, sen bana yardım ettin patron :) –

cevap

3

Yapabileceğim en iyi şey, rahatsız edici yapıyla eşleştirmek için ek bir sözdizimi kuralı (~/.vim/after/syntax/make.vim içinde) eklemektir.

syn match makeIgnore /subst[ \t]*['"],,/ containedin=makeIdent 

bir $(...) yapısında kullanılan çünkü containedin= gereklidir: Bu iş gibi görünüyor.

+0

Harika, bu bir cazibe gibi çalıştı. Platforma özgü bir fark: Fedora 18 kutumda düzenlenecek dosya '/ usr/share/vim/vim73/syntax/make.vim'. – phobos51594

+0

Paketle verilen sistem dosyalarını düzenlemeyin! Bir sonraki güncellemede değişikliklerinizi kaybedersiniz. Orijinal dosyayı kesinlikle düzenlemeniz gerekiyorsa, ~/.vim/syntax/make.vim' içinde bir klon oluşturun. Ancak, _after_ konumunun kullanımı sadece iyi çalıştı, orijinal senaryo ile uğraşmaya gerek yok. –

+0

Gecikme için özür dilerim; ülke dışına çıktı. Sadece yukarıdaki satırı ekleyerek denedim: ~/.vim/after/syntax/make.vim' (dosyayı ilk sırada oluşturmam gerekiyordu), ama işe yaramadı. Make.vim sistemini sistemime kopyalamam ve değiştirmem gerekiyor mu? – phobos51594