当我使用命令:e filename
打开文件并且该文件已被另一个 vim 实例打开时,我收到一条提示,询问我是否要在以下位置打开该文件只读模式,无论如何编辑、恢复、退出或中止。
当我尝试时,:silent! e filename
vim 似乎挂起了。但它确实在问我如何处理交换文件,只是我看不到它,因为我告诉它保持沉默。
有什么命令可以告诉它打开文件只读模式 如果该文件无法以写入模式打开并且不需要用户交互? (我想将其集成到宏中以跳转/打开文件)。
答案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!
。