Emacs가 백업 파일을 만드는 방법을 어떻게 제어합니까?


326

Emacs는 foo~모든 곳에 이름이 지정된 백업 파일을 저장 하며 삭제하는 것을 잊지 않아도됩니다. 또한 파일 시스템의 다른 위치에 하드 링크가있는 파일을 편집하면 하드 링크는 편집이 완료되면 백업을 가리키며 혼란스럽고 끔찍합니다. 이러한 백업 파일을 제거하거나 동일한 디렉토리가 아닌 다른 곳으로 이동 시키려면 어떻게해야합니까?

답변:


518

Emacs 백업 파일로 저장 한 적이 있다면 더 많은 파일을 원할 것입니다. 편집중인 파일과 동일한 디렉토리에 들어가는 것은 성가 시지만 변경하기 쉽습니다. 에 다음과 같은 것을 넣어 모든 백업 파일을 디렉토리로 만들 수 있습니다 .emacs.

(setq backup-directory-alist `(("." . "~/.saves")))

Emacs가 백업 파일을 작성하는 방법과 관련된 많은 세부 정보가 있습니다. 원본의 이름을 바꾸고 편집 된 버퍼를 작성해야합니까? 원본이 연결되면 어떻게됩니까? 일반적으로 가장 안전하지만 가장 느린 방법은 항상 복사하여 백업하는 것입니다.

(setq backup-by-copying t)

어떤 이유로 든 너무 느리다면을 살펴볼 수도 있습니다 backup-by-copying-when-linked.

이제 백업이 모두 자신의 위치에 있기 때문에 적은 것이 아니라 더 많은 것을 원할 수 있습니다. 이러한 변수에 대한 Emacs 설명서를 살펴보십시오 (로 C-h v).

(setq delete-old-versions t
  kept-new-versions 6
  kept-old-versions 2
  version-control t)

마지막으로 백업 파일이 없어야하는 경우 :

(setq make-backup-files nil)

그래도 생각이 아프다.


6
이봐! 이름이! home! svradmin! foo ~와 같은 이름으로 백업을 만들고 있는데 파일을 열 수 없습니다
Jaime Hablutzel

33
왜 백업을 사용합니까? 왜 git / mercurial을 사용하지 않습니까? 좋은 버전 관리 시스템과 프로그래밍 방법론은 편집기에 의한 개별 파일 백업보다 우선합니다
vol7ron

52
@ vol7ron : 백업은 버전 제어하에 있지 않은 구성 파일 또는 구성 파일이나 아직 버전 제어에 아직 익숙하지 않은 빠르고 더러운 파일을 편집하는 경우를위한 것입니다. 그런 다음 원하는 작업을 수행하지 않으면 편집자가 목을 절약합니다.
시조

69
@ vol7ron-그건 틀렸어. 당신이 유지하고 싶지 않은 개정 관리에 쓰레기를 넣지 않아야합니다. 중요한 물건을 찾기가 더 어려워집니다. 대신, 편집기 백업을 사용하여 자신이 원하는 것 (비상시 변경 사항 백업)을 위해 수정본을 사용하고 소프트웨어의 중요한 버전을 유지하고 팀 개발을 촉진하는 데 도움이되는 수정본을 사용하십시오. 작업에 적합한 도구를 사용하십시오.
TED

26
"백업 파일은 너무 많은 오버 헤드를 추가하고 거의 가치가 없습니다": 판단력이 아닙니까?
불가능한 변수

70

Emacs 백업 / 자동 저장 파일은 매우 유용 할 수 있습니다. 그러나 이러한 기능은 혼동됩니다.

백업 파일

백업 파일은 끝에 물결표 ( ~또는 ~9~)가 있으며 사용자 홈 디렉토리에 기록됩니다. make-backup-filesnon-nil이 아닌 경우 Emacs는 파일이 버퍼에서 처음 저장 될 때 자동으로 원본 파일의 백업을 작성합니다. 새 파일을 편집하는 경우 Emacs는 파일을 다시 저장할 때 백업을 생성합니다.

파일을 몇 번 저장하더라도 백업은 변경되지 않습니다. 버퍼를 종료 한 다음 파일을 다시 방문하거나 다음에 새 Emacs 세션을 시작하면 새 백업 파일이 작성됩니다. 새 백업은 파일을 다시 연 후 또는 편집 세션을 시작할 때 파일 내용을 반영합니다. 그러나 기존 백업은 다시는 손대지 않습니다. 따라서 번호가 매겨진 백업을 만드는 것이 유용하다는 것을 알았습니다 (아래 구성 참조).

백업을 명시 적으로 만들려면 접두사 인수와 함께 save-buffer( C-x C-s)를 사용하십시오 .

diff-backupdired-diff-backup파일을 백업 과 비교하거나 그 반대로도 비교합니다. 그러나 백업 파일을 복원하는 기능은 없습니다. 예를 들어, Windows에서 백업 파일을 복원하려면

C:\Users\USERNAME\.emacs.d\backups\!drive_c!Users!USERNAME!.emacs.el.~7~

수동으로 복사해야합니다

C:\Users\USERNAME\.emacs.el

파일 자동 저장

자동 저장 파일은 해시 마크 ( #)를 사용 하며 프로젝트 디렉토리 내에 로컬로 작성해야합니다 (실제 파일과 함께). 그 이유는 자동 저장 파일은 파일이 다시 저장 될 때까지 Emacs가 만드는 임시 파일 일뿐입니다 (서둘러 순종하는 것처럼).

  • 사용자가 C-x C-s( save-buffer)을 눌러 파일을 저장 하기 전에 Emacs는 키 입력 횟수 ( auto-save-interval) 또는 입력을 중지 할 때 ( )를 기준으로 파일을 자동 저장합니다 auto-save-timeout.
  • Emacs는 쉘 명령으로 Emacs 작업 종료를 포함하여 충돌이 발생할 때마다 자동 저장합니다.

사용자가 파일을 저장하면 자동 저장된 버전이 삭제됩니다. 그러나 사용자가 파일을 저장하지 않고 종료하면 Emacs 또는 X 세션이 충돌하더라도 자동 저장된 파일이 여전히 존재합니다.

자동 저장 파일을 복원 하려면 revert-buffer또는 recover-file을 사용하십시오 . Emacs는 ~ / .emacs.d / auto-save-list 라는 파일에 나중에 복구하기 위해 중단 된 세션을 기록 합니다 . recover-session함수는이 정보를 사용합니다.

자동 저장된 파일에서 복구하는 기본 방법은 M-x revert-buffer RET입니다. Emacs는 "버퍼가 최근에 자동 저장되었습니다. 자동 저장 파일에서 되돌리기?" 또는 "FILENAME 파일에서 버퍼를 되 돌리시겠습니까?" 후자의 경우 자동 저장 파일이 없습니다. 예를 들어, 다른 auto-save-intervall키 입력을 입력하기 전에 저장했기 때문에 Emacs가 자동 저장 파일을 삭제했습니다.

현재 자동 저장은 느린 컴퓨터에 연결될 때 편집 속도가 느려질 수 있고 많은 파일에 중요한 데이터가 포함되어 있기 때문에 기본적으로 비활성화되어 있습니다.

구성

IMHO가 가장 잘 작동하는 구성은 다음과 같습니다.

(defvar --backup-directory (concat user-emacs-directory "backups"))
(if (not (file-exists-p --backup-directory))
        (make-directory --backup-directory t))
(setq backup-directory-alist `(("." . ,--backup-directory)))
(setq make-backup-files t               ; backup of a file the first time it is saved.
      backup-by-copying t               ; don't clobber symlinks
      version-control t                 ; version numbers for backup files
      delete-old-versions t             ; delete excess backup files silently
      delete-by-moving-to-trash t
      kept-old-versions 6               ; oldest versions to keep when a new numbered backup is made (default: 2)
      kept-new-versions 9               ; newest versions to keep when a new numbered backup is made (default: 2)
      auto-save-default t               ; auto-save every buffer that visits a file
      auto-save-timeout 20              ; number of seconds idle time before auto-save (default: 30)
      auto-save-interval 200            ; number of keystrokes between auto-saves (default: 300)
      )

