Tamponun bir kopyasını bir dosyaya nasıl kaydederim?


9

Bir tamponun bir kopyasını (veya anlık görüntüsünü) bir dosyaya kaydetmek istiyorum. Bu dosya, arabelleği bu dosyayı ziyaret write-fileedecek şekilde ayarlamaması dışında buna benzer olacaktır .

Bir kullanıcı tabanı için, bir kabuk oturumunuz olduğunu ve bunları hızlı bir şekilde bir günlük dosyasına kaydetmek istediğinizi düşünün. Arabellek yeniden adlandırılmamalıdır (böylece arabellek adına bağlı işlevler hala çalışır) ve bir dosyayı ziyaret etmemelidir (böylece dosyanın üzerine yazılmaması ve emac'lardan çıkarken uyarı yapılmaması).

Bunu yapmanın birkaç kirli yolunu hayal edebiliyorum, kendi kendine bir cevap olarak göndereceğim, ancak kılavuzdan okumak, tüm "ziyaret edilen dosya" sistemi göründüğünden daha karmaşık ve sanırım bir taslak yanlış çözüm. Bunu başarmanın gizli, yerleşik bir yolu var mı?

Yanıtlar:


18

Sadece tüm arabelleği ( C-x h) seçin ve kullanın write-region.


3
write-regionLisp'den kullanıyorsanız (örneğin kendi komutunuzda) arabellek metnini seçmeniz gerekmez . Sadece iletin (point-min)ve (point-max)dosya adıyla birlikte.
Drew

2
C-x h M-x write-region
Jakub Narębski

Select buffer ve gerçek M-x write-regionkomut için teşekkür ederiz .
Grant Bowman

0

Kirli elispyapmak istediğim şeyi yapıyor:

(defun tv/copy-buffer-to-file (filename)
  (interactive "sFile to write? ")
  (let ((bufname (buffer-name)))
    (set-visited-file-name filename)
    (save-buffer)
    (set-visited-file-name nil)
    (rename-buffer bufname)))

Hem ziyaret edilen dosyaya hem de arabellek ismine dikkat etmemiz gerektiğinden bu, gerekenden çok daha fazla güçlük gibi görünüyor ve başka bir şey unutmadığımızdan emin olamayız.

Yeni bir arabellekte arabellek metninin kopyalanmasını, daha sonra arabellek kaydedilip öldürülmesini içeren diğer çözümler büyük olasılıkla daha iyi çalışır, ancak daha sonra büyük arabelleklerle ilgili performans sorunları konusunda endişelenirim.

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.