Ich versuche, eine Syntaxdatei für Linux-Logrotate-Skripte zu schreiben.
Oft enthalten sie Inline-Definitionen von Skripten, die vor oder nach der Rotationsaktion ausgeführt werden sollen.
Ein Beispiel (das cups-daemon
von Ubuntu 14.04 bereitgestellte Logrotate-Skript):
prerotate
if [ -e /var/run/cups/cupsd.pid ]; then
invoke-rc.d --quiet cups stop > /dev/null
touch /var/run/cups/cupsd.stopped
fi
endscript
postrotate
if [ -e /var/run/cups/cupsd.stopped ]; then
rm /var/run/cups/cupsd.stopped
invoke-rc.d --quiet cups start > /dev/null
sleep 10
fi
endscript
Gibt es einen Weg zu beiden:
- markieren
prerotate
undpostrotate
als Schlüsselwörter, und - Alles dazwischen als Region hervorheben?
Ich kann die richtige Hervorhebung für beide definieren, aber es scheint nicht für beide.
" this works
syntax keyword LogrotateKeyword prerotate postrotate endscript
" this also works
syntax region LogrotateScript start=/prerotate/ms=e+1 end=/endscript/me=s-1
Jetzt werden beide in derselben Syntaxdatei unabhängig von der verwendeten Regelreihenfolge nur für Schlüsselwörter hervorgehoben.
Ich habe es versucht match
(mit \zs
/ \ze
oder Lookaheads / Lookbehinds) anstatt region
auch. Ich habe auch versucht, match
sowohl für die Schlüsselwörter als auch für Inline-Skripte zu verwenden, in der Hoffnung, dass sich die Definitionen dadurch nicht überschneiden. Die Ergebnisse scheinen genau gleich zu sein.
Ich behalte möglicherweise die Standardfarbe für das Inline-Skript bei, aber anscheinend enthält das Inline-Material häufig andere logrotate-Schlüsselwörter, was verwirrend sein kann.
Höchstwahrscheinlich irrelevant für dieses Problem: Vim 7.4 mit den Patches 1-1529 (pi-rho PPA) und Ubuntu 14.04.