Ostatnio otwarte pliki w trybie ido

12

Używam ido-mode, ale jedną rzeczą, której nienawidzę, jest to, że po tym, jak C-x C-fnie mogę używać up/downklawiszy, aby przechodzić między ostatnio otwieranymi plikami, jak kiedyś iswitchb. Jak mogę ustawić, idoaby działało w ten sposób?

WeSenseASoulInSearchOfAnswers
źródło

Odpowiedzi:

16

Patrząc na opcje dostosowywania dla ido-mode( M-x customize-group RET ido RET), nie widzę żadnych możliwości włączenia opisywanego zachowania podczas jazdy na rowerze.

Możesz jednak dodać do pliku init następujące:

(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)

W tym miejscu możesz nacisnąć, C-x C-raby uzyskać ukończenie Ido wyboru ostatnio otwieranych plików.

Domyślnie 20 najnowszych plików będzie przechowywanych w historii. Sugeruję zwiększenie tej wartości do około 150, ustawiając recentf-max-saved-items:

(setq recentf-max-saved-items 150)

Bonus: Dostęp do najnowszych plików, edycja na sterydach

Nie widzę tego w wielu miejscach, ale dzięki wirtualnym buforom Ido dostęp do najnowszych plików jest bardzo łatwy . Włącz je w następujący sposób:

(setq ido-use-virtual-buffers t)

Otrzymujesz takie zachowanie:

Jeśli nie nil, odwołaj się do przeszłych („wirtualnych”) buforów, a także istniejących.

Zasadniczo działa w następujący sposób: Załóżmy, że odwiedzasz plik i bufor jest czyszczony przez midnight.el. Później chcesz przejść do tego bufora, ale okaże się, że nie jest już otwarty. Po włączeniu wirtualnych buforów nazwa bufora pozostaje na liście buforów (przy użyciu ido-virtualtwarzy i zawsze na końcu), a jeśli go wybierzesz, ponownie otworzy plik. Pozwala to mniej myśleć o tym, czy ostatnio otwierane pliki są nadal otwarte, czy nie. Przez większość czasu możesz wyjść z Emacsa, uruchomić ponownie, a następnie przejść do bufora plików, który był wcześniej otwarty tak, jakby był nadal.

itsjeyd
źródło
Jak dotąd głosowałem, zaakceptuję później, kiedy to przetestuję i zrozumiem, jak to działa. (moje rozumienie seplenienia jest bardzo słabe).
WeSenseASoulInSearchOfAnswers
@WeSenseASoulInSearchOfAnswers Pewnie, nie spiesz się. Daj mi znać, jeśli masz jakieś pytania dotyczące kodu, który opublikowałem.
itsjeyd
Zgodziłem się, ale szczerze mówiąc nie podoba mi się to, ponieważ C-x C-rnie można otworzyć nowego pliku. Dziwi mnie również to, że nie można go w prosty sposób dostosować. Historia C-x C-fjest tak oczywistą cechą, że nie mogę zrozumieć, dlaczego nie została jeszcze wdrożona ido. Na przykład M-x up/downprzełącza między ostatnimi poleceniami, M-% up/downzastępuje ostatnie zapytania, nawet poza emacsem - wszystkie powłoki jako bash lub zsh używają góra / dół do przywołania poprzednich poleceń. Dla mnie C-x C-f up/downpowinien przewijać ostatnio otwierane pliki. Kropka.
WeSenseASoulInSearchOfAnswers
@WeSenseASoulInSearchOfAnswers Zgadzam się z tobą i nie mam pojęcia, dlaczego nie jest to dostępne ani konfigurowalne po wyjęciu z pudełka. Dla mnie osobiście nie jest to wielka sprawa, ponieważ korzystam z funkcji wirtualnych buforów, które opisuję w mojej odpowiedzi, więc przejście do ostatniego pliku jest takie samo jak przejście do innego bufora; Naprawdę proste. Rozumiem jednak, że może być frustrujące, jeśli funkcja, do której jesteś przyzwyczajony, nie jest dostępna.
itsjeyd
5
+1 za ido-use-virtual-buffers- świetna funkcja, która naprawdę powinna być domyślnie włączona w IMO.
Jon O.
2

