programing tip

Emacs Lisp에서 setq와 setq-default의 차이점

itbloger 2020. 10. 15. 07:35
반응형

Emacs Lisp에서 setq와 setq-default의 차이점


Emacs Lisp에 대한 질문이 있습니다. setqsetq-default 의 차이점은 무엇입니까 ? 나는 그것에 대해 매우 혼란 스럽습니다.

튜토리얼에서는 setq로컬 버퍼에 영향을 미치는 반면 setq-default 는 모든 버퍼에 영향을 미친 다고 말합니다 .

예를 들어 init.el에 (setq a-var a-vars-value)썼다 면 Emacs를 시작하고 새 버퍼를 연 후에 발견 한 a-var 도 있고 그 값은 a-vars-value 입니다. 거기에 있으면 안된다고 생각 했어요. setqsetq-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설정하고 전역 기본값을 설정합니다.

변수는, 로컬 버퍼되지 않은 경우 setqsetq-default같은 일을한다.

귀하의 경우 2의 경우 현재 버퍼에서 (setq tab-width 4)버퍼 로컬 값 tab-width을 4로 설정하고 전역 기본값은 tab-width여전히 8로 유지하므로 tab-width로컬 값이없는 다른 버퍼에서 평가할 때 8이 표시됩니다. 그런 다음, 기본값을 4로 설정하면 여전히 로컬 값이 없기 때문에 버퍼가 선택했습니다.

참고 URL : https://stackoverflow.com/questions/18172728/the-difference-between-setq-and-setq-default-in-emacs-lisp

반응형