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.
Super User is a question and answer site for computer enthusiasts and power users. It only takes a minute to sign up.
Sign up to join this communityIs 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)'
}
emacs --eval "(add-hook 'find-file-hook (defun make-read-only () (setq buffer-read-only t)))" file1 file2 ...
vim -R filename
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
has syntax highlighting but your view
doesn't, perhaps your view
is a link to a minimal version of vim
that doesn't have syntax highlighting compiled in. Compare the outputs of the :version
command.
argv[0]
to decide its behavior. It's a common trick; AFAIK sometimes GCC and Bash does this as well.
Aug 2, 2016 at 22:57
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.
less
, although as @nxdrvr points out you can press the v key to open the file in editiable mode in vi
Jan 19, 2015 at 2:11
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.
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 -
<file> less
would give an error, I'm assuming you meant less <file>
, but as explained in the answer, when using less
directly, the user could press v key and go into edit-mode. Piping cat
to less
stops this from happening.
Jan 19, 2015 at 2:30
less < FILENAME
, which gives you "Cannot edit standard input" when you press V. Similarly with Vim: vim - < FILENAME
.
Aug 2, 2016 at 22:45
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.
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
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