6

vim에서 파일의 파일 형식을 확인하고 파일 형식에 따라 구문 강조를 설정하는 방법을 찾고 있습니다. 유일한 캐치는 파일 형식을 결정하기 위해 파일 확장명을 사용할 수 없다는 것입니다.유효한 파일 확장명없이 vim의 파일 형식을 감지하십시오.

이것은 내 시나리오입니다. vimdiff 또는 gvimdiff을 내 P4DIFF 도구로 사용합니다.이 도구는 로컬 복사본의 파일과 PERFORCE 서버의 파일 간의 변경 내용을 보여줍니다./tmp 디렉토리에 억지로 서버에서 파일을 가져올 것으로 보인다 예를 들어, 파일 이름을 위해 PID를 사용하여 억지로 :

/tmp/tmp.24673.23 

을 이것은 C++ 소스 파일을이었다.

PERFORCE 저장소에서 자주 만나는 파일 유형은 C/C++ 소스 및 헤더 파일, Makefile, Python 스크립트, Perl 스크립트, Ruby 스크립트 및 TCL 스크립트입니다.

  • 나는 modeline를 사용하여 살펴본 결과,하지만 우리의 트리에서 소스의 대부분은 파일에 포함 된 정보가 없습니다.

  • This 게시물에는 마법 패턴을 검색하고 식별하는 방법에 대한 언급이 나와 있습니다. 나는 높은 성공률을 얻을 수있는 일관된 마술 패턴을 찾을 수 없었다.

  • 내가 얻은 결과를보기 위해 내 리눅스 상자에 file 바이너리를 사용해 보았습니다. 잘 C/C++ 소스를 식별하기 위해 보이지만합니다 (hashbang을 가지고 있지 않는) 메이크 실패, 심지어 파이썬 스크립트

하나 좋은 일이

, 그 비교 2 개 파일, 파일들 오른쪽에있는 파일은 내 로컬 사본에 있으므로 확장명이 올바른 파일 이름을 가지므로 구문 강조가 오른쪽 파일에 올바르게 사용됩니다.

왼쪽에 표시된 파일에 대해 동일한 구문 강조 표시를 설정하는 데이 방법을 사용할 수 있습니까?

이 문제에 대한 대안은 또한 환영합니다.

답변

6

이 흥미로운 퍼즐이었다. :)

aug SmartDiffType 
    au! 
    au VimEnter * :if &diff && len(&ft) | call setwinvar(2/winnr(),'&ft',&ft) | elseif &diff | let &ft=getwinvar(2/winnr(),'&ft') | endif 
aug END 

주 :

    위의 4 개 라인의
  • au VimEnter 라인 만 필요하지만, 일반적으로 (리셋과 일부 자동 명령 그룹에 autocommands을 넣어하는 것이 좋습니다 au!).에
  • 자동 명령 VimEnterdiff 때문에 달리거나 창을 제대로 오른쪽 또는 분할의 왼쪽에있는 이전 파일로 트리거되었을 수 있습니다 아직
  • vimdiff intialized하지 않는, 그래서 우리는 두 가지 경우를 고려한다.
  • 2/winnr()는 (1 2/2 = 1/2 = 2) (1)과 (2) 사이
+0

아주 좋습니다. '2/winnr()'트릭을 좋아합니다 !! –

+0

쿨! 이것은 정말 멋지다. if -endif를 함수로 옮기고 명령을 함수 호출로 대체했다. :) – Tuxdude

3

열려에만 2 개 분할이 있고 왼쪽의 분할이 상단의 값으로 filetype를 설정합니다

:windo let &ft = getwinvar(1, '&ft') 

다음은 대부분의 창을 왼쪽으로 할 수있는 로컬 파일이라고 가정 모든 창문. 더 도움말을 참조하십시오

:

:h :windo 
:h 'ft' 
:h getwinvar(
+0

감사 작동 플립 수학 트릭이다. 오른쪽 창에 올바른 파일 형식이 있었기 때문에'windo let & ft = getwinvar (2, '& ft')'를 사용해야했습니다. '.vimrc'에 추가하여 모든 vimdiff에 대해 자동으로 수행하는 방법이 있습니까? .vimrc에'windo' 명령을 추가하는 것만으로는 그 일을하지 않았습니다. 나는 그것이 나중에 overriden 될 것 같아요. – Tuxdude

+0

그런 'autocmd'를 만들 수 있다고 확신하지만, 가장 간단한 해결책은 커스텀 커맨드를 만드는 것입니다 :'command! -bar -nargs = 0 SameFiletype exe 'windo set ft ='. & ft'이 파일을'~/.vimrc' 파일에 추가하십시오. 다음 번에 상황이 발생하여 올바른 파일 유형의 버퍼로 이동하고': SameFiletype'을 실행하십시오 –

+0

감사합니다. 합리적인 접근 방식처럼 들립니다. :) – Tuxdude

관련 문제