파일 크기 및 유형에 따라 구문 강조 표시 사용 안함


17

vim을 사용하여 다양한 XML 파일을 편집해야하는 경우가 있습니다. vim은 수백 줄을 포함하는 구성 파일부터 최대 2GB 크기의 프로덕션 데이터 파일까지 크기가 다양합니다. 큰 파일을 다룰 때 구문 강조를 활성화하는 것은 물론 매우 나쁜 생각이므로 파일이 임계 값보다 큰 경우 비활성화하고 싶습니다.

쉘에서 vim을 시작할 때 구문이 활성화 되기 전에autocommand 명령이 실행 되기 때문에 구문 강조 표시를 비활성화 하기 위해 직접 사용 하여이 작업을 수행 할 수 없었습니다 .

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

전역에서 구문 강조 표시를 비활성화 한 다음 xml 이외의 다른 모든 파일 유형에 대해 다시 설정하고 파일이 임계 값보다 크지 않으면 파일 유형 xml에 대해 다시 설정할 수 있다는 해결 방법을 찾았습니다.

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

이것은 작동하는 것처럼 보이지만 잘못된 느낌으로 더 많은 파일 형식과 조건 에서이 작업을 수행하려고하면 관리 할 수 ​​없게됩니다. 또한 모든 버퍼에 영향을줍니다. 특정 조건에서 하나의 버퍼에서 구문 강조 표시를 비활성화하는 올바른 방법은 무엇입니까?



이 Q는 잘 쓰여져 있지만, 다음과 같은 근거 (사실, 부분 집합)를 광범위하게 다루고있는 것 같습니다 : vi.stackexchange.com/questions/149/…
Andrew Ferrier

4
@AndrewFerrier 나는 그것에 대해 논쟁하고 싶습니다. 다른 질문은 큰 파일을 처리하기위한 일반적인 팁에 관한 것입니다. 광산은 주어진 제한 사항 하에서 다소 구체적인 퍼즐 조각을 구현하는 것에 관한 입니다. 답변을 비교하십시오-다른 질문에 대한 답변은 구문을 해제하도록 지시하지만 단일 파일 유형의 단일 버퍼에서 동적으로 수행하는 방법은 아닙니다. 따라서 그것은 훨씬 더 구체적인 문제를 해결하지 못할 것입니다. 그들은 서로 관련이 있지만 서로 다른 것을 요구하고 다른 반응을 유도하기 때문에 중복되지 않습니다.
l4mpi

l4mpi, 그것은 공평한 점입니다. 나는 파일 형식도 발견하지 못했습니다. 새 베타 버전의 물을 부분적으로 테스트하기 만하면됩니다! 요점을 알았어. 중복 투표를 철회하겠습니다.
Andrew Ferrier

답변:


12

이 의견 에 의해 derobert는 솔루션를 알려준 :

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

이것은 하나의 버퍼에서만 구문 강조 표시를 안정적으로 비활성화하는 것으로 보입니다.

그것은 autocmd BufReadPre약간의 청어였습니다. 컨텍스트에서는 syntax off 작동 BufReadPre하지만 컨텍스트에서는 작동 하지 않습니다 Filetype(물론 구문을 전역 적으로 비활성화합니다). 동안 setlocal syntax=OFF수행 하지 작업 중을 BufReadPre문맥하지만, 작동 Filetype상황.


1

이것이 autocmd BufReadPre * if getfsize(expand("%")) > 10000000 | syntax off | endif당신이 필요로하는 것입니다.


2
흠, 이것은 구문 강조를 비활성화하지만 큰 파일을 가진 것뿐만 아니라 모든 버퍼에서. 또한 &ft이 컨텍스트에서 설정되지 않은 것 같습니다. 따라서 XML 파일로 제한하는 방법을 모르겠습니다. 어떤 아이디어?
l4mpi

나는 당신이 set syntax=OFF대신 원한다고 생각합니다 . (또는
현지에서 설정

syntax clear그런 다음 시도해 볼 수 있습니까?
Dhruva Sagar

@derobert setlocal syntax=OFF는 작동하지 않지만 작동하지만 BufReadPre *자동 명령을 다시 변경해야 Filetype xml했습니다. 자동 명령 컨텍스트에서 어떤 명령이 작동하는지는 사소한 것 같습니다.
l4mpi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.