EMAC'lerde geçerli arabellek dosya adı nasıl alınır?


19

Vim hakkında özlediğim ana özelliklerden biri, her zaman geçerli dosyanın dosya %adını ara belleğe kaydetmesidir ( daha fazla bilgi ). Bu, komutların kolayca başlatılmasını sağlar:

;; compile current file
:! gcc %
;; source current file (useful when I'm editing .vimrc
:source %
;; get the size of current file
:! du -sh %
;; etc, etc...

emacs(Herhangi bir fark yaratırsa sürüm 24) altında benzer işlevselliğe sahip olmak istiyorum , yani geçerli arabellekte açılan dosyanın adını eklemek için kolay bir yolu var.

Ne yapmak istediğime örnekler

Burada böyle bir kısayola ihtiyaç duyduğumda daha iyi açıklamak için bazı temel kullanım durumlarını tanımlarım

  1. Derleme: M-x compileEmacs girdiğimde benden derleme komutu ister. gcc (current-buffer)Kolayca girmek istiyorum .

  2. Dosya yükle: .emacs dosyamı düzenlerken, değişiklikleri test etmek için hemen yüklemek istiyorum. Bunu yapma M-x load-fileşeklim ve sonra her zaman adı heceleyeceğim . e m a c s. Bir kısayol istiyorum.

  3. Dış süreçleri başlat: du -shÖrnek olarak verdim , sadece kabuk komutlarını çalıştırdığımda kısayolun da kullanılabilir olmasını istediğimi göstermek içinM-!

Şimdiye kadar bulduğum şey

  • Bu soru burada U&L. Verilen cevaplar temel olarak arabellek dosya adını nerede bulacağınızı gösterir, böylece kişi onu kill-ring'e ekleyebilir. Tam olarak aradığım şey bu değil, kullanmak istemeden önce dosya adını elle öldürmek istemiyorum. (Ayrıca her iki cevapta da açıklanan çözümler emaclarımda düzgün görünmüyor ve onları biraz acı verici hale getirmek için ek tuş vuruşları gerektiriyor).

DÜZENLE : Biraz ilgisiz, bu çözümlerin neden işe yaramadığını öğrendim. Daha iyi ya da kötü için IDO'yu etkinleştirdim.

  • (current-buffer)İşlev kılavuzu tarif geçerli tampon dosyasının adını döndürür, ama hiçbir yerde örneklerde ben elisp kod değerlendiriyorum, yukarıda verdi. Bu işlevin değerlendirmesinin sonucunu (mini) bir arabellek içine yerleştirmenin ve bu şekilde bir kısayola bağlamanın bir yolu var mı?

Bu şekilde düşünmek yanlış mıyım?

Şu anda Vim'i kullandıktan sonra emacs kullanmayı (aslında birkaç ay oldu) öğreniyorum. Tahmin edilebilir bir vim-in-a-emacs tuzağı kullanmaktan kaçınmak istiyorum . İstediğim şeyin çok emacs-y olmadığını düşünüyorsanız ve bunu yapmanın daha iyi (temiz?) Bir yolu olmalı, lütfen cevaplarınızda belirtin.


Dosya adı hakkında, .emacs içinde, (global-set-key (kbd "C-i") buffer-file-name)Ctrl + I olmasını istiyorsanız koyun . .Emacs hakkında M-x load-file RETne isterseniz yapın; hiçbir şey yazmanıza gerek yok.
Emanuel Berg

2
Bu iş akışı Emacs ile çok iyi örtüşmüyor, çünkü pencerenin alt satırındaki tüm istemler Emacs'ta (minibuffer olarak adlandırılır) bir arabellekte. Koşarsan Yani (buffer-file-name)minibuffer elde ederken Yazarken elde edersiniz nilçünkü (current-buffer)minibuffer olduğunu. Minibuffer'dayken de arabellekleri değiştirebilirsiniz, bu nedenle Emacs'ın gördüğü gibi, mevcut arabellek ile geçerli arabellek hakkında ne düşündüğünüzü minibuffer olarak izlemek zordur.
Gilles 'SO- kötü olmayı kes

Yanıtlar:


11

.Emac'lerinize aşağıdaki gibi bir işlev koyabilir ve istediğiniz herhangi bir tuşa bağlayabilirsiniz.

(defun insert-file-name ()
  "Insert the full path file name into the current buffer."
  (interactive)
  (insert (buffer-file-name (window-buffer (minibuffer-selected-window)))))

Ayrıca bu soruya bakın , benzer görünüyor.


4

@ Easyb'nin cevabındaki hafif bir varyant , yolu arabellekinize yerleştirmek yerine kill ringinize kopyalamaktır (salt okunur dosyalar için yararlıdır):

(defun filename ()   
    "Copy the full path of the current buffer."  
    (interactive)  
    (kill-new (buffer-file-name (window-buffer (minibuffer-selected-window)))))
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.