¿Cómo completo las rutas de archivo en emacs?

14

Digamos, por ejemplo, que estoy editando un archivo de configuración y quiero escribir una ruta. ¿Existe un complemento para emacs que le permita completar una ruta de archivo en ese búfer? He buscado esto y hay como un bazillion complementos de terminación por ahí.

Jason Baker
fuente
1
No tengo claro qué preguntas aquí. Los emacen modernos tienen finalización de ruta en el mini-buffer (cuando se usa, find-filepor ejemplo). ¿Quieres un comportamiento similar en un búfer de contenido?
dmckee --- ex-gatito moderador
1
@dmckee: Sí, eso es exactamente lo que estoy buscando.
Jason Baker, el
@dmckee ¿Es este sistema operativo específico? Tuve la finalización del nombre de archivo en Buscar archivo en ubuntu pero no hay finalización en OSX. Por ejemplo, tengo un archivo llamado "referencia" en la raíz y estoy en el mini búfer: "Buscar archivo: ~ /" e ingreso "ref" y espero completarlo, pero no sucede nada. ¿Necesito instalar algo?
Zeynel
@ Zeynel también funciona bien para mí en Mac OS. Ya sea con la versión instalada de Apple o la versión homebrew. También trabajé con la versión fink en mi máquina anterior.
dmckee --- ex-gatito moderador
@dmckee Extraño. Quizás haga una nueva pregunta. Gracias.
Zeynel

Respuestas:

10

Prueba Hippie Expand , que como una de sus posibilidades tiene ' try-complete-file-name. Puede cambiar el orden y la lista de funciones de expansión que utilizará hippie expand para favorecer la expansión del nombre del archivo.

O incluso podría escribir un contenedor personalizado que solo haría la expansión del nombre del archivo. Algo como:

(global-set-key (kbd "C-M-/") 'my-expand-file-name-at-point)
(defun my-expand-file-name-at-point ()
  "Use hippie-expand to expand the filename"
  (interactive)
  (let ((hippie-expand-try-functions-list '(try-complete-file-name-partially try-complete-file-name)))
    (call-interactively 'hippie-expand)))
Trey Jackson
fuente
14

Por lo general escribo Ctrl- X Ctrl- Fcomo si hubiera abrir un archivo, pero en lugar de pulsar RETI de prensa Ctrl- A Ctrl- K Ctrl- Gcopiar la ruta y luego pegarlo en el buffer estaba editando con Ctrl- Y.

No necesito esto con la frecuencia suficiente, pero si realmente quisiera una solución mejor, definitivamente usaría la solución de Trey Jackson hippie-expand. Pensé en cómo hippie-expandpodría ser una mejor manera de hacer esto cuando respondí por primera vez, pero no lo sabía y era demasiado vago para buscarlo, así que simplemente escribí lo que hago.

Osito de peluche
fuente
Torpe e inelegante, pero funciona. Tengo que admitir que hago esto de vez en cuando. Aunque todavía estoy interesado en una solución más
ordenada
En efecto. Sin embargo, en realidad no parece mucho menos trabajo que escribirlo manualmente.
Jason Baker, el
1
@ Jason Baker: Depende de si conoce el nombre exacto del archivo o si necesita explorarlo un poco.
Teddy
6

La vainilla, lista para usar

M-x comint-dynamic-complete-filename

funciona fuera del modo de impresión. Por supuesto, puede usar la expansión dinámica del minibúfer para usar menos pulsaciones de teclas para llegar a ella (por ejemplo, Mx comi nt- dy namic- c omplete -f ilename). O, si lo va a usar con frecuencia, puede vincularlo a una secuencia de teclas que elija usando global-set-key.

Ron Kaminsky
fuente
2

También es posible hacer esto usando el autocompletado de la compañía si company-filesestán en la lista de company-backends(predeterminado en mi instalación) o explícitamente llamando company-files.

fikovnik
fuente
0

Recientemente descubrí las obras de Tomohiro Matsuyama (@ m2ym) y me ha impresionado mucho la calidad de sus paquetes emacs.

He tenido problemas con la mayoría de las extensiones de autocompletado y descubrí que todas tienen grandes deficiencias.

Echa un vistazo al autocompletado de Tomo ( http://auto-complete.org/doc/manual.html ) ha sido muy fácil de instalar (estoy en Linux) y cubre muchas necesidades de autocompletado de una manera moderna .

Por supuesto, su solicitud para completar los nombres de los archivos en el búfer está perfectamente cubierta.

Finalmente, si también haces Ruby, asegúrate de no perderte su extensión RSense ; de nuevo, el mejor de su tipo.

Arnaud Meuret
fuente
El enlace está roto
xuhdev