Emacs의 자동 저장 기능 알아보기

Emacs // 2025년 04월 01일 작성

Emacs를 써온지 오래 되었지만 자동 저장 기능을 써 본다거나 알아볼 생각을 한 적이 없다. 워낙 자주 저장하는 습관이 들어있다보니 그다지 필요성을 못 느꼈기 때문이다. 하지만 최근 저장을 깜빡해서 (정확히는 한글 상태에서 저장 커맨드가 제대로 인식되지 않아서) 쓰던 글을 일부 날려먹은 경험이 생기다보니 자동 저장 기능에 대해 호기심이 생겼다.

찾아보니 별도의 확장 필요 없이 Emacs 자체적으로 자동 저장 기능을 제공하고 있었다. 이에 관해 간단히 기록해 본다.

Emacs에서 자동 저장 기능 활성화하기

자동 저장 기능을 활성화하기 위해 아래 설정을 추가해 주면 된다.

(setq auto-save-default t)

이 설정을 추가한 뒤 Emacs를 껐다 켜고 파일을 편집하다 잠깐 쉬다 보면 아래와 같은 메시지를 볼 수 있게 된다.

Auto-saving...done

말 그대로 자동으로 저장이 된다. 다만 즉시는 아니고 기본 설정 상태로 30초간 유휴 시간을 가지면 저장된다.

만약 자동 저장 기능을 비활성화 하고 싶다면 반대로 t 대신 nil을 넣어주면 된다. 물론 설정 자체를 지워버려도 된다.

특정 버퍼에서만 자동 저장 기능을 활성화하기

혹시나 기본적으로 자동 저장을 비활성화한 상태로 특정 파일(버퍼)만 자동 저장 기능을 활성화 하고 싶다면 해당 파일에서 자동 저장 모드를 켜자.

M-x auto-save-mode

이 경우 auto-save-mode는 해당 버퍼에서 마이너모드로 동작하며 전역 자동 저장 기능이 켜진 것과 비슷하게 동작한다.

자동 저장을 수동으로 하기

만약 자동 저장을 수동으로 트리거하는 독특한(?) 명령을 내리고 싶다면 do-auto-save 함수를 사용해 보자.

M-x do-auto-save

타임아웃이 너무 길어서 바로 저장해야 할 것 같은 특수한 상황에서나 쓸 법한 기능이라 크게 신경 쓸 필요는 없을 것 같다.

아니 솔직히 말해서 이런 명령을 쓸 정도면 그냥 저장을 하라고 해야 되는 거 아니야?

음... 그런 것 같다.

설정

자동 저장 모드와 관련된 설정을 일부 정리해 보자. 다만 별로 크게 걸드릴 필요도 없을 것 같아서 이 항목을 굳이 볼 필요는 없을 지도 모르겠다.

Timeout

자동 저장 주기를 바꾸고 싶다면 audo-save-timeout의 값을 원하는 값(초 단위)으로 바꿔주면 된다.

(setq auto-save-timeout 30)

다만 0으로 설정할 경우 유휴 시간 자동 저장이 비활성화 된다.

참고로 기본 값은 30초 인데 이 값은 Emacs의 Garbage Collection 주기와 동일해서 추천되는 모양이다만 RAM이 충분한 요즘엔 본인의 기호에 맞게 설정하는 게 더 나을 것 같다.

Interval

찾다보니 자동 저장 기능에는 동작하기 위한 최소 문자 입력 수를 판단하는 기능도 있는 것 같다. auto-save-interval 변수가 그 문자 입력 수를 설정하는 변수 같다.

(setq auto-save-interval 300)

이 변수에 원하는 문자 갯수를 입력해 주면 될 것 같다. 이 값을 0으로 할 경우 입력 문자 갯수 기준 자동 저장 기능이 비활성화 된다고 한다. 어쨌근 이 값의 실제 동작 여부는 아직 확인은 해보지 못했다.

여담

자동 저장 대신 자동 백업 모드도 있기는 하지만 Git의 사용이 보편화된 지금 굳이 별도의 파일로 백업할 필요가 있을까도 싶다. 그래도 나중에 기회가 된다면 별도로 기록해 보고 싶다는 생각이 든다.

어쨌든 이제 글을 막 날려먹는 일은 드물어지지 않을까 하는 만족감과 함께 글을 마무리 한다.