Emacs'ın sabit bağlantıları kırmasını nasıl önleyebilirim?


13

Diyelim ki iki dosyam var file1ve file2:

$ echo aaa >file1
$ ln file1 file2

Sonra inode'ların aynı olup olmadığını kontrol ediyorum:

$ ls -i
18749779 file1  18749779 file2

ki bu iki dosyanın aslında aynı olduğunu gösterir. Şimdi file1Emacs'ta düzenleme yapıyorum ve örneğin metin içeren bir satır ekleyip bbbkaydedip Emacs'tan çıkıyorum.

Şimdi anladım:

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

Yani zor bağlantı koptu. Dosyayı düzenlediğimde vimveya basitçe yaptığımda bunun gerçekleşmeyeceğini unutmayın echo bbb >>file1.

Emacs'ın sabit bağlantıları koparmasını nasıl önleyebilirim?

Güncelleme:

Bende

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

Benim de ~/.emacsinit dosyası. Bunun yerine file1kullanarak düzenlerseniz , geçerli dizinde (aynı inode sahiptir) bağlanan ama değiştirilmemiş (bu yüzden eski ile aynıdır ) emacs -Q file1adlı bir dosya alıyorum .. Bu istediğim değil. Ben hem ve aynı dosya olmak istiyorum ve güncellenmiş dosya içeriğini dahil etmek istiyorum.file1~file2file1~file1file1file2


3
Tamam, ben çözüm buldum düşünüyorum: Eğer (setq backup-by-copying t)benim ~/.emacsinit dosyaya eklemek istendiği gibi çalışır ..
Håkon Hægland

Yanıtlar:


10

@Hakon kendi problemini çözdü:

(setq backup-by-copying t)

Varsayılan davranışı korumayı ve back-up-by-copyingyalnızca sabit bağlantılı dosyalar için kullanmayı tercih ederseniz, bunun yerine bunu kullanabilirsiniz (ve backup-by-copyingayarlanmış olarak bırakabilirsiniz nil):

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

Ayrıca, @Harald tarafından işaret edildiği back-up-by-copyinggibi, bu özelliği yalnızca tek tek dosyalar için açmak için bunun yerine bir dosya-yerel değişken olarak ayarlayabilirsiniz .

Bu davranışın Emacs kılavuzundan açıklaması :

Yedekleme dosyaları eski dosyayı kopyalayarak veya yeniden adlandırarak yapılabilir. Bu, eski dosyada birden çok ad (sabit bağlantılar) olduğunda bir fark yaratır. Eski dosya yedek dosya olarak yeniden adlandırılırsa, alternatif adlar yedek dosyanın adları olur. Eski dosya kopyalanırsa, alternatif adlar düzenlemekte olduğunuz dosyanın adları olarak kalır ve bu adların eriştiği içerik yeni içerik olur.

Daha fazla tartışma için bağlantılı sayfaya bakın.


2
Tüm dosyalar için bu davranışı istemiyorsanız, bunu bir dosya yerel değişkeni olarak ayarlayabileceğinizi unutmayın .
Harald Hanche-Olsen

@ HaraldHanche-Olsen kaydetti!
Tyler
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.