Używam ido-mode
, ale jedną rzeczą, której nienawidzę, jest to, że po tym, jak C-x C-f
nie mogę używać up/down
klawiszy, aby przechodzić między ostatnio otwieranymi plikami, jak kiedyś iswitchb
. Jak mogę ustawić, ido
aby działało w ten sposób?
Używam ido-mode
, ale jedną rzeczą, której nienawidzę, jest to, że po tym, jak C-x C-f
nie mogę używać up/down
klawiszy, aby przechodzić między ostatnio otwieranymi plikami, jak kiedyś iswitchb
. Jak mogę ustawić, ido
aby działało w ten sposób?
Odpowiedzi:
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)
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życiuido-virtual
twarzy 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.
C-x C-r
nie można otworzyć nowego pliku. Dziwi mnie również to, że nie można go w prosty sposób dostosować. Historia C-x C-f
jest tak oczywistą cechą, że nie mogę zrozumieć, dlaczego nie została jeszcze wdrożona ido
. Na przykład M-x up/down
przełącza między ostatnimi poleceniami, M-% up/down
zastę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/down
powinien przewijać ostatnio otwierane pliki. Kropka.
ido-use-virtual-buffers
- świetna funkcja, która naprawdę powinna być domyślnie włączona w IMO.
Choć Wiązania ewoluowały w czasie, jak dzisiejszy, kiedy powoływać ido-find-file
lub ido-find-file-read-only
można użyć następujących powiązań dostępny w domyślnej konfiguracji:
ido-prev-work-file
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-file
i ido-next-work-file
sparowanie 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)))))
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 :-)
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
Uważam, że helm-for-files
dział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.