¿Hay alguna manera de cambiar el nombre de un archivo abierto en Emacs? Mientras lo estoy viendo? Algo así como guardar como, pero el original debería desaparecer.
237
Pruebe esta función de .emacs de Steve Yegge :
;; fuente: http://steve.yegge.googlepages.com/my-dot-emacs-file (defun rename-file-and-buffer (nombre-nuevo) "Renombra tanto el búfer actual como el archivo que está visitando a NEW-NAME". (interactivo "sNuevo nombre:") (let ((nombre (nombre del búfer)) (nombre de archivo (nombre-archivo-búfer))) (if (no nombre de archivo) (mensaje "Buffer '% s' no está visitando un archivo!" nombre) (if (get-buffer new-name) (mensaje "¡Ya existe un buffer llamado '% s'!" new-name) (progn (renombrar-archivo nombrearchivo nuevo-nombre 1) (rename-buffer new-name) (nombre-archivo-visitado-nuevo nombre-nuevo) (set-buffer-modified-p nil))))))
Eche un vistazo a esa página, hay otra función relacionada realmente útil allí, llamada "move-buffer-file".
(setq uniquify-buffer-name-style 'forward)
significado si tiene un búfer llamadousers\index.html
(porque ya tiene otro búfer paraposts\index.html
), el cambio de nombre fallará(set-buffer-modified-p nil)
Parece innecesario Si solicitórename-file-and-buffer
un búfer modificado y luego intentó matarlo, lo haría felizmente sin advertirle sobre cambios no guardados.Sí, con el
dired
modo, puedes:C-x d
abrir diredRET
para seleccionar el directorio del archivo actualC-x C-j
(dired-jump
al nombre del archivo actual, en Dired)R
cambiar el nombre del archivo (odired-do-rename
).q
para volver al búfer de archivo (renombrado)El cambio de nombre es equivalente a un shell
mv
, pero también actualizará cualquier búfer abierto y, a diferencia demv
esto, no cambiará el acceso ni modificará los tiempos del archivo en el sistema de archivos.fuente
C-x C-j
no está vinculado por defecto para mí. HacerM-x load-library RET dired-x RET
primero lo obliga.C-x C-j
no está consolidada es simplemente hacerloM-x dired-jump
por primera vez. Se cargará automáticamentedired-x
(lo que también haráC-x C-j
que se defina a partir de este punto).Solo para completar, ya que algunas personas pueden visitar esta página pensando que obtendrán una respuesta para la función "guardar como" de Emacs, eso es Cx Cw para un archivo abierto.
fuente
File > Save as...
Mi favorito es el de Magnars (de emacs rocks screencasts fame).
A diferencia de las otras alternativas, no tiene que escribir el nombre desde cero: obtiene el nombre actual para modificar.
Gracias a James Yang por una versión correcta.
fuente
Aquí hay una versión más robusta adaptada de stevey.
fuente
Aquí hay otra versión, que es bastante robusta y VC:
Puedes leer más sobre esto aquí .
fuente
Si está utilizando Spacemacs , obtiene este comportamiento de forma gratuita, ya que viene con una implementación de
rename-current-buffer-file
(basada en magnars) que de forma predeterminada está vinculadaSPC-f-R
.https://github.com/syl20bnr/spacemacs/blob/bd7ef98e4c35fd87538dd2a81356cc83f5fd02f3/layers/%2Bdistributions/spacemacs-base/funcs.el#L294
fuente
Hay una manera muy fácil, presionas el comando Mx y luego escribes vc-rename-file , después de eso solo necesitas seleccionar tu archivo actual en el directorio, y luego elegir el nuevo nombre. El beneficio que tiene el archivo modificado se actualizará.
Fuente: https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Delete_002fRename.html
fuente
basado en la versión de Magnars, modifiqué como a continuación, arreglé la parte del nombre del archivo INIT:
fuente
Se puede lograr mediante copia. shift + c en el archivo y emacs le pedirá que denote un nombre para la ruta, incluido el nombre del archivo, por lo que solo debe proporcionar el nuevo nombre e ingresar ... por supuesto, debe eliminar el anterior.
fuente