Bloqueo de cambios en el archivo de solo lectura

14

Al usar Vim para editar un archivo de solo lectura, solo proporcionará una advertencia la primera vez que se edite, pero permitirá que se realicen cambios. Puedo entender que este comportamiento podría ser útil para alguien con la intención de guardar el archivo con otro nombre; pero a veces abro archivos a los que no tengo acceso de escritura, luego olvido y hago cambios.

¿Es posible ingresar a un modo en el que Vim permitirá ver el archivo pero bloqueará cualquier opción que realice cambios?

ZeroKelvinKeyboard
fuente

Respuestas:

13

Encontré una solución. La configuración nomodifiableevita que el archivo se edite (como se usa en las ventanas de ayuda). Creé una función simple para configurar o desarmar modifiabledependiendo de si readonlyestá configurada y la adjunté a un autocmd.

" Don't allow editing of read only files
autocmd BufRead * call RONoEdit()

function! RONoEdit()
  if &readonly == 1
    set nomodifiable
  else
    set modifiable
  endif
endfunction
ZeroKelvinKeyboard
fuente
44
Puede hacerlo más corto haciendo:let &modifiable = !&readonly
Martin Tournoij
@Carpetsmoker Mucho mejor como un trazador de líneas, ¡gracias! Sin embargo, todavía tendría que ser: autocmd BufRead * let &modifiable = !&readonly
ZeroKelvinKeyboard
Con esto, después de abrir un readonlyarchivo y luego crear un nuevo búfer, el nuevo búfer termina nomodifiable.
Praxeolitic
Gracias por señalar eso, no me había dado cuenta. No estoy seguro de cómo probar un nuevo búfer.
ZeroKelvinKeyboard
1
@Praxeolitic: Acabo de publicar una respuesta que debería abordar esto, avíseme si funciona.
s4y
7

Agregue esto a su .vimrc:

autocmd BufRead * let &l:modifiable = !&readonly
s4y
fuente
Esto se basa en la respuesta de @ ZeroKelvinKeyboard para afectar solo el búfer actual.
s4y
0

Si bien las respuestas anteriores son correctas, hay otra cosa a tener en cuenta: siempre que el archivo sea de "solo lectura", no debería haber forma de cambiar el contenido del archivo a menos que usted sea el propietario del archivo o tiene derecho a hacer que ese archivo sea editable. E incluso entonces, vim no escribe cambios en el archivo a menos que anule explícitamente el estado "solo lectura" por ": w!".

Si de hecho puede editar un archivo que se supone que es de solo lectura, es posible que desee volver a verificar los derechos, puede haber una mala configuración de seguridad. Si solo hace que vim no pueda editar el archivo, otras formas de edición seguirán vigentes, por lo que si el archivo no se va a cambiar, debe tener los derechos establecidos correctamente. En Windows, puede forzar que el archivo sea de solo lectura al negar explícitamente el cambio a todos, en Linux puede usar el atributo extendido "inmutable" (chattr + i).

mikky
fuente
2
Lo siento si no estaba muy claro. Esta pregunta no se trataba de cambiar accidentalmente un archivo de solo lectura; Quería evitar editar el búfer de un archivo para el que no tenía acceso de escritura. A veces, accidentalmente abro los archivos de configuración del sistema como usuario normal en lugar de como usuario root. En este caso, no tengo acceso de escritura al archivo, por lo que el búfer aparece como de solo lectura, pero Vim todavía me permitirá editar el búfer. Cuando intento guardar no puedo porque no tengo acceso de escritura. Quería que Vim bloqueara los cambios en el búfer en este caso.
ZeroKelvinKeyboard
Ah, ya veo. Tengo la idea de que querías esto como a prueba de fallos. Ignora mi respuesta entonces :)
mikky 01 de
OP significa que cuando uno abre un archivo de solo lectura en el sistema operativo, pero actualmente no quiere (o considera apropiado) hacer cambios, y quiere restringirse a sí mismo para no hacerlo. Estoy pensando exactamente lo mismo, ¡así que voy desde Google!
Violapterin