Is there a way to tell emacs/vi/vim (from the command line) that I want to view the file in view-mode or read-only.
I know how to open a file as read only if emacs/vi/vim is already running.
Is there a way to tell emacs/vi/vim (from the command line) that I want to view the file in view-mode or read-only.
I know how to open a file as read only if emacs/vi/vim is already running.
For emacs:
emacs FILE --eval '(setq buffer-read-only t)'
There's no startup option to force read only.
Edit:
If you put this small function in your shell startup script (.bashrc for example) you can open a file read-only by typing ev file_to_view
ev() {
emacs "$1" --eval '(setq buffer-read-only t)'
}
view filename
Basically vim in read-only mode; simples!
As hinted by comment, in case view is linked to plain vi, here are bash commands to first inspect situation and then fix it:
# 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)
vim -R <file>
allows writing with :w!
vim -c ":set nomodifiable" <file>
Prevents the user from making any changes to the file in the buffer. But the user could make the buffer modifiable with :set modifiable
You could use
vim -c ":noremap q :q<cr>" -c ":map : <Esc>" -c ":set nomodifiable" <file>
to prevent the user from turning off the "nomodifiable", and allow the user to quit by pressing q. But, then the user can't enter command mode at all, which may or may not be what you want.
You could also open the file with the less command:
less <file>
To view the file in a vim-like environment but without the ability to change the file.
Small follow-up to the accepted answer: You can alias this in your shell to reduce it to a single command. For example in bash you can put the following in your .bashrc:
emacsro() {
emacs $1 --eval '(setq buffer-read-only t)'
}
(different shells will have different formats for doing this, but you get the idea)
I would have added this as a comment in reply to the accepted answer, but it didn't seem possible to have a multi-line "code" block in a comment, and (in bash anyway) the above code really does need to be on 3 separate lines.
In emacs you can do
emacs FILE -f view-mode
Syntax highlighting is applied. It doesn't just open the file as a read only buffer. Some commands, such as I-search, are accessible without the control key in this mode.
For emacs you can also use the view-mode.
emacsclient --create-frame --eval '(view-file "/tmp/EXAMPLE")'
or alternative inside a terminal:
emacsclient --nw --eval '(view-file "/tmp/EXAMPLE")'
Or you can use my wrapper script
To just view file without ability to edit:
cat <file> | less
In less you can go to "edit file mode" by pressing the v key. But you cannot edit standard input, so piping the output of cat <file> to less, stops less from going to 'edit' mode on pressing 'v'.
For vim the same approach
cat <file> | vim -
I use emacsclient to speed up opening my files in Emacs. But emacsclient does not have a dedicated flag for read-only mode, nor is it possible to combine a filename with eval string. So I use an eval string to both open a file and apply read-only mode to it.
I achieved the following behavior:
$ ero my-file.txt
opens emacsclient in read-only mode.
This is by defining a zsh function in my ~/.zshrc:
ero() {
emacsclient --eval "(find-file-read-only \"$1\")"
}
I tested this with files both with and without spaces in the filename. Works like a charm.
I am not going to discrad to anyone user answer here, but i would like to aadd some more info about Read-only Mode file. As per oreilly documentation Read-only Mode There will be times when you want to look at a file but want to protect that file from inadvertent keystrokes and changes. (You might want to call in a lengthy file to practice vi movements, or you might want to scroll through a command file or program). You can enter a file in read-only mode and use all the vi movement commands, but you won't be able to change the file.
To look at a file in read-only mode, enter either:
$ vi -R file
or:
$ view file
(The view command, like the vi command, can use any of the command-line options for advancing to a specific place in the file.) If you do decide to make some edits to the file, you can override read-only mode by adding an exclamation point to the write command:
:w!
or:
:wq!
If you have a problem writing out the file.
For further ref here
sending a file to std out, may be acceptable given the size of the file
cat <file> # dump whole file to stdout
head <file> # view the first few lines
tail <file> # view the last n lines