2014-11-05 14 views
7

Tôi đã phát hiện ra một trường hợp thú vị trong cú pháp Vim làm nổi bật. Xem xét đoạn mã sau đây từ một công ty Makefile:Vim: Khởi động lại cú pháp cú pháp từ dòng tùy ý

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

Dòng trên chỉ đơn giản loại bỏ dấu ngoặc kép từ LDSCRIPT. Không có gì sai về cú pháp; làm cho chạy như mong đợi và không có vấn đề.

Vấn đề

Kể từ khi dòng trên chỉ chứa một dấu nháy kép, các quy tắc làm nổi bật nhầm lẫn nghĩ rằng phần còn lại của cơ thể của Makefile được trích dẫn văn bản và màu sắc nó như vậy. Đối với Makefiles đơn giản, đây là một sự bất tiện; cho 1KLOC + Makefiles, điều này trở thành một rắc rối thực sự (đặc biệt là vì quá trình tiền xử lý này ở gần đầu tệp).

Các Câu hỏi

Có cách nào để một trong hai cú pháp disable tô sáng dựa trên dây chuyền phù hợp với một số biểu hiện thường xuyên nhất định (ví dụ. subst[ \t]*['"],.*) hoặc một cái gì đó tương tự? Nếu không, có cách nào để khởi động lại điểm nổi bật của Vim tại một số dòng tùy ý trong khi vẫn giữ nguyên các điểm nổi bật ở trên không?

Nếu có thể, tôi muốn tránh chỉnh sửa Makefile vì tập lệnh này được chia sẻ trên một số phòng ban.

Tôi sẵn sàng viết/sửa đổi vimscript để đạt được điều này, tuy nhiên tôi đã không làm như vậy trước (đến bất kỳ mức độ hợp lý). Bất kỳ lời khuyên, con trỏ hoặc gợi ý hữu ích khác sẽ được nhiều đánh giá cao.

Những gì tôi đã thử

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

Không có ở trên dường như có bất kỳ tác dụng trên làm nổi bật khi chạy trong trình soạn thảo. Nhìn qua tài liệu trợ giúp Vim, có vẻ như :syn-sync-fourth có thể làm được những gì tôi đang làm, tuy nhiên tôi không chắc chắn về cách thức hoạt động theo cách ngược lại (ví dụ: để tắt đánh dấu thay vì áp dụng nó).

+0

Tìm kiếm được tìm kiếm và cuối cùng, bạn đã giúp tôi là ông chủ :) –

Trả lời

3

Tôi nghĩ điều tốt nhất bạn có thể làm là thêm quy tắc cú pháp bổ sung (trong ~/.vim/after/syntax/make.vim) để khớp với cấu trúc vi phạm. Điều này dường như hoạt động:

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

containedin= là cần thiết vì nó được sử dụng trong cấu trúc $(...).

+0

Tuyệt vời, nó hoạt động như một sự quyến rũ. Một sự khác biệt nhỏ về nền tảng cụ thể: trên hộp Fedora 18 của tôi tệp để chỉnh sửa là '/ usr/share/vim/vim73/syntax/make.vim'. – phobos51594

+0

Không chỉnh sửa các tệp hệ thống do gói cung cấp! Bạn sẽ mất các thay đổi của mình trong lần cập nhật tiếp theo. Nếu bạn hoàn toàn cần chỉnh sửa tệp gốc, hãy tạo bản sao trong '~/.vim/syntax/make.vim'. Nhưng đối với, việc sử dụng các vị trí _after_ chỉ làm việc tốt, không cần phải gây rối với kịch bản gốc. –

+0

Xin lỗi vì sự chậm trễ; đã ra khỏi đất nước. Tôi đã thử thêm chỉ là dòng ở trên tại '~/.vim/after/syntax/make.vim' (tôi đã phải tạo ra các tập tin ở nơi đầu tiên), nhưng nó dường như không hoạt động. Tôi có cần sao chép hệ thống 'make.vim' vào vị trí nhà của tôi và sửa đổi nó không? – phobos51594

Các vấn đề liên quan