Tôi đang cố gắng viết một tệp cú pháp cho các tập lệnh logrotate Linux.
Thông thường chúng chứa các định nghĩa nội tuyến của các tập lệnh sẽ được chạy trước hoặc sau hành động xoay.
Một ví dụ ( cups-daemon
tập lệnh logrotate được cung cấp bởi Ubuntu 14.04):
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
Có cách nào cho cả hai:
- đánh dấu
prerotate
vàpostrotate
làm từ khóa, và - làm nổi bật tất cả ở giữa như là một khu vực?
Tôi có thể định nghĩa tô sáng thích hợp cho một trong hai, nhưng dường như không phải cho cả hai.
" this works
syntax keyword LogrotateKeyword prerotate postrotate endscript
" this also works
syntax region LogrotateScript start=/prerotate/ms=e+1 end=/endscript/me=s-1
Bây giờ cả hai trong cùng một tệp cú pháp đều chỉ làm nổi bật các từ khóa, bất kể thứ tự quy tắc được sử dụng.
Tôi đã thử match
(với \zs
/ \ze
hoặc lookahead / lookbehinds) thay vì region
quá. Tôi cũng đã thử sử dụng match
cho cả từ khóa và tập lệnh nội tuyến, hy vọng nó sẽ không làm cho các định nghĩa trùng lặp, kết quả dường như giống nhau.
Tôi có thể giữ màu mặc định cho tập lệnh nội tuyến, nhưng rõ ràng thường thì nội dung chứa các từ khóa logrotate khác, có thể gây nhầm lẫn.
Rất có thể không liên quan đến vấn đề này: Vim 7.4 với các bản vá 1-1529 (pi-rho PPA) và Ubuntu 14.04.