Choć Wiązania ewoluowały w czasie, jak dzisiejszy, kiedy powoływać ido-find-filelub ido-find-file-read-onlymożna użyć następujących powiązań dostępny w domyślnej konfiguracji:

  • M-o inwokuje ido-prev-work-file
  • C-M-o inwokuje ido-next-work-file

Oprócz tego, że nie są tak ergonomicznie przyjemne jak M-pi M-nwiązania, do których przywykłem przed wypróbowaniem ido , są one również powolne, a wynikające z tego rozmowy w minibuforach są rozpraszające i zagmatwane. ido robi coś więcej niż tylko pokazuje ostatnio otwartą nazwę pliku; zgłasza, że ​​„szuka nazwy pliku ” ... ”, być może z niechęci do zaoferowania nazwy pliku, który już nie istnieje.

Komunikat „Wyszukiwanie” pochodzi z funkcji ido-make-merged-file-list. Czytając źródło , nie widzę żadnego sposobu na wyłączenie jakiejkolwiek magii, jaką robi ta funkcja.

Możesz rozważyć ponowne powiązanie ido-prev-work-filei ido-next-work-filesparowanie z czymś bardziej naturalnym, takim jak C-M-pi C-M-n, lub zamianę dla nich powiązań prądu M-p( ido-prev-work-directory) i M-n( ido-next-work-directory).

Oto kod Emacs Lisp, aby przywrócić M-pi M-ndo cyklu przez ostatnich plików, przenoszenie domyślnym katalogu koncentruje się powiązania C-M-pi C-M-nodpowiednio:

(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)))))
seh
źródło
1
Witamy w Emacs SE! Staraj się, aby twoje odpowiedzi koncentrowały się na pytaniu oryginalnego plakatu. Z pewnością twój komentarz na temat „gadania w minibuforze” jest interesujący i powiązany, ale odwraca uwagę od znalezienia właściwej odpowiedzi na pytanie. Co ważniejsze: spróbuj sformułować swoją odpowiedź w formie ... cóż, odpowiedzi. To, co napisałeś, bardziej przypomina komentarz, co nie jest odpowiednie dla takiej strony z pytaniami i odpowiedziami.
papryka
Cóż, pierwszy akapit i poniższa lista odpowiadają oryginalnemu pytaniu, które szukało kluczy do przeglądania ostatnio otwieranych plików. Te powiązania istnieją domyślnie, ale żadna z pozostałych odpowiedzi tutaj nie wspomniała o tych powiązaniach. Pracuję nad kodem ponownego wiązania i dołączę go do mojej odpowiedzi, gdy będę z niego zadowolony.
seh
2

w tym przypadku powróciłem do normalnego zachowania minibufora, wpisując Cf w idomode. Wtedy będziesz mieć normalne klucze przeglądania historii. Jeśli znasz to z góry, może być szybki: Cxff :-)

Twój przyjaciel
źródło
1

Odpowiedź udzielona przez @itsjeyd jest dość kompletna. Pozwól, że zasugeruję funkcję:

(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)

Dzięki uprzejmości WikEmacs

Nsukami _
źródło
1

Uważam, że helm-for-filesdziała lepiej niż którakolwiek z powyższych odpowiedzi w celu automatycznego uzupełniania nazw plików i posiadania ładnego interfejsu wyszukiwania. Możesz także skonfigurować, aby zawierał dowolne wyszukiwane elementy.

użytkownik10375
źródło
1
Hełm @Drew jest wyposażony w sam tryb ido. Przez większość czasu, gdy ludzie szukają tego postu, mogą być zainteresowani poznaniem innych alternatyw dla rozwiązania problemu.
user10375,