Son modda en son açılan dosyalar


12

Kullanıyorum ido-mode, ama bu konuda nefret ettiğim bir şey , son zamanlarda açılmış dosyalar arasında dolaşmak C-x C-fiçin up/downanahtarları kullanamadıktan sonra , eskiden olduğu gibi iswitchb. idoBu şekilde çalışmaya nasıl ayarlayabilirim ?

Yanıtlar:


16

ido-mode( M-x customize-group RET ido RET) İçin özelleştirme seçeneklerine baktığınızda, açıkladığınız bisiklet davranışını etkinleştirmek için herhangi bir seçenek görmüyorum.

Bununla birlikte, init dosyanıza aşağıdakileri ekleyebilirsiniz:

(require 'recentf)

(defun ido-recentf-open ()
  "Use `ido-completing-read' to find a recent file."
  (interactive)
  (if (find-file (ido-completing-read "Find recent file: " recentf-list))
      (message "Opening file...")
    (message "Aborting")))

(global-set-key (kbd "C-x C-r") 'ido-recentf-open)

Bu durumda, C-x C-rson açılan dosyaları seçmek için Ido tamamlamasını almak için düğmesine basabilirsiniz .

Varsayılan olarak, en son 20 dosya geçmişte saklanır. Bunu ayarlayarak 150'ye kadar bir şey kranklamanızı öneririm recentf-max-saved-items:

(setq recentf-max-saved-items 150)

Bonus: Son dosyalara erişme, steroidler baskısı

Bunun yerlerde bir sürü söz görmüyorum ama Ido Sanal Tamponlar bunu yapmak süper kolay erişim son dosyalara. Bunları şu şekilde etkinleştirin:

(setq ido-use-virtual-buffers t)

Aldığınız davranış şudur:

Değilse nil, var olanların yanı sıra geçmiş ("sanal") arabelleklere bakın.

Esasen şu şekilde çalışır: Bir dosyayı ziyaret ettiğinizi ve arabellek tarafından temizlendiğini varsayalım midnight.el. Daha sonra, bu arabelleğe geçmek istiyorsunuz, ancak artık açık olmadığını görüyorsunuz. Sanal arabellekler etkinken, arabellek adı arabellek listesinde kalır ( ido-virtualyüzü ve her zaman sonunda kullanılır) ve seçerseniz dosyayı tekrar yedekler. Bu, son açılan dosyaların hala açık olup olmadığı hakkında daha az düşünmenizi sağlar. Çoğu zaman Emacs'tan çıkıp, yeniden başlatabilir ve daha önce olduğu gibi açık olan bir dosya arabelleğine geçebilirsiniz.


Şimdiye kadar oy verdim, daha sonra test edip nasıl çalıştığını anlayacağım. (lisp anlayışım çok zayıf).
WeSenseASoulInSearchOfYanıtlar

@WeSenseASoulInSearchOfAnswers Elbette, acele etmeyin. Gönderdiğim kod hakkında herhangi bir sorunuz varsa bize bildirin.
itsjeyd

Kabul ettim ama açıkçası hoşuma gitmedi çünkü C-x C-ryeni bir dosya açmak mümkün değil. Ayrıca basit bir şekilde özelleştirmenin mümkün olmadığına da şaşırdım. Tarihi C-x C-fo kadar bariz bir özellik ki, neden idohenüz uygulanmadığını anlayamıyorum . Örneğin M-x up/down, son komutlar M-% up/downarasında geçiş yapar, emacs dışında bile son sorgu yerine geçer - bash veya zsh gibi tüm kabuklar önceki komutları geri çağırmak için yukarı / aşağı kullanır. Benim için C-x C-f up/downson açılan dosyalar arasında geçiş yapmalıyım. Tam durak.
WeSenseASoulInSearchOfYanıtlar

@WeSenseASoulInSearchOfAnswers Size katılıyorum ve bunun neden kutudan çıktığı veya özelleştirilemeyeceği hakkında hiçbir fikrim yok. Kişisel olarak benim için büyük bir sorun değil çünkü cevabımda açıkladığım sanal tamponlar özelliğini kullanıyorum, bu yüzden son bir dosyaya geçmek başka bir tampona geçmekle aynı; gerçekten kolay. Ancak, kullanmaya alışkın olduğunuz bir özelliğin mevcut olmaması sinir bozucu olabileceğini anlıyorum.
itsjeyd

5
+1 için ido-use-virtual-buffers- varsayılan IMO tarafından gerçekten açık olması gereken harika bir özellik.
Jon O.

2

Bağlamalar zamanla gelişmesine rağmen, bugün itibariyle, çağırdığınızda ido-find-fileveya ido-find-file-read-onlyvarsayılan yapılandırmada bulunan aşağıdaki bağlamaları kullanabilirsiniz:

  • M-o çağırır ido-prev-work-file
  • C-M-o çağırır ido-next-work-file

İdo'yu denemeden önce alıştığım M-pve M-nbağlamalar kadar ergonomik olarak hoş olmamalarının yanı sıra, aynı zamanda yavaşlar ve sonuçta minibuffer konuşması dikkat dağıtıcı ve kafa karıştırıcı. ido yakın zamanda açılan bir dosya adını göstermekten daha fazlasını yapar; " Dosya adı " aranıyor ... ", belki de artık var olmayan bir dosya için bir ad sunmak konusunda isteksiz olduğunu bildiriyor .

"Aranıyor" mesajı fonksiyondan gelir ido-make-merged-file-list. Kaynağı okurken , bu fonksiyonun yaptığı sihri devre dışı bırakmanın bir yolunu göremiyorum.

Sen yeniden bağlama düşünebilirsiniz ido-prev-work-fileve ido-next-work-filedaha fazlası gibi doğal bir şey çiftini C-M-pve C-M-nya akımını takas M-p( ido-prev-work-directory) ve M-n( ido-next-work-directorybunlar için) bağlantıları.

Varsayılan dizin odaklı bağlamaları ve sırasıyla taşıyarak son dosyaları geri yüklemek M-pve M-nbu dosyalar arasında geçiş yapmak için Emacs Lisp kodu şöyledir :C-M-pC-M-n

(add-hook 'ido-setup-hook
          (lambda ()
            (let ((kmap ido-file-dir-completion-map))
              (let ((key '(meta ?n)))
                (define-key kmap (vector (cons 'control key))
                  (lookup-key kmap (vector key)))
                (define-key kmap (vector key) 'ido-next-work-file))
              (let ((key '(meta ?p)))
                (define-key kmap (vector (cons 'control key))
                  (lookup-key kmap (vector key)))
                (define-key kmap (vector key) 'ido-prev-work-file)))))

1
Emacs SE'ye Hoşgeldiniz! Lütfen yanıtlarınızı orijinal poster sorusuna odaklamaya çalışın. Elbette "minibuffer chatter" hakkındaki yorumunuz ilginç ve ilgili, ancak soruya gerçek bir cevap bulmaktan rahatsız oluyor. Daha da önemlisi: lütfen cevabınızı ... bir cevap şeklinde ifade etmeye çalışın. Yazdıklarınız daha çok bir yorum gibi okuyor, bu da böyle bir Soru-Cevap sitesi için çok uygun değil.
paprika

İlk paragraf ve aşağıdaki liste, son açılan dosyalar arasında geçiş yapmak için anahtarlar arayan orijinal soruyu cevaplıyor. Bu bağlamalar varsayılan olarak mevcuttur, ancak buradaki diğer yanıtların hiçbiri bu bağlardan bahsetmemiştir. Yeniden bağlama kodu üzerinde çalışıyorum ve memnun kaldığımda cevabımı buna ekleyeceğim.
seh

2

Bu durumda başvurduğum şey idomode Cf yazarak normal minibuffer davranışına geri dönüyor. Sonra normal geçmiş tarama tuşlarına sahip olacaksınız. Önceden biliyorsanız, hızlı olabilir: Cxff :-)


1

@İtsjeyd tarafından verilen cevap oldukça eksiksiz. Sadece bir işlev önereyim:

(defun ido-choose-from-recentf ()
  "Use ido to select a recently visited file from the `recentf-list'"
  (interactive)
  (find-file (ido-completing-read "Open file: " recentf-list nil t)))

;; bind it to "C-c f"
(global-set-key (kbd "C-c f") 'ido-choose-from-recentf)

WikEmacs'ın izniyle


1

helm-for-filesDosya adı otomatik tamamlama ve güzel bir arama arayüzü olması için yukarıdaki cevaplardan herhangi birinden daha iyi çalışır buldum . Ayrıca, istediğiniz arama öğelerini içerecek şekilde yapılandırabilirsiniz.


1
@ Çizim dümeni ido modu ile birlikte gelir. Çoğu zaman insanlar bu yayını aradıklarında sorunu çözmek için başka alternatifler bilmekle ilgilenebilirler.
user10375
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.