当我使用该命令:e filename
打开一个文件并且该文件已被另一个 vim 实例打开时,我收到一个提示,询问我是否要以只读模式打开该文件、仍然编辑、恢复、退出或中止。
当我尝试:silent! e filename
时,vim 似乎挂了。但它确实在问我如何处理交换文件,只是我看不到它,因为我告诉它保持沉默。
如果文件无法以写入模式打开并且不需要用户交互,是否有任何命令可以告诉它以只读模式 打开文件?(我想将其集成到宏中以跳转/打开文件)。
如果你有vim >= 7(我认为)你可以使用autocmd
event 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
.
我的脚本中有一个.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)
我从这里得到了这个脚本,那里还有一个可能令人感兴趣的更高级的示例。