민감한 데이터

또 다른 문제는 Emacs가 민감한 데이터를 가진 파일의 사본을 확산시키지 않기를 원한다는 것입니다. 파일별로이 모드 를 사용하십시오 . 이것이 마이너 모드이므로 내 목적으로 이름을 바꿨습니다 sensitive-minor-mode.

모든 .vcf.gpg 파일에 대해 활성화하려면 .emacs에서 다음과 같은 것을 사용하십시오.

(setq auto-mode-alist
      (append
       (list
        '("\\.\\(vcf\\|gpg\\)$" . sensitive-minor-mode)
        )
       auto-mode-alist))

또는 일부 .txt 파일 과 같은 일부 파일 만 보호 하려면 다음과 같은 줄을 사용하십시오.

// -*-mode:asciidoc; mode:sensitive-minor; fill-column:132-*-

파일에서.


자동 저장을 사용하지 않습니까? 이 설정을 사용하면 폴더에있는 # filename.tex # 파일을 볼 필요가 없습니까?
PascalVKooten

3
중요한 데이터가있는 파일을 제외하고는 항상 기본적으로 자동 저장 및 백업 파일을 사용합니다. 민감 모드는 자동 저장 및 백업을 비활성화합니다. BTW, # file.ext # 파일은 Emacs가 필요에 따라 파일을 생성하고 삭제하기 때문에 불쾌하지 않습니다. 이맥스가 여전히 실행 중이거나 충돌 한 이맥스의 인공물 인 경우. 두 경우 모두 그들은 하루를 절약 할 수 있습니다 ;-)
Andreas Spindler

