Emacs Lisp에서 setq와 setq-default의 차이점
Emacs Lisp에 대한 질문이 있습니다. setq 와 setq-default 의 차이점은 무엇입니까 ? 나는 그것에 대해 매우 혼란 스럽습니다.
튜토리얼에서는 setq 가 로컬 버퍼에 영향을 미치는 반면 setq-default 는 모든 버퍼에 영향을 미친 다고 말합니다 .
예를 들어 init.el에 (setq a-var a-vars-value) 를 썼다 면 Emacs를 시작하고 새 버퍼를 연 후에 발견 한 a-var 도 있고 그 값은 a-vars-value 입니다. 거기에 있으면 안된다고 생각 했어요. setq 와 setq-default 사이에 차이가없는 것 같습니다 .
내 이해에 문제가 있습니까?
대단히 감사합니다.
예 :
1) init.el 파일 에 (setq hello 123) 을 썼고 쉘에서 emacs abuffer 를 실행 한 다음 "hello Cx Ce"를 입력 하면 "123"이 표시됩니다. 모든 새 버퍼에서 이것을 실행할 때도 마찬가지입니다.
2) init.el 파일 에 (setq tab-width 4) 를 썼습니다 . 탭 너비 Cx Ce를 실행하면 "8"이 표시됩니다 (현재 모드는 '텍스트'). 그러나 (setq-default tab-width 4) 를 사용하면 "4"가 표시됩니다. 이 현상을 설명 할 수 없습니다.
Emacs의 일부 변수는 "버퍼 로컬"입니다. 즉, 각 버퍼는 전역 기본값을 무시하는 해당 변수에 대해 별도의 값을 가질 수 있습니다. tab-width
버퍼 로컬 변수의 좋은 예입니다.
변수가 버퍼 로컬이면 setq
현재 버퍼에 로컬 값을 setq-default
설정하고 전역 기본값을 설정합니다.
변수는, 로컬 버퍼되지 않은 경우 setq
와 setq-default
같은 일을한다.
귀하의 경우 2의 경우 현재 버퍼에서 (setq tab-width 4)
버퍼 로컬 값 tab-width
을 4로 설정하고 전역 기본값은 tab-width
여전히 8로 유지하므로 tab-width
로컬 값이없는 다른 버퍼에서 평가할 때 8이 표시됩니다. 그런 다음, 기본값을 4로 설정하면 여전히 로컬 값이 없기 때문에 버퍼가 선택했습니다.
'programing tip' 카테고리의 다른 글
64 비트 프로그램이 32 비트 버전보다 크고 빠릅니까? (0) | 2020.10.15 |
---|---|
다중 처리 프로세스간에 대규모 읽기 전용 Numpy 배열 공유 (0) | 2020.10.15 |
Visual Studio 직접 실행 창 : 처음 100 개 이상의 항목을 보는 방법 (0) | 2020.10.15 |
이동 된 컨테이너를 재사용 하시겠습니까? (0) | 2020.10.15 |
CMAKE_CURRENT_SOURCE_DIR과 CMAKE_CURRENT_LIST_DIR의 차이점 (0) | 2020.10.15 |