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

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

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

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

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

答案1

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

autocmd SwapExists * let v:swapchoice = "o"

如果交换文件存在,则会触发该事件。上面的 autocmd 只会以只读模式打开文件。
如果v:swapchoice在 autocmd 中获取一个值,它将不是提示您想要做什么。此处列出了您可以使用的值v:交换选择
对于非常高级的 autocmd 请参阅此处:编辑现有的.vim
安装 vim 后,该脚本可能已经存在于您的服务器上,搜索editexisting.vim.

答案2

我的脚本中有一个.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

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

答案3

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

相关内容