¿Cómo puedo abrir un archivo de solo lectura desde la línea de comandos con emacs / vi / vim


79

¿Hay alguna manera de decirle a emacs / vi / vim (desde la línea de comandos) que quiero ver el archivo en view-modeo read-only.

Sé cómo abrir un archivo como de lectura solo si emacs / vi / vim ya se está ejecutando.


Nota: si no tiene permiso de escritura para el archivo, Vim lo abrirá de manera predeterminada en modo de solo lectura. En realidad, creo que es más fácil controlar el permiso de archivo que proporcionar una forma de "solo lectura".
Franklin Yu

Respuestas:


45

Para emacs:

emacs FILE --eval '(setq buffer-read-only t)'

No hay opción de inicio para forzar solo lectura.

Editar:
si coloca esta pequeña función en su script de inicio de shell (.bashrc, por ejemplo), puede abrir un archivo de solo lectura escribiendoev file_to_view

ev() {
  emacs "$1" --eval '(setq buffer-read-only t)'
}

11
Desearía poder votar por emacs por esto.
Robert Calhoun

145

vim -R nombrearchivo


44
Funciona muy bien, pero acepté la respuesta de Trey porque prefiero emacs sobre vim
Nifle

32
Y todos los usuarios de vim se vengan al votar a más de la "respuesta aceptada": D
Xosofox

1
Nota: algunos cuadros parecen tener el comando 'ver', tal vez alias a 'vi -R'.
armyofda12mnkeys

26

ver nombre de archivo

Básicamente vim en modo de solo lectura; simples!

Como lo indica el comentario, en caso de que viewesté vinculado a simple vi, aquí hay comandos bash para inspeccionar primero la situación y luego solucionarla:

# non-destructive inspection
which vim
which view
ls -l $(which view)

# overwrite current view with symlink to vim, requires root
ln -sfv $(which vim) $(which view)

1
Sin embargo, no hay resaltado de sintaxis.
Nifle

77
@Nifle: No debería haber ninguna diferencia en el resaltado de sintaxis. Si vimtiene resaltado de sintaxis pero viewno lo tiene, quizás su viewes un enlace a una versión mínima vimque no tiene resaltado de sintaxis compilado. Compare las salidas del :versioncomando.
garyjohn

1
Razón por la que "simplemente funciona": Vim realmente leerá argv[0]para decidir su comportamiento. Es un truco común; AFAIK a veces GCC y Bash también hacen esto.
Franklin Yu

10
vim -R <file>

permite escribir con :w!

vim -c ":set nomodifiable"  <file>

Impide que el usuario realice cambios en el archivo en el búfer. Pero el usuario podría modificar el búfer con:set modifiable

Podrías usar

vim -c ":noremap q :q<cr>" -c ":map : <Esc>" -c ":set nomodifiable" <file>

para evitar que el usuario desactive la opción "nomodificable" y permitir que el usuario salga presionando q. Pero, entonces, el usuario no puede ingresar al modo de comando, lo que puede o no ser lo que desea.

También puede abrir el archivo con el comando less:

less <file>

Para ver el archivo en un entorno similar a vim pero sin la capacidad de cambiar el archivo.


1 para el uso less, aunque como señala @nxdrvr puede pulsar el v llave para abrir el archivo en modo editiable envi
Sheharyar

9

Pequeño seguimiento de la respuesta aceptada: puede alias esto en su shell para reducirlo a un solo comando. Por ejemplo, en bash puedes poner lo siguiente en tu .bashrc:

emacsro() {
  emacs $1 --eval '(setq buffer-read-only t)'
}

(diferentes shells tendrán diferentes formatos para hacer esto, pero entiendes la idea)

Hubiera agregado esto como un comentario en respuesta a la respuesta aceptada, pero no parecía posible tener un bloque de "código" de varias líneas en un comentario, y (en bash de todos modos) el código anterior realmente necesita ser en 3 líneas separadas.


6

Para ver el archivo sin posibilidad de editarlo:

cat <file> | less

En lesspuede ir al "modo de edición de archivos" presionando la vtecla. Pero no puede editar la entrada estándar, por lo que canalizar la salida cat <file>a menos, deja lessde ir al modo 'editar' al presionar 'v'.

Para vim el mismo enfoque

cat <file> | vim -

44
Gracias por la vsugerencia Hábil.
tshepang

2
+1, pero no es necesario cat. Solo úsalo <FILENAME less.
Sparhawk

@Sparkhawk, <file> lessdaría un error, supongo que lo dices en serio less <file>, pero como se explica en la respuesta, cuando se usa lessdirectamente, el usuario podría presionar la tecla v y entrar en modo de edición. La tubería cata lessevita que esto suceda.
Sheharyar

@Sheharyar Se refería a la redirección de salida. Tal vez usted está más familiarizado con less < FILENAME, que le da "No se puede editar la entrada estándar" cuando se presiona V . Lo mismo ocurre con Vim: vim - < FILENAME.
Franklin Yu

4

Para emacs también puede usar el modo de vista .

emacsclient --create-frame --eval '(view-file "/tmp/EXAMPLE")'

o alternativa dentro de una terminal:

emacsclient --nw --eval '(view-file "/tmp/EXAMPLE")'

O puedes usar mi script de envoltura


1

En emacs puedes hacer

emacs FILE -f view-mode

Se aplica el resaltado de sintaxis. No solo abre el archivo como un búfer de solo lectura. Algunos comandos, como I-search, son accesibles sin la tecla de control en este modo.


0

enviar un archivo a std, puede ser aceptable dado el tamaño del archivo

cat <file>  # dump whole file to stdout
head <file> # view the first few lines
tail <file> # view the last n lines

0

No voy a descartar la respuesta de ningún usuario aquí, pero me gustaría agregar más información sobre el Read-only Modearchivo. Según la documentación de oreilly Modo de solo lectura Habrá ocasiones en que desee mirar un archivo pero desee protegerlo de las pulsaciones y cambios inadvertidos. (Es posible que desee llamar a un archivo largo para practicar movimientos vi, o puede que desee desplazarse a través de un archivo de comando o programa). Puede ingresar un archivo en modo de solo lectura y usar todos los comandos de movimiento vi, pero no podrá cambiar el archivo.

Para ver un archivo en modo de solo lectura, ingrese:

$ vi -R file

o:

$ view file

(El comando de vista, como el comando vi, puede usar cualquiera de las opciones de la línea de comandos para avanzar a un lugar específico en el archivo). Si decide realizar algunas modificaciones en el archivo, puede anular el modo de solo lectura al agregando un signo de exclamación al comando de escritura:

:w!
or:

:wq!

Si tiene problemas para escribir el archivo.

Para más información aquí

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.