Emacs가 백업 파일을 만드는 방법을 어떻게 제어합니까?
Emacs는 foo~
모든 곳에 이름이 지정된 백업 파일을 저장 하며 삭제하는 것을 잊지 않아도됩니다. 또한 파일 시스템의 다른 위치에 하드 링크가있는 파일을 편집하면 하드 링크는 편집이 완료되면 백업을 가리키며 혼란스럽고 끔찍합니다. 이러한 백업 파일을 제거하거나 동일한 디렉토리가 아닌 다른 곳으로 이동 시키려면 어떻게해야합니까?
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)
그래도 생각이 아프다.
Emacs 백업 / 자동 저장 파일은 매우 유용 할 수 있습니다. 그러나 이러한 기능은 혼동됩니다.
백업 파일
백업 파일은 끝에 물결표 ( ~
또는 ~9~
)가 있으며 사용자 홈 디렉토리에 기록됩니다. 경우 make-backup-files
비 전무하다 이맥스 자동 원본 파일 파일이 버퍼에서 저장되어있는 최초의 백업을 생성한다. 새 파일을 편집하는 경우 Emacs는 파일을 다시 저장할 때 백업을 생성합니다.
파일을 몇 번 저장하더라도 백업은 변경되지 않습니다. 버퍼를 종료 한 다음 파일을 다시 방문하거나 다음에 새 Emacs 세션을 시작하면 새 백업 파일이 작성됩니다. 새 백업은 파일을 다시 연 후 또는 편집 세션이 시작될 때 파일 내용을 반영합니다. 그러나 기존 백업은 다시는 손대지 않습니다. 따라서 번호가 매겨진 백업을 만드는 것이 유용하다는 것을 알았습니다 (아래 구성 참조).
백업을 명시 적으로 만들려면 접두사 인수와 함께 save-buffer
( C-x C-s
)를 사용하십시오 .
diff-backup
dired-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-*-
파일에서.
허용 대답은 좋지만, 크게 추가로 향상시킬 수 에 백업하는 모든 저장 및 백업 버전 파일을 .
먼저 허용 된 답변에 설명 된 기본 설정 :
(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)
마지막으로 첫 번째 저장뿐만 아니라 각 저장시 백업을 수행하십시오. 우리는 두 종류의 백업을 만듭니다 :
세션 별 백업 : 각 Emacs 세션에서 첫 번째 버퍼 저장시 한 번 . 이들은 Emac의 기본 백업 동작을 시뮬레이션합니다.
저장 당 백업 : 저장할 때마다 한 번씩 . 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 페이지를 기반으로합니다 .
백업 옵션을 구성하는 다른 방법은 사용자 정의 인터페이스를 사용하는 것입니다. 시작하다:
M-x customize-group
그리고 Customize group:
프롬프트에서을 입력하십시오 backup
.
버퍼의 맨 아래로 스크롤하면 Backup Directory Alist가 나타납니다 . 값 표시를 클릭 하고 다음과 같이 목록의 첫 번째 항목을 설정하십시오.
Regexp matching filename: .*
Backup directory name: /path/to/your/backup/dir
양자 택일로, 당신은 내 설정 해제 백업을 설정할 수 있습니다 백업 파일을 확인 하기 위해 off
.
Emacs가 .emacs
파일 을 자동으로 편집하지 못하게하려면 사용자 화 파일을 설정해야합니다 .
당신은 그들에 의해 그들을 완전히 비활성화 할 수 있습니다
(setq make-backup-files nil)
참고 URL : https://stackoverflow.com/questions/151945/how-do-i-control-how-emacs-makes-backup-files
'Programing' 카테고리의 다른 글
Subversion에서 하나의 파일 체크 아웃 (0) | 2020.03.10 |
---|---|
openssl을 사용하여 서버에서 인증서 가져 오기 (0) | 2020.03.10 |
이진 트리와 이진 검색 트리의 차이점 (0) | 2020.03.10 |
Java에서 인터페이스 이름 지정 (0) | 2020.03.10 |
Git 로컬 및 원격 지점 이름을 어떻게 바꾸나요? (0) | 2020.03.10 |