아, 추가 정보 감사합니다. 나는 실제로 그들과 함께 긍정적 인 경험을 가지고 있습니다 (그들은 내 하루를 구했습니다). 당신이
못생긴

BTW는 백업을 만드는 것과 백업을 복원하는 것은 다른 것입니다. 따라서 자동 저장으로 재생하십시오. Emacs 작업 또는 ssh 세션을 종료하십시오. 자동 저장 파일이 diff있으면 실제 파일과 함께 저장 하십시오. 그런 다음 Emacs를 실행하고 자신이하는 일을 스스로 알아보십시오 revert-buffer. 응급 상황이 발생하면 신속하게 보상합니다.
안드레아스 스핀들러

민감한 모드는 훌륭하게 작동합니다. 감사. 게시물에서는 민감도 모드라고하며 정의 (링크)에서는 민감도 모드라고합니다. 아마 당신은 그것을 정렬하고 싶을 것입니다.
HeyMan

65

허용 대답은 좋지만, 크게 추가로 향상시킬 수 에 백업하는 모든 저장 및 백업 버전 파일을 .

먼저 허용 된 답변에 설명 된 기본 설정 :

(setq version-control t     ;; Use version numbers for backups.
      kept-new-versions 10  ;; Number of newest versions to keep.
      kept-old-versions 0   ;; Number of oldest versions to keep.
      delete-old-versions t ;; Don't ask to delete excess backup versions.
      backup-by-copying t)  ;; Copy all files, don't rename them.

다음으로, Emacs가 기본적으로 수행하지 않는 백업 버전 파일도 있습니다 (매번 저장시 커밋하지 않습니까?).

(setq vc-make-backup-files t)

마지막으로 첫 번째 저장뿐만 아니라 각 저장시 백업을 수행하십시오. 우리는 두 종류의 백업을 만듭니다 :

  1. 세션 별 백업 : 각 Emacs 세션에서 첫 번째 버퍼 저장시 한 번 . 이들은 Emac의 기본 백업 동작을 시뮬레이션합니다.

  2. 저장 당 백업 : 저장할 때마다 한 번씩 . Emacs는 기본적으로이 작업을 수행하지 않지만 Emacs를 오랫동안 실행 상태로두면 매우 유용합니다.

백업은 다른 장소에서 이동 및 이맥스가 존재하지 않는 경우 자동으로 백업 DIRS를 만듭니다

;; Default and per-save backups go here:
(setq backup-directory-alist '(("" . "~/.emacs.d/backup/per-save")))

(defun force-backup-of-buffer ()
  ;; Make a special "per session" backup at the first save of each
  ;; emacs session.
  (when (not buffer-backed-up)
    ;; Override the default parameters for per-session backups.
    (let ((backup-directory-alist '(("" . "~/.emacs.d/backup/per-session")))
          (kept-new-versions 3))
      (backup-buffer)))
  ;; Make a "per save" backup on each save.  The first save results in
  ;; both a per-session and a per-save backup, to keep the numbering
  ;; of per-save backups consistent.
  (let ((buffer-backed-up nil))
    (backup-buffer)))

(add-hook 'before-save-hook  'force-backup-of-buffer)

내가 쓴 후 나는이 주제에 매우 관심을 갖게 $<대신 $@내에서 Makefile내 이전 후 3 수 시간이 커밋 : P를

위의 내용은 내가 편집Emacs Wiki 페이지를 기반으로합니다 .


위의 코드를 init.el 파일에 붙여 넣었지만 백업 디렉토리를 얻지 못하고 emacs는 여전히 백업 파일을 작성합니다. 내가 오해 뭔가가있을 수 있습니다, 나는 이맥스에 새로운 해요 : P
Soeholm

@ Soeholm : 내 답변 맨 위에 있는 s를 포함하여 내 답변에 모든 코드 를 붙여 넣었 setq습니까? 위의 내용은 Emacs 24.5.1에서 작동합니다.
ntc2

지금 일하기 시작했습니다. 모든 코드를 붙여 넣었으므로 새 구성을 적용하는 데 왜 느린 지 잘 모르겠습니다. 하지만 고마워요!
Soeholm

1
후속 조치로서 왜 지금 작동하지 않는지 알고 있습니다. 한 컴퓨터에서는 작동했지만 다른 컴퓨터에서는 작동하지 않았습니다. 홈 디렉토리에 빈 .emacs 파일이 있었기 때문에 .emacs.d 디렉토리보다 우선합니다. 어리석은 실수 ..
Soeholm

31

백업 옵션을 구성하는 다른 방법은 사용자 정의 인터페이스를 사용하는 것입니다. 시작하다:

M-x customize-group

그런 다음 Customize group:프롬프트에서을 입력하십시오 backup.

버퍼의 맨 아래로 스크롤하면 Backup Directory Alist가 나타납니다 . 값 표시를 클릭 하고 다음과 같이 목록의 첫 번째 항목을 설정하십시오.

Regexp matching filename: .*
Backup directory name: /path/to/your/backup/dir

양자 택일로, 당신은 내 설정 해제 백업을 설정할 수 있습니다 백업 파일을 확인 하기 위해 off.

Emacs가 .emacs파일 을 자동으로 편집하지 못하게하려면 사용자 화 파일을 설정해야합니다 .


4
나는 약 customize-group2 년 전에 알고 있었으면 좋겠다 . 감사합니다!
wprl

30

당신은 그들에 의해 그들을 완전히 비활성화 할 수 있습니다

(setq make-backup-files nil)

쉘 프롬프트에서 이것을 설정하고 싶습니다. 호스트에서 호스트로 호핑 할 때 .emacs 파일이 마음에 들지 않습니다 : emacs --eval "(setq make-backup-files nil)"
Dave Morse
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.