Si un archivo está configurado para modo de solo lectura, ¿cómo lo cambio al modo de escritura y viceversa desde dentro de Emacs?¿Cómo cambio el modo de lectura/escritura para un archivo usando Emacs?
Respuesta
Mx toggle-read-only
o en versiones más recientes de Emacs
Mx sólo lectura en modo
En mi caja de Windows, que las cantidades a Alt-x para que aparezca el indicador de meta y escriba "alternar-leer-solo" para llamar a la función elisp correcta.
Si está utilizando los enlaces de teclado por defecto,
C-x C-q
(que se lee en voz alta como "Control-X Control-Q") tendrá el mismo efecto. Recuerde, sin embargo, dado que emacs es esencialmente infinitamente reconfigurable, su millaje puede variar.
En seguimiento al comentario:, debe tener en cuenta que el estado de escritura del búfer no cambia el permiso de escritura del archivo. Si intenta escribir en un archivo de solo lectura , verá un mensaje de confirmación. Sin embargo, si posee el archivo, puede escribir sus cambios sin cambiando los permisos en el archivo.
Esto es muy conveniente si desea realizar un cambio rápido en un archivo sin tener que pasar por los múltiples pasos de agregar permiso de escritura, escribir cambios, eliminar permiso de escritura. Tiendo a olvidar ese último paso, dejando archivos potencialmente críticos abiertos para cambios accidentales más adelante.
CTRL + X +CTRL + Q
asegurarse de que no está confuso 'archivo' con 'buffer'. Puede configurar almacenamientos intermedios para que sean de solo lectura y viceversa con C-x C-q
(toggle-read-only
). Si tiene permiso para leer, pero no escribe, un archivo, el búfer que obtiene cuando visita el archivo (C-x C-f
o find-file
) se pondrá automáticamente en modo de solo lectura. Si desea cambiar los permisos de un archivo en el sistema de archivos, quizás comience con dired
en el directorio que contiene el archivo. La documentación para dired se puede encontrar en la información; C-h i (emacs)dired RET
.
Si solo el búfer (y no el archivo) es de solo lectura, puede usar toggle-read-only
, que generalmente está vinculado a C-x C-q
.
Si el archivo en sí es, sin embargo, es posible que la siguiente función de utilidad de sólo lectura:
(defun set-buffer-file-writable()
"Make the file shown in the current buffer writable.
Make the buffer writable as well."
(interactive)
(unix-output "chmod" "+w" (buffer-file-name))
(toggle-read-only nil)
(message (trim-right '(?\n) (unix-output "ls" "-l" (buffer-file-name)))))
La función depende de unix-output
y trim-right
:
(defun unix-output (command &rest args)
"Run a unix command and, if it returns 0, return the output as a string.
Otherwise, signal an error. The error message is the first line of the output."
(let ((output-buffer (generate-new-buffer "*stdout*")))
(unwind-protect
(let ((return-value (apply 'call-process command nil
output-buffer nil args)))
(set-buffer output-buffer)
(save-excursion
(unless (= return-value 0)
(goto-char (point-min))
(end-of-line)
(if (= (point-min) (point))
(error "Command failed: %s%s" command
(with-output-to-string
(dolist (arg args)
(princ " ")
(princ arg))))
(error "%s" (buffer-substring-no-properties (point-min)
(point)))))
(buffer-substring-no-properties (point-min) (point-max))))
(kill-buffer output-buffer))))
(defun trim-right (bag string &optional start end)
(setq bag (if (eq bag t) '(?\ ?\n ?\t ?\v ?\r ?\f) bag)
start (or start 0)
end (or end (length string)))
(while (and (> end 0)
(member (aref string (1- end)) bag))
(decf end))
(substring string start end))
lugar las funciones de su ~/.emacs.el
, evaluarlos (o reiniciar emacs). A continuación, puede hacer que el archivo en el búfer actual se pueda escribir con M-x set-buffer-file-writable
.
Cuando intento compilar mis .emacs con este código, aparece el mensaje "Advertencia: save-excursion derrotado por set-buffer". – Alan
@Alan, editado para poner 'set-buffer' fuera de' save-excursion'. –
gracias por ese cambio, que eliminó la advertencia. Sin embargo, hay otro: "Advertencia: Función 'subseq' del paquete cl llamado en tiempo de ejecución." No pude deshacerme de eso incluso cuando agregué (eval-when-compile (require 'cl)) a mis .emacs. – Alan
Probé la solución de Vebjorn Ljosa, y resultó que al menos en mi Emacs (22.3.1) no hay una función como 'recortar-derecha', que se utiliza para eliminar una nueva línea inútil al final de la salida de chmod
Eliminar la llamada a 'recortar-derecha' ayudó, pero hizo que la fila de estado "rebote" debido a la nueva línea adicional.
Se olvidó de incluirlo ... agregado ahora. –
Lo que encontré es M-x set-file-modes filename mode
Se trabajó en mi caja de Windows Vista. Por ejemplo: M-x set-file-modes <RET> ReadOnlyFile.txt <RET> 0666
En mi opinión, esta es la respuesta correcta a la pregunta exacta. –
En elisp, esto funcionó: '(set-file-modes FILE 438)' (donde 438 es el equivalente decimal de '2 # 0110110110' o' 666'). –
Si usted está buscando en un directorio de archivos (dired), entonces se puede utilizar Shift + M
en un nombre de archivo y entrar en el modespec
, los mismos atributos que se utilizan en el comando chmod
.
M modespec <RET>
Ver los otros comandos útiles en los archivos de una lista de directorios en http://www.gnu.org/s/libtool/manual/emacs/Operating-on-Files.html
Como se ha mencionado arriba allí por otra persona: M-x de palanca lectura de sólo funcionaría.
Sin embargo, esto es ahora obsoleto y M-x solamente en modo lectura es la forma actual para hacerlo, que se establece en C-x C-q combinación de teclas.
C-x C-q
es inútil. Porque también necesita el permiso para guardar un archivo.
Yo uso Spacemacs. Me da una función conveniente para resolver esta pregunta. El código está siguiendo.
(defun spacemacs/sudo-edit (&optional arg)
(interactive "p")
(if (or arg (not buffer-file-name))
(find-file (concat "/sudo:[email protected]:" (ido-read-file-name "File: ")))
(find-alternate-file (concat "/sudo:[email protected]:" buffer-file-name))))
llamo spacemacs/sudo-edit
para abrir un archivo en emacs y entrada de contraseña, puedo cambiar el archivo sin el modo de sólo lectura.
Puede escribir una nueva función como spacemacs/sudo-edit
.
- 1. ¿Cómo usar el modo nxml de emacs para validar cierto archivo xml usando el esquema xsd?
- 2. declarando el modo un archivo emacs debe abrirse en
- 3. ¿Cómo puedo corregir un cambio en el modo javascript en emacs 24?
- 4. Emacs: importe un archivo CSV en el modo orgánico
- 5. Modo Emacs para R?
- 6. ¿Cómo cambio la letra de la unidad en el modo ido (Emacs)?
- 7. Autocompletado de Haskell en Emacs usando el modo haskell
- 8. Modo vagabundo en emacs usando ssh config
- 9. modo de PHP para Emacs
- 10. ¿Hay un modo Emacs para Rscript?
- 11. Modo Emacs para un lenguaje c-like
- 12. Modo git recomendado para Emacs
- 13. ¿Hay un modo BNF para Emacs?
- 14. Cómo deshabilitar Emacs-Flymake para el modo html
- 15. ¿Hay un modo Intercal para GNU Emacs?
- 16. Modo Emacs JS para el estilo npm
- 17. Pregunta del modo Emacs
- 18. ¿Bloquea Emacs el modo menor?
- 19. Cómo obtener el modo mmm para trabajar en emacs 24
- 20. ¿El mejor modo Mercurial para Emacs?
- 21. Emacs, R, modo Org: cómo habilitar el cambio automático al modo ESS dentro de los bloques de código R?
- 22. Emacs Modo ESS - Tabbing para comentario Región
- 23. Modo principal GLSL para Emacs?
- 24. .emacs ¿Editar para iniciar siempre Emacs en modo terminal?
- 25. Mirar un archivo para el cambio
- 26. Emacs pitón modo
- 27. ¿Cómo puedo verificar si existe un archivo usando Emacs Lisp?
- 28. ¿Modo de autocompletado de Emacs para Groovy?
- 29. Modo plegable persistente de Emacs
- 30. ¿Cómo se usa C-x k para matar un búfer de Emacs abierto en modo servidor?
Hola, como se indica en la respuesta de jfm3 'toggle-read-only' solo se alterna el estado de solo lectura del búfer que no está en el archivo. Si desea cambiar el modo del archivo, use 'dired' o ejecute' chmod + w' como un comando de shell en el archivo. – danielpoe
Es cierto, así es como cambiaría el modo. Sin embargo, si alternas el modo de solo lectura en un búfer que apunta a un archivo de solo lectura que posees, podrás editarlo y escribir tus cambios (habrá una pregunta de confirmación, por supuesto). –
Seguido de los comentarios anteriores y texto agregado a la respuesta. –