Una de las características principales que extraño de Vim es que siempre guarda el nombre del archivo actual en el %
búfer ( más información ). Eso permite ejecutar comandos fácilmente como:
;; compile current file
:! gcc %
;; source current file (useful when I'm editing .vimrc
:source %
;; get the size of current file
:! du -sh %
;; etc, etc...
Me gustaría tener una funcionalidad similar en emacs
(versión 24, si eso hace alguna diferencia), es decir, tener una manera fácil de insertar el nombre del archivo abierto en el búfer actual.
Ejemplos de lo que quiero hacer.
Aquí describo algunos casos de uso básicos para explicar mejor cuando siento la necesidad de tal atajo
Compilar: cuando entro en
M-x compile
emacs me pide un comando de compilación. Me gustaría entrargcc (current-buffer)
fácilmente.Cargar archivo: cuando estoy editando mi archivo .emacs, me gustaría cargarlo de inmediato para probar los cambios. La forma en que lo hago es
M-x load-file
y luego siempre deletreo el nombre . e m a c s. Me gustaría tener un atajo.Iniciar procesos externos: di
du -sh
como ejemplo, solo para ilustrar que quiero que el acceso directo también esté disponible cuando ejecuto comandos de shell conM-!
Lo que encontré hasta ahora
- Esta pregunta aquí en U&L. Las respuestas dadas básicamente muestran dónde encontrar el nombre de archivo de un búfer para poder agregarlo al anillo de eliminación. No es exactamente lo que estoy buscando, no quiero tener que eliminar manualmente el nombre de archivo antes de que quiera usarlo. (Además, las soluciones descritas en ambas respuestas no parecen funcionar tan bien en mis emacs y requieren pulsaciones de teclas adicionales, lo que las hace un poco molestas).
EDITAR : Un poco no relacionado, descubrí por qué estas soluciones no funcionan. Tengo IDO habilitado, para bien o para mal.
- La
(current-buffer)
función descrita en el manual devuelve el nombre del archivo en el búfer actual, pero en ninguna parte de los ejemplos que di arriba, estoy evaluando el código elisp. ¿Hay alguna manera de insertar el resultado de la evaluación de esta función en un búfer (mini) y vincularlo así a un acceso directo?
¿Me equivoco al pensar de esta manera?
Actualmente estoy aprendiendo a usar emacs (han pasado unos meses en realidad) después de años de usar Vim. Quiero evitar una trampa predecible usando-emacs-in-a-Vim-way . Si siente que lo que estoy pidiendo no es muy emacs-y , y debería haber una mejor manera (¿más limpia?) De hacerlo, por favor mencione en sus respuestas.
(global-set-key (kbd "C-i") buffer-file-name)
si desea que sea Ctrl + I. Acerca de .emacs,M-x load-file RET
hace lo que quieres; No necesitas escribir nada.(buffer-file-name)
mientras escribes en el minibúfer, obtienesnil
, porque(current-buffer)
es el minibúfer. También puede cambiar los búferes mientras está en el minibúfer, por lo que es difícil hacer un seguimiento de qué búfer es lo que piensa del búfer actual para cuando el búfer actual, como lo ve Emacs, es el minibúfer.Respuestas:
Puede poner una función como sigue en sus .emacs y vincularla a cualquier tecla que desee.
También vea esta pregunta , parece ser similar.
fuente
Una ligera variante en la respuesta de @ easyb es copiar la ruta a su anillo de eliminación en lugar de colocarlo en su búfer (útil para archivos de solo lectura):
fuente