Vô hiệu hóa tô sáng cú pháp tùy thuộc vào kích thước và loại tệp


16

Tôi thường phải chỉnh sửa các tệp XML khác nhau bằng vim, có kích thước khác nhau - từ các tệp cấu hình có chứa một vài dòng cho đến các tệp dữ liệu sản xuất với kích thước lên tới 2GB. Tất nhiên có bật tính năng tô sáng cú pháp là một ý tưởng rất tệ khi xử lý các tệp lớn, do đó tôi muốn tắt nó nếu tệp lớn hơn ngưỡng.

Tôi không thể làm việc này bằng cách sử dụng autocommandtrực tiếp để tắt tính năng tô sáng cú pháp, vì rõ ràng lệnh được thực thi trước khi cú pháp được bật khi bắt đầu vim từ trình bao:

" this autocmd has no effect except for the echo:
autocmd Filetype xml if getfsize(@%) > 1000000 | echom '!' | syntax off | endif

Tôi đã tìm thấy một cách giải quyết khác là tôi có thể vô hiệu hóa cú pháp tô sáng trên toàn cầu, sau đó bật lại cho tất cả các kiểu tệp khác ngoài xml và bật nó cho filetype xml nếu tệp không lớn hơn ngưỡng:

syntax off
autocmd Filetype * syntax off
autocmd Filetype * if &ft != 'xml' | syntax enable | endif
autocmd Filetype xml if getfsize(@%) < 1000000 | syntax enable | endif

Điều này có vẻ hiệu quả, nhưng cảm thấy sai và sẽ trở nên không thể quản lý được một khi tôi muốn làm điều này cho nhiều kiểu và điều kiện hơn. Hơn nữa, nó ảnh hưởng đến tất cả các bộ đệm. Cách thích hợp để tắt tính năng tô sáng cú pháp trong một bộ đệm trong các điều kiện cụ thể là gì?



Mặc dù Q này cũng bằng văn bản, nó dường như để trang trải rộng cùng một mặt bằng (trong thực tế, một tập hợp con) của một này: vi.stackexchange.com/questions/149/...
Andrew Ferrier

4
@AndrewFerrier Tôi sẽ chống lại điều đó. Câu hỏi khác là về các mẹo chung để xử lý các tệp lớn. Của tôi là về việc thực hiện một mảnh ghép khá cụ thể của câu đố theo một loạt các hạn chế nhất định. Chỉ cần so sánh các câu trả lời - các câu trả lời cho câu hỏi khác sẽ cho tôi tắt cú pháp, nhưng không phải làm thế nào để thực hiện điều đó một cách linh hoạt trong một bộ đệm cho một loại tệp duy nhất. Do đó, nó sẽ không giải quyết vấn đề cụ thể hơn nhiều của tôi. Chúng có liên quan nhưng không trùng lặp khi họ yêu cầu những thứ khác nhau và dẫn đến những phản ứng khác nhau.
l4mpi

l4mpi, đó là một điểm công bằng, tôi cũng đã không phát hiện ra điều filetype. Chỉ cần thử nghiệm nước của bản beta mới ở đây một phần! Điểm lấy. Tôi sẽ rút phiếu bầu trùng lặp của mình.
Andrew Ferrier

Câu trả lời:


11

Nhận xét này của derobert đã đưa tôi đến giải pháp:

autocmd Filetype xml if getfsize(@%) > 1000000 | setlocal syntax=OFF | endif

Điều này dường như chỉ vô hiệu hóa đánh dấu cú pháp trong một bộ đệm.

Đó autocmd BufReadPrelà một chút cá trích đỏ. syntax off hoạt động trong BufReadPrebối cảnh nhưng không phải trong Filetypebối cảnh (và tất nhiên vô hiệu hóa cú pháp trên toàn cầu); trong khi setlocal syntax=OFFthực hiện không làm việc trong BufReadPrebối cảnh nhưng hoạt động trong Filetypebối cảnh.


1

Đây autocmd BufReadPre * if getfsize(expand("%")) > 10000000 | syntax off | endiflà những gì bạn cần.


2
Hmm, điều này không tắt tính năng tô sáng cú pháp, nhưng trong tất cả các bộ đệm, không chỉ là bộ đệm có tệp lớn. Hơn nữa &ftdường như không được đặt trong ngữ cảnh này, do đó tôi không biết cách giới hạn nó chỉ với các tệp xml. Có ý kiến ​​gì không?
l4mpi

Tôi nghĩ rằng bạn muốn set syntax=OFFthay thế. (Hay điều đó nên được đặt ra?)
derobert

bạn có thể muốn thử syntax clearsau đó có thể?
Dhruva Sagar

@derobert setlocal syntax=OFFhoạt động, mặc dù không phải với BufReadPre *- Tôi đã phải thay đổi chế độ tự động trở lại cho Filetype xmlviệc này. Có vẻ như nó không cần thiết mà các lệnh hoạt động trong đó bối cảnh tự động và bối cảnh ...
l4mpi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.