Geçerli dosyayı biraz farklı bir adla kaydet


17

Dosyalarımın uzun dosya adları var ve dosya adının bir kısmı tarih ve sürüm numarası. Genellikle dosyayı hemen hemen aynı adı kullanarak ara belleğe kaydetmek istiyorum , sadece sürüm numarasını veya tarihi değiştirin.

Geçerli tamponun dosya adını kill halkasına koyan bir komutum olsaydı bu çok daha kolay olurdu, böylece bir dosyayı açabilir, sonra yazabilirim C-x C-w(dosya yaz), Cy ile geçerli adı çeker, değiştirir ve kaydederim o.

Emacs 24.3'ü Windows ve 24.4'ü Linux'ta kullanıyorum. Çeşitli nedenlerle gitmiyorum, farklı dosya adları kullanmalıyım. Bu komut AUCTeX / LaTeX ile ana mod olarak çalışsaydı mutlu olurum.


Düzenleme 1:

Bir hata yaptım: Yazmak istemiyorum C-x C-f(= dosya bul), ancak C-x C-w(= dosya yaz). Bunu yukarıda düzelttim.

Düzenleme 2:

Yinelenen bir soru ve cevap bulundu: /unix//a/45381 Ama daha iyi bir anwswer yok!

Düzenleme 3:

Burada: http://www.gnu.org/software/emacs/manual/html_node/elisp/File-Name-Components.html , dosya adının "dizinsiz" bölümünü seçen bir işlevdir:

İşlev: dosya-adı-dizin dosyası adı

This function returns the nondirectory part of filename.

          (file-name-nondirectory "lewis/foo")
               ⇒ "foo"
          (file-name-nondirectory "foo")
               ⇒ "foo"
          (file-name-nondirectory "lewis/")
               ⇒ ""

Lisp'i bilseydim ...


Oh, merhaba orada Keks :) Aslında bunu birçok kez merak ettim ... güzel soru. Ve Lisp kolaydır ......
Sean Allred

Az önce bu soruyu buldum ... Meraktan: "çeşitli nedenler" danışmanı / yazarla ilgili ...?
mbork

1
@mbork Ben bir avukatım ve mektuplar ve sözleşmeler yazıyorum. Birisine yeni bir mektup açmak, yeniden adlandırmak, içeriği kaldırmak ve aynı kişiye yeni bir mektup yazmaya başlamak sıfırdan başlamaktan daha hızlıdır. Ancak sözleşmeleri yeniden adlandırmakla ilgili bir CVS yerine geçmez, ancak LaTeX ve Git kullanan başka bir avukatla hiç karşılaşmadım, bu yüzden sözleşmenin yeni bir versiyonuna yeni bir dosya adı vermek zorundayım ...
Keks Dose

Yeterince adil. YASnippet ne olacak? Kullanım durumunuza çok uygun görünüyor.
mbork

@mbork Evet, şablonlarım için yıllardan beri YASnippets kullanıyorum. LaTeX, Emacs, orgmode, YASnippets, bilgisayarımı Word ve Outlook'tan çok daha güvenilir hale getiriyor. Tamam, bunu bir Linux makinesinde yazıyorum, ama bu her zamanki BT yardım masasından gerçekten bekleyemeyeceğiniz bir şey: Windows yerine Linux'u desteklemek.
Keks Doz

Yanıtlar:


24

Bunların hepsini yapmaya gerek yok.

basitçe:

  1. Hala orijinal dosyada, vur C-x C-w. Yeni bir dosya adı girmeniz istenir.
  2. Vur M-nve geçerli dosya adı sizin için eklenir.
  3. Ne istediğinizi RETdüzenleyin ve dosyayı bu yeni isme kaydetmek için tuşuna basın.

Yine de orijinal dosyaya sahip olacaksınız. Ona geri dönmek istiyorsanız, tekrar ziyaret edin C-x C-f.


Dosyalar / Kaydetme hakkında Emacs kılavuzuna baktım, ancak bu hileyi bulamadım. Nasıl buldun? Harika!
Keks Doz

4
Emin değil. Minibuffer istemleriyle ilgili genel bir şey. Mp tuşuna basmak geçmişten geçer ve Mn tuşuna basmak size "güncel" seçeneği sunar.
Malabarba

5
Kullanıyorsanız ido, C-fönce ve sonra yapın M-n.
Kaushal Modi

1
Wow, bunu hiç bilmiyordum. Teşekkürler! ("Teşekkürler, ben de" yorumu için özür dilerim, ama bu basit ama kullanışlı bir şey öğrenmenin harika bir örneği. Viva la emacs.stackexchange!
Mark Aufflick

3

Geçerli arabellekteki dosya adını kopyalama

Cameron Desautels'ın blogundan , geçerli arabellek dosya adını kopyalayan ve minibuffer'da görüntüleyen bir işlev .

 
;; Kaynak: http://camdez.com/blog/2013/11/14/emacs-show-buffer-file-name/
(defun show-copy-buffer-file-name ()
  "Minibuffer'da geçerli dosyanın tam yolunu göster ve ayrıca kill-ring'e kopyala."
  (İnteraktif)
  (let ((dosya adı (buffer-dosya-adı))))
    (dosya adı ise
        (progn
          (ileti dosya adı)
          (yeni dosya adını öldür))
      (hata "Arabellek bir dosyayı ziyaret etmiyor"))))

Geçerli arabellekteki dosya adını yeniden adlandırma

Magnar Sveen , bloglarından birinde , şu anki tamponu tek seferde uygun şekilde yeniden adlandıran aşağıdaki işlevi uyguladı . İstediğiniz bu değil ama kullanım durumunuzla ilgili olabileceğini düşündüm.

;; Kaynak: http://www.whattheemacsd.com/
(defun rename-current-buffer-file ()
  "Geçerli arabelleği ve ziyaret ettiği dosyayı yeniden adlandırır."
  (İnteraktif)
  (let ((ad (arabellek adı))
        (dosya adı (buffer-file-name)))
    (if (not (ve dosyaadı (dosya-varo-p dosyaadı))))
        ("Tampon '% s' bir dosyayı ziyaret etmiyor!" hatası)
      (let ((yeni ad (okuma dosyası-adı "Yeni ad:" dosya adı)))
        (eğer (get-buffer yeni adı)
            (hata "'% s' adlı bir arabellek zaten var!" yeni ad)
          (yeniden adlandırma dosyası dosya adı yeni ad 1)
          (yeniden adlandır-arabellek yeni adı)
          (ziyaret edilen dosya adı yeni adı)
          (set-buffer-değiştirilmiş-p nil)
          ("% s 'dosyası başarıyla"% s "olarak yeniden adlandırıldı."
                   name (dosya-adı-dizin yeni adı))))))))

Magnar Sveen'nin çözümü orijinal dosyayı siler ve daha sonra yalnızca yeniden adlandırılan dosya olacaktır. Bu yararlı, ama yeniden adlandırılmış bir dosya olarak eski dosyayı tutmak gerekiyor. Cameron Desautel'in işlevi, dosya adını tüm yolla kopyalar. Bu ihtiyacım olan çözüme oldukça yakın. Bu işlevi nasıl değiştireceğinizi biliyor musunuz, böylece yalnızca dosya adı yol olmadan dökülüyor mu? Ancak, çok teşekkür ederim.
Keks Dose

1
@KeksDose sadece değiştirmek (buffer-file-name)için (file-name-nondirectory (buffer-file-name))dosya adı sans dizin almak için ilk işlevinde.
nispio
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.