Làm thế nào để ngăn chặn Emacs phá vỡ các liên kết cứng?


13

Giả sử tôi có hai tệp file1file2:

$ echo aaa >file1
$ ln file1 file2

Sau đó, tôi kiểm tra xem các nút có giống nhau không:

$ ls -i
18749779 file1  18749779 file2

cho thấy hai tập tin thực sự giống nhau. Bây giờ tôi chỉnh sửa file1trong Emacs, và thêm một dòng với ví dụ văn bản bbb, lưu nó và thoát Emacs.

Bây giờ tôi nhận được:

$ ls -i
18749781 file1  18749779 file2
$ cat file1
aaa
bbb
$ cat file2
aaa

Vì vậy, liên kết cứng bị hỏng. Lưu ý rằng điều này không xảy ra khi tôi chỉnh sửa tệp vimhoặc nếu tôi chỉ đơn giản làm echo bbb >>file1..

Làm thế nào tôi có thể ngăn Emacs phá vỡ các liên kết cứng?

Cập nhật:

Lưu ý rằng tôi có

(require 'backup-dir)
(setq bkup-backup-directory-info
      '((t  "~/.emacs-backups/" ok-create full-path )))

trong ~/.emacstập tin init của tôi . Nếu tôi chỉnh sửa file1bằng cách sử dụng emacs -Q file1thay vào đó, tôi nhận được một tệp được gọi file1~trong thư mục hiện tại có liên kết đến file2(có cùng một nút) nhưng file1~chưa được sửa đổi (vì vậy nó giống hệt với bản cũ file1) .. Đây không phải là điều tôi mong muốn. Tôi muốn cả hai file1file2cùng một tệp, và bao gồm các nội dung tệp được cập nhật ..


3
Ok, tôi nghĩ rằng tôi đã tìm thấy giải pháp: Nếu tôi thêm (setq backup-by-copying t)vào ~/.emacstệp init của mình thì nó hoạt động như mong muốn ..
Håkon Hægland

Câu trả lời:


10

@Hakon giải quyết vấn đề của riêng mình với:

(setq backup-by-copying t)

Nếu bạn muốn giữ lại hành vi mặc định và back-up-by-copyingchỉ sử dụng cho các tệp được liên kết cứng, bạn có thể sử dụng thay thế này (và để lại backup-by-copyingthành nil):

(setq backup-by-copying-when-linked t)

Ngoài ra, như được chỉ ra bởi @Harald, bạn có thể đặt back-up-by-copyinglàm biến cục bộ tệp thay vào đó, để chỉ bật tính năng này cho các tệp riêng lẻ.

Giải thích về hành vi này từ hướng dẫn sử dụng Emacs :

Sao lưu tập tin có thể được thực hiện bằng cách sao chép tập tin cũ hoặc bằng cách đổi tên nó. Điều này tạo ra sự khác biệt khi tệp cũ có nhiều tên (liên kết cứng). Nếu tệp cũ được đổi tên thành tệp sao lưu, thì tên thay thế sẽ trở thành tên cho tệp sao lưu. Nếu tệp cũ được sao chép thay vào đó, thì tên thay thế vẫn là tên cho tệp bạn đang chỉnh sửa và nội dung được truy cập bởi các tên đó sẽ là nội dung mới.

Xem trang được liên kết để thảo luận thêm.


2
Lưu ý rằng bạn có thể đặt biến này thành biến cục bộ của tệp, trong trường hợp bạn không muốn hành vi này cho tất cả các tệp.
Harald Hanche-Olsen

@ HaraldHanche-Olsen lưu ý!
Tyler
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.