문제

다음 텍스트를 포함하는 FrongFileTypedEtection.r라는 파일이 있습니다.

# This file is sometimes wrongly detected as a conf file

나는 또한 _vimrc의 두 가지 버전을 가지고 있으며, 절대적으로 동일하다고 생각했을 것입니다. 그러나 첫 번째 버전을 사용하면 위 파일이 "conf"파일로 잘못 감지되었지만 .r로 끝나는 모든 파일이 filetype = r로 설정되도록 구체적으로 요청하더라도 위의 파일이 잘못 감지됩니다. 두 번째 버전으로 변경하면 (Augroup 정의 뒤에 "구문을 이동) 감지가 다시 올바르게 작동합니다. 이것은입니다 구성 (이를 디버깅하는 동안 표준 VIMRC를 옮겼습니다).

첫 번째 버전 :

syntax on
augroup filetypedetect
    autocmd! BufRead,BufNewFile *.r,*.R     setfiletype r
augroup END

두 번째 버전 :

augroup filetypedetect
    autocmd! BufRead,BufNewFile *.r,*.R     setfiletype r
augroup END
syntax on

VIMRC는 두 파일의 특정 순서에 매우 민감한 것 같습니다. 왜 라인 중 하나가 어쨌든 훨씬 나중에 실행될 자동 명령이라는 점을 고려할 때 왜 그런가? 이것이 VIM의 버그입니까, 아니면 내가 이해하지 못하는 기능입니까?

도움이 되었습니까?

해결책

문제에 대한 간단한 대답은이 라인이 VIMRC에 전혀있어서는 안된다는 것입니다. 이를 처리하는 공식적으로 지원되는 방법은 filetype.vim 당신의 파일 .vim 다음을 포함하는 디렉토리 :

" my filetype file
if exists("did_load_filetypes")
  finish
endif

augroup filetypedetect
  au! BufRead,BufNewFile *.r setfiletype r
augroup END

코드가 어떻게 행동하는지에 관해서는 실제로는보다 훨씬 더 복잡합니다. @Too 많은 PHP의 답변 암시합니다.

당신의 첫 번째 버전에서 vimrc, Filetype Detection은 귀하의 초기에 초기화됩니다 syntax on 선. 이것은 파일이 .r 확장이 열리고이 autocmd는 함수를 호출합니다. s:FTr() filetype.vim에서.

그러나, 당신의 autocmd! 라인은이 기존 AutoCMD를 덮어 씁니다1, 그래서 s:FTr() 기능은 실행되지 않습니다2. 당신의 autocmd는 발사되지만 그것 그렇지 않습니다 이기 때문에 필더 타입을 설정하십시오 setfiletype 명령은 파일 타입이 이미 설정되었다고 생각합니다3.

그런 다음 FilEtype이 실제로 설정되지 않기 때문에 VIM은 파일의 내용을 기반으로 하나를 할당하려고 시도하고이를 다음에 할당합니다. conf 유형4.

이 모든 것에 대한 가장 좋은 참조는입니다 :help filetype. 특히 귀하의 경우 :help new-filetype 그리고 :help remove-filetype. 그만큼 :verbose 명령은 또한 어떤 스크립트에 의해 설정되었는지 알아내는 데 매우 편리합니다.

1 : 때문입니다 !. 당신이 이것을 제거한다면 !, 그러면 파일 타입이 올바르게 설정되어 있습니다. 그러나 이것은 올바른 솔루션이 아닙니다. 왜냐하면 파일을 한 유형으로 설정하고 해당 파일 유형에 대한 모든 설정을 적용한 다음 다른 설정으로 변경할 수 있기 때문입니다. 두 번째 필드 타입이 이러한 모든 설정을 덮어 쓰지 않으면 일부는 남아있을 수 있으며, 이는 원하는 것이 아닐 수도 있습니다.

2 : 달리기를 시도하십시오 :set autocmd BufRead *.r 두 개의 다른 VIMRC 파일을 사용할 때. 주어진 출력의 차이에 유의하십시오.

3 : 참조 :help setfiletype. 선을 변경하면 주목하십시오 setfiletype r ~ 안으로 set ft=r VIMRC의 첫 번째 버전에서 Filetype ~ 할 것이다 r로 설정하십시오. 그러나 이것이 최상의 솔루션이 아닌 이유는 각주 1을 참조하십시오.

4 : ... 댓글이 달린 코드 라인에서 : "마지막으로 확인하십시오. 그것은 단지 추측입니다."

다른 팁

첫 번째 버전에서 구문 켜기 Filetype 감지를 트리거합니다 ~ 전에 자동 명령이 추가되었습니다.

이 사이트에 따르면

http://www.build-doctor.com/2008/06/04/how-to-teet-the-filetype-in-vim-when-the-extension-dent-match/

.vimrc 파일에 두 줄의 코드를 추가하면됩니다.

au BufRead,BufNewFile *.R set filetype=r
au BufRead,BufNewFile *.r set filetype=r
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top