2017-04-10 1 views
0

어휘 및 동적 범위 지정 (결과적으로 파일 변수)에 대해 배우고 있습니다.로컬 파일 변수를 정의 할 때 세미콜론의 역할

많은 리소스가 Specifying Local File Variables 문서, 일반 과제의 형태는 그 형태에 따라

-*- mode: modename; var: value; … -*- 

이다,

;;; -*- lexical-binding: t -*- 

그러나

;; -*- lexical-binding: t -*- 

또는

를 사용하여 lexical-binding 파일 변수를 업데이트하는 것이 좋습니다 , 나는 a를 기대할 것이다 lexical-binding 모양은 다음과 같습니다.

-*- lexical-binding: t -*- 

그래서 테스트 해 보았습니다. 나는 lexical-scratch.el이라는 파일을 가지고있다. 첫 번째 줄은 파일 변수 사양 중 하나입니다 (세미콜론 사용 또는 사용 안 함). 나는 버퍼를 저장하고 M-x revert-buffer을 호출한다. 그럴 때 C-h v lexical-binding을 호출하면 변수가 업데이트 되었음이 표시됩니다. 이 절차를 t 대신 nil을 사용하여 반복하여 변수를 재설정 할 수 있습니다.

모든 양식을 실행하면 파일 변수를 업데이트하는 것과 동일한 효과가 나타납니다.

주요 세미콜론이 할당을 주석 처리하지 않는 이유는 무엇입니까? 그것은 세미콜론이 파일 변수 사이의 구분자로 취급되기 때문입니까? 그렇다면 Emacs는 주석과 구분 기호를 나타내는 세미콜론을 어떻게 구분합니까?

답변

2

파일 로컬 변수 사양은 elisp가 아니며 모든 파일 형식 (C 프로그램, 텍스트 파일 등)의 일부일 수 있습니다.

따라서이 파일을 읽는 컴파일러와 간섭하지 않으려면 모드의 주석 구분 기호로 보호 할 수 있습니다.

이 경우 세미콜론은 elisp 주석으로 사용되므로 버퍼없이 오류없이 평가할 수 있습니다. 세미콜론의 수는 is a commenting convention입니다.

+0

파일 로컬 변수는 C로 구현 된 Emacs의 부분에서 왔습니까? –

+0

필요는 없습니다. 이맥스로 편집 한 동일한 파일은 다른 소프트웨어 (HTML 파서, 파이썬 인터프리터, C 컴파일러 등)에서 읽을 수 있으므로 파일의 의미를 깨뜨리지 않도록 파일 로컬 변수 토큰에 주석을 달 수 있어야합니다. 세미콜론없이'eval-buffer'를 시도하면 실패합니다. – Juancho

+0

나는 당신의 코멘트 Lorem Ipsum을 이해하지 못한다. 그러나 나는 그 대답에서 "C 프로그램"에 대한 언급으로 혼란 스러울 것이라고 생각한다. '- * -'줄은 파일의 일부이기 때문에 어떤 파일이든 파싱해야 할 필요가있는 것은 무엇이든 볼 수 있지만 * 그러한 구문 분석기에 대해서는 유효한 구문 *이 될 수 없으므로 필요합니다. 의견. 주석 구문은 파일의 종류에 따라 다릅니다. 예 : '// - * - indent-tabs-mode : nil; - * -'는 자바 스크립트 프로그램에서 사용될 수 있습니다. – phils

관련 문제