2014-07-04 2 views
0

Vim에서 파스칼 자동 들여 쓰기에 문제가 있습니다.빔 : 파스칼 자동 들여 쓰기

begin 
    writeln('Hello World'); 
    end. 

빔은 들여 쓰지 않음 end.. 그러나 end;이 있으면 올바르게 들여 쓰기됩니다.

gg=G을 수행 할 때 전체 코드가 올바르게 들여 쓰여집니다. Vim에게 gg=G 같은 명령을 "실행 중"으로 사용하게하는 방법이 있습니까?

+0

나는 당신이 무엇을 요구하고 있는지 전혀 모른다. – FDinoff

+0

@ Fdinoff,'end.' 토큰은'begin'과 같은 열에서 시작되도록 들여 쓰기되어야합니다. 이 설명에 따르면,'end' 다음에 세미콜론이 올 때 제대로 들여 쓰여지지만 마침표가 올 때가 아니라 들여 쓰기됩니다. 마침표는 현재 파일의 끝을 표시하기 때문에 프로그램에서 다른'begin'-'end' 쌍과 비교해 거의 발생하지 않으며, 아마도 Vim의 Pascal 구문 파일에서 그 세부 사항을 무시했을 것입니다. –

+0

@ RobKennedy 설명해 주셔서 감사합니다. Vim의 Pascal 들여 쓰기 파일에서 무시되었습니다. – FDinoff

답변

3

그래 보이네요. (버그 보고서를 제출해야합니다. 파일 맨 위의 $VIMRUNTIME/indent/pascal.vim에있는 스크립트의 관리자를 찾으십시오.

=end.에서 indentkeys까지 추가하면됩니다. indentkeys은 vim이 현재 행을 다시 시도해야 할 때 제어합니다. 이렇게하려면 setlocal indentkeys+==end.을 파일 ~/.vim/after/indent/pascal.vim에 추가하십시오 (존재하지 않으면 파일과 디렉토리를 만들어야합니다).

이 파일은 일반적인 들여 쓰기 스크립트가 원본으로 만들어지면 원본이됩니다.

:h indentkeys보고 :h after


사이드 기록해 둡니다 : gg=G는 전체 파일을 reindents 그러나 그것은 하나의 명령이 아닙니다. 그것은 실제로 두 개의 다른 것들입니다. gg은 파일의 맨 위로 이동하고 ={motion}은 현재 라인에서 모션의 끝으로 다시 들어가게됩니다. 이 경우 {motion}은 파일의 끝으로 이동합니다. 그래서 우리는 전체 파일을 다시 열었습니다.