Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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.

share|improve this question
up vote 35 down vote accepted

For emacs:

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

There's no startup option to force read only.

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)'
share|improve this answer
I wish I could downvote emacs for this. – Robert Calhoun Aug 29 '14 at 15:11

vim -R filename

share|improve this answer
Works great but I accepted Trey's answer because I prefer emacs over vim – Nifle Oct 29 '10 at 6:35
And all vim users take revenge by upvoting it to more than the "accepted answer" :D – Xosofox Nov 11 '15 at 9:33

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)
share|improve this answer
No syntax highlighting though. – Nifle Oct 28 '10 at 11:59
@Nifle: There shouldn't be any difference in syntax highlighting. If your 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. – garyjohn Oct 28 '10 at 15:33
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.

share|improve this answer
+1 for using less, although as @nxdrvr points out you can press the v key to open the file in editiable mode in vi – Sheharyar Jan 19 '15 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.

share|improve this answer

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

share|improve this answer

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 -
share|improve this answer
Thanks for the v suggestion. Nifty. – Tshepang Apr 4 '14 at 9:08
+1, but no need for cat. Just use <FILENAME less. – Sparhawk Oct 9 '14 at 5:07
@Sparkhawk, <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. – Sheharyar Jan 19 '15 at 2:30

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
share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .