2011-08-09 12 views
9

Me gustaría implementar algo como la función "Ir a archivo" de Resharper para Emacs. Cuando uno prensas mencionado acceso directo, ReSharper aparece un cuadro de texto que acepta una cadena de caracteres comodín y muestra un menú de autocompletado que enumera todos los archivos en un proyecto que coinciden con ese comodín:emacs - cómo hacer búsqueda de búsqueda de archivos en los subdirectorios

"Go To File" dialog http://www.jetbrains.com/resharper/features/screenshots/50/navigation_gotofile.png

Por ahora, sé de una manera burda para lograr algo más o menos equivalente. Implica ejecutar dired con -lR y luego invocar dired-isearch-filenames - que iniciará la búsqueda incremental en toda la jerarquía de archivos dentro de cierto directorio raíz.

upd. También estoy al tanto de la opción de abrir cargas de búferes, manteniéndolos todos en la memoria y usando switch-to-buffer. Esta solución funciona bien con ido, aunque no es 100% a prueba de balas (¿qué pasa si algunos archivos se agregan o eliminan?). Tampoco funciona bien con tabbar, ya que las pestañas mostrarán todos los archivos que se incluyen en el proyecto, pero no un subconjunto del proyecto que represente mi contexto actual.

Sin embargo, esto muestra mucha información innecesaria y carece de autocompletado. He echado un vistazo a ido y icicles, pero parecen funcionar superficialmente, solo dentro del directorio actual. ¿Hay un complemento de Emacs que me ayude a lograr mi objetivo?

Respuesta

5

Aunque es posible que no desee mantener una gran cantidad de buffers abiertos, se puede conectar IDO en recentf, que rastrea los archivos abiertos recientemente:

(recentf-mode 1) 
(setq recentf-max-saved-items 300) 

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

(global-set-key [(meta f11)] 'ido-choose-from-recentf) 

He estado usando este truco durante años, y es 99 % de todo el cambio de archivos que necesito.

Más allá de eso, utilizo M-x rgrep, y también al igual que a la vista y M-x find-diredM-x find-grep-dired.

Para obtener más opciones, revise las respuestas a this similar question.

+1

Mi proyecto no tiene tantos archivos, por eso busqué una solución tonta pero práctica. Solo invoco "encontrar path1 path2 .. pathN -print0", dividir el resultado por "\ 0" -s y alimentarlos a ido-completing-read. ¡Gracias por una über idea! –

3

¿Has probado helm todavía? Puede elegir fácilmente buscar archivos, búferes, comandos y muchas otras cosas.

4

Projectile tiene una función llamada projectile-jump-to-project-file que hace más o menos lo que desea. También hay find-file-in-project, una utilidad más simple, pero que depende de la presencia de GNU find.

2

Mencionó Icicles, pero pensó equivocadamente que "funciona superficialmente". Funciona de la forma que quieras que funcione. Puede buscar cualquier archivo en su sistema, si lo desea, haciendo coincidir cualquier parte del nombre del archivo y la ruta. Y puede definir un proyecto de archivos y/o directorios particulares, guardar su definición y buscar más tarde solo entre esos archivos/directorios. (Conjuntos de archivos de Emacs son un subconjunto estricto de esta característica, pero se puede utilizar conjuntos de archivos directamente de la misma manera.)

Esto debería ayudar (véase también los enlaces al final de esta página):

http://www.emacswiki.org/emacs/Icicles_-_File-Name_Input

Cuestiones relacionadas