files – Pon el nombre del archivo actual en el minibúfer

Pregunta:

¿Cómo puedo insertar el nombre de archivo del búfer de archivo activo en un comando?

Cuando invoco un comando que necesita un nombre de archivo, a menudo lo hago desde un búfer de archivo y quiero el nombre de ese archivo mientras escribo el comando en el minibúfer.

Estoy buscando un Cx hipotético ... que pueda escribir durante la formación de una línea de comando en el minibúfer.

Entonces, si, mientras que el búfer actual es un archivo llamado Lorem Ipsum.txt , Lorem Ipsum.txt esto:

M-x grep RET 'foo' SPC C-x … RET

el Mx grep RET presenta un minibúfer solicitando el comando grep . En respuesta, escribí el argumento del patrón de expresiones regulares ( 'foo' ) e inserté el argumento del nombre de archivo ( Cx ). Ese minibúfer terminará como:

grep -nH -e 'foo' 'Lorem Ipsum.txt'

¿Qué comando existente obtiene el nombre de archivo del búfer de archivo actual como este? ¿Cuál es su enlace de clave predeterminado?

Respuesta:

¿Qué comando existente obtiene el nombre de archivo del búfer de archivo actual como este?

Desafortunadamente, no hay un comando listo para usar para esto, pero podemos crear uno de la siguiente manera:

(defun name-of-the-file ()
  "Gets the name of the file the current buffer is based on."
  (interactive)
  (insert (buffer-file-name (window-buffer (minibuffer-selected-window)))))

La magia está en la función de ventana seleccionada del minibúfer ; hace lo correcto eligiendo el último búfer antes de que se activara el minibúfer. De lo contrario, usar solo el nombre del archivo del búfer no nos llevará el nombre del archivo al minibúfer. Curiosamente, la misma función se puede utilizar en un búfer o minibúfer normal para insertar el nombre del archivo. No se necesita ningún tratamiento especial.

¿Cuál es su enlace de clave predeterminado?

No hay ninguno, pero puede elegir uno conveniente y asignarlo de la siguiente manera:

(global-set-key (kbd "C-c f") 'name-of-the-file)

Coloque las líneas de código lisp anteriores en su archivo init.el.

Esto funciona en la mayoría de los casos triviales, pero es difícil predecir qué conflictos podría tener con los modos que tenga activos al invocar esta función.

¿Qué sucede si el búfer no visita un nombre de archivo válido, como el búfer temporal? Entonces este error se muestra en el área de eco:

name-of-the-file: Wrong type argument: char-or-string-p, nil

Elegir un búfer válido con un nombre de archivo adecuado antes de invocar el acceso directo evitará tales errores.

Hay varias otras soluciones como la anterior, pero se diferencian principalmente en cómo manejan las excepciones o anulaciones de cualquier conflicto. Por ejemplo, algunos emplean mode-hooks para que esta función esté disponible solo en ciertos modos.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım