如何使用 emacs/vi/vim 从命令行打开只读文件

Nif*_*fle 84 linux vim emacs command-line

有没有办法告诉 emacs/vi/vim(从命令行)我想在view-moderead-only.

我知道如何在 emacs/vi/vim 已经运行时以只读方式打开文件。

Red*_*ick 147

vim -R 文件名

  • 并且所有 vim 用户都通过将其投票超过“接受的答案”来报复:D (33认同)
  • 效果很好,但我接受了 Trey 的回答,因为我更喜欢 emacs 而不是 vim (5认同)

Tre*_*son 51

对于 emacs:

emacs FILE --eval '(setq buffer-read-only t)'
Run Code Online (Sandbox Code Playgroud)

没有强制只读的启动选项。

编辑:
如果你把这个小函数放在你的 shell 启动脚本(例如 .bashrc)中,你可以通过键入来打开一个只读文件ev file_to_view

ev() {
  emacs "$1" --eval '(setq buffer-read-only t)'
}
Run Code Online (Sandbox Code Playgroud)

  • 我希望我可以为此对 emacs 投反对票。 (11认同)
  • 另请参阅 [emacs FILE -f view-mode](https://superuser.com/a/1293797/568188) 答案。 (3认同)
  • 要打开多个文件,必须在每个文件名后重复“-eval ...”,否则仅以只读方式打开列表中的最后一个文件。 (2认同)

小智 26

查看文件名

基本上 vim 处于只读模式;简单!

正如评论所暗示的,如果view链接到 plain vi,这里是bash命令,首先检查情况然后修复它:

# 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)
Run Code Online (Sandbox Code Playgroud)

  • @Nifle:语法突出显示应该没有任何区别。如果你的 `vim` 有语法高亮显示而你的 `view` 没有,那么你的 `view` 可能是一个没有编译语法高亮显示的 `vim` 的最小版本的链接。比较 ` 的输出:版本`命令。 (7认同)

Jay*_*Jay 10

vim -R <file>
Run Code Online (Sandbox Code Playgroud)

允许写作 :w!

vim -c ":set nomodifiable"  <file>
Run Code Online (Sandbox Code Playgroud)

防止用户对缓冲区中的文件进行任何更改。但是用户可以使缓冲区可修改:set modifiable

你可以用

vim -c ":noremap q :q<cr>" -c ":map : <Esc>" -c ":set nomodifiable" <file>
Run Code Online (Sandbox Code Playgroud)

防止用户关闭“不可修改”,并允许用户通过按退出q。但是,用户根本无法进入命令模式,这可能是您想要的,也可能不是。

您还可以使用 less 命令打开文件:

less <file>
Run Code Online (Sandbox Code Playgroud)

在类似 vim 的环境中查看文件但不能更改文件。


小智 9

接受的答案的小后续:您可以在 shell 中为它设置别名,以将其简化为单个命令。例如,在 bash 中,您可以将以下内容放入 .bashrc:

emacsro() {
  emacs $1 --eval '(setq buffer-read-only t)'
}
Run Code Online (Sandbox Code Playgroud)

(不同的外壳会有不同的格式来执行此操作,但您明白了)

我会将此添加为对已接受答案的回复的评论,但似乎不可能在评论中包含多行“代码”块,并且(无论如何在 bash 中)上面的代码确实需要在 3 个单独的行上。


小智 6

要仅查看文件而无法编辑:

cat <file> | less
Run Code Online (Sandbox Code Playgroud)

less您可以通过按v键进入“编辑文件模式” 。但是您无法编辑标准输入,因此将输出管道cat <file>传输到less,less在按“v”时停止进入“编辑”模式。

对于 vim 相同的方法

cat <file> | vim -
Run Code Online (Sandbox Code Playgroud)

  • 感谢`v` 的建议。漂亮。 (4认同)
  • +1,但不需要`cat`。只需使用`&lt;FILENAME less`。 (2认同)

小智 6

在 emacs 中你可以这样做

emacs FILE -f view-mode
Run Code Online (Sandbox Code Playgroud)

应用语法突出显示。它不只是将文件作为只读缓冲区打开。在此模式下,无需使用控制键即可访问某些命令,例如 I-search。


小智 5

对于 emacs,您还可以使用view-mode

emacsclient --create-frame --eval '(view-file "/tmp/EXAMPLE")'
Run Code Online (Sandbox Code Playgroud)

或终端内的替代方案:

emacsclient --nw --eval '(view-file "/tmp/EXAMPLE")'
Run Code Online (Sandbox Code Playgroud)

或者你可以使用我的包装脚本