如果文件已经有交换文件,如何在 VIM 中以只读模式打开文件?

Grz*_*icz 6 vim swap files

当我使用该命令:e filename打开一个文件并且该文件已被另一个 vim 实例打开时,我收到一个提示,询问我是否要以只读模式打开该文件、仍然编辑、恢复、退出或中止。

当我尝试:silent! e filename时,vim 似乎挂了。但它确实在问我如何处理交换文件,只是我看不到它,因为我告诉它保持沉默。

如果文件无法以写入模式打开并且不需要用户交互,是否有任何命令可以告诉它以只读模式 打开文件?(我想将其集成到宏中以跳转/打开文件)。

244*_*4an 6

如果你有vim >= 7(我认为)你可以使用autocmdevent SwapExists。在那里你可以做从非常简单的事情到非常复杂的所有事情。
这是一个放在 ~/.vimrc 中的简单示例:

autocmd SwapExists * let v:swapchoice = "o"
Run Code Online (Sandbox Code Playgroud)

如果存在交换文件,将触发此事件。上面的 autocmd 只会以只读模式打开文件。
如果v:swapchoice在 autocmd 中获取值,它不会提示您要执行的操作。您可以使用的值在v:swapchoice 中列出。
有关非常高级的 autocmd,请参见此处:editexisting.vim
从安装 vim 开始,您的服务器上已经存在脚本,搜索editexisting.vim.


whi*_*ile 5

我的脚本中有一个.vimrc正是这样做的。但是,它对所有打开的具有 swp 文件的文件执行此操作。不确定您是否总是想要这种行为。也许您可以对其进行调整以满足您正在编写的宏中的需求。

要在存在 swp 文件的情况下打开 ro,请将其放入您的.vimrc

func CheckSwap()
  swapname
  if v:statusmsg =~ '\.sw[^p]$'
    set ro
  endif
endfunc

if &swf
  set shm+=A
  au BufReadPre * call CheckSwap()
endif
Run Code Online (Sandbox Code Playgroud)

我从这里得到了这个脚本,那里还有一个可能令人感兴趣的更高级的示例。


bag*_*har 1

RHEL 和 ubuntu 中的命令view以只读模式打开 vim,但您可以使用 覆盖只读模式:w!