Vim:在磁盘上的缓冲区和文件之间同步只读状态

时间:2014-08-18 15:43:06

标签: vim readonly

我正在使用Perforce,默认情况下,我客户端中的所有文件都是只读的。因此,当我浏览vim缓冲区中的源代码时,也会将其标记为只读(可能这不是一个准确的措辞:我可以编辑其内容,但不能在没有'!' )。在某些时候,我开始做一些编辑,发现我必须在Perforce中签出文件。我有一个很好的'命令:

command PE !p4 edit % 

但是在完成后,vim为我提供了选择:

  1. 从磁盘加载内容(我不想这样做,因为我会丢失我的编辑内容)。
  2. 或保持缓冲区原样,但这保留了只读模式(我也不想要)。
  3. 当然我可以通过:set noro手动更改RO,但显然希望避免这种情况。 目前我已将其添加到上面的PE命令中,但这并没有检查文件的实际状态,因此似乎有点危险:

    command PE !p4 edit % | set noro
    

    我真正想要的是" true"同步磁盘上的文件和vim中的缓冲区之间的只读状态。


    UPD:神奇地说,最后一个版本开箱即用 - 如果p4 edit失败,则不会删除缓冲区上的RO状态。没有想法它是如何工作的......

1 个答案:

答案 0 :(得分:1)

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

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