Eu uso ido-mode
, mas uma coisa que odeio é que depois C-x C-f
que não consigo usar as up/down
teclas para percorrer os arquivos abertos recentemente, como costumava ser, por exemplo, com iswitchb
. Como posso ido
trabalhar dessa maneira?
Eu uso ido-mode
, mas uma coisa que odeio é que depois C-x C-f
que não consigo usar as up/down
teclas para percorrer os arquivos abertos recentemente, como costumava ser, por exemplo, com iswitchb
. Como posso ido
trabalhar dessa maneira?
Respostas:
Observando as opções de personalização para ido-mode
( M-x customize-group
RET ido
RET), não vejo opções para ativar o comportamento de ciclismo que você descreve.
Você pode, no entanto, adicionar o seguinte ao seu arquivo init:
(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)
Com isso, você pode pressionar C-x C-rpara concluir o Ido para selecionar arquivos abertos recentemente.
Por padrão, os 20 arquivos mais recentes serão mantidos no histórico. Eu sugiro que você aumente até 150, definindo recentf-max-saved-items
:
(setq recentf-max-saved-items 150)
Eu não vê-lo mencionado em um monte de lugares, mas Ido Buffers Virtuais torná-lo super fácil para acessar arquivos recentes. Habilite-os assim:
(setq ido-use-virtual-buffers t)
O comportamento que você recebe é este:
Se não
nil
, consulte buffers passados ("virtuais") e também existentes.Basicamente, funciona da seguinte maneira: digamos que você esteja visitando um arquivo e o buffer seja limpo
midnight.el
. Mais tarde, você deseja alternar para esse buffer, mas descubra que ele não está mais aberto. Com os buffers virtuais ativados, o nome do buffer permanece na lista de buffers (usando aido-virtual
face e sempre no final) e, se você o selecionar, ele abrirá o arquivo novamente. Isso permite que você pense menos se os arquivos abertos recentemente ainda estão abertos ou não. Na maioria das vezes, você pode sair do Emacs, reiniciar e alternar para um buffer de arquivo que estava aberto anteriormente como se ainda estivesse.
C-x C-r
isso não é possível abrir um novo arquivo. Também estou surpreso por não ser possível personalizá-lo de maneira simples. A história de C-x C-f
é uma característica tão óbvia que não consigo entender por que ainda não foi implementada ido
. Por exemplo, M-x up/down
alterna entre comandos recentes, M-% up/down
alterna entre substituições de consultas recentes, mesmo fora do emacs - todos os shells como bash ou zsh usam cima / baixo para recuperar comandos anteriores. Para mim C-x C-f up/down
deve percorrer os arquivos abertos recentemente. Ponto final.
ido-use-virtual-buffers
- um ótimo recurso que realmente deve estar ativado por padrão na IMO.
Embora as ligações tenham evoluído ao longo do tempo, a partir de hoje, quando você chama ido-find-file
ou ido-find-file-read-only
, é possível usar as seguintes ligações disponíveis na configuração padrão:
ido-prev-work-file
ido-next-work-file
Para além destes, não sendo tão ergonomicamente agradável como o M-pe M-nligações que eu tinha sido usado para antes de tentar ido , eles também são lentos, ea consequente tagarelice minibuffer é distrair e confundir. ido faz algo mais do que apenas mostrar um nome de arquivo aberto recentemente; ele relata que está "Procurando por ' nome do arquivo ' ...", talvez por relutância em oferecer um nome para um arquivo que não existe mais.
A mensagem "Procurando" vem da função ido-make-merged-file-list
. Lendo a fonte , não vejo nenhuma maneira de desativar qualquer mágica que esta função esteja fazendo.
Você pode considerar rebobinar os pares ido-prev-work-file
e ido-next-work-file
para algo mais natural como C-M-pe C-M-n, ou trocar as ligações current M-p( ido-prev-work-directory
) e M-n( ido-next-work-directory
) por elas.
Aqui está o código Emacs Lisp para restaurar M-pe M-nalternar entre arquivos recentes, movendo as ligações focadas em diretório padrão para C-M-pe C-M-nrespectivamente:
(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)))))
A resposta dada por @itsjeyd é bastante completa. Deixe-me apenas sugerir uma função:
(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)
Cortesia de WikEmacs
Eu achei que helm-for-files
funciona melhor do que qualquer uma das respostas acima para fins de preenchimento automático de nome de arquivo e com uma interface de pesquisa agradável. Além disso, você pode configurá-lo para incluir qualquer item de pesquisa que desejar.