Vim:如何同步缓冲区和磁盘上文件的只读状态

4

我正在使用Perforce,我的客户端中所有文件默认都是只读的。因此,当我在vim中浏览源代码时,缓冲区也被标记为只读(可能这不是一个准确的措辞:我可以编辑它的内容,但不能保存,除非加上'!')。在某个时刻,我开始进行一些编辑,并发现我必须在Perforce中检出文件。我有一个“好”的命令可以做到这一点:

command PE !p4 edit % 

但是在vim完成编辑后,它会提供以下两个选项之一:
  1. 从磁盘加载内容(我不想这样做,因为我将失去我的编辑)。
  2. 或保持缓冲区不变,但这会保留只读模式(我也不想要)。
当然,我可以通过执行:set noro来手动更改只读模式,但显然想避免这种情况。目前我已将其添加到上面的PE命令中,但这并没有检查文件的真实状态,似乎有点危险。
command PE !p4 edit % | set noro

我真正想要的是vim中文件在磁盘上和缓冲区之间的“真正”的只读状态同步。
更新:神奇的是,最新版本可以直接使用--如果p4 edit失败,则不会删除缓冲区的RO状态。不知道它是如何工作的...
1个回答

1

Vim有一个filewritable()函数来查询文件的访问状态,为什么不使用它?

command PE execute '!p4 edit %' | let &readonly = !filewritable(expand('%'))

我尝试了一下,现在PE只会显示“E34:没有先前的命令”。有什么想法吗? - anxieux
哦,:! 需要 :execute;你的尝试在这方面也是错误的。请看我的编辑。 - Ingo Karkat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接