为什么窗口分裂强制只读?

时间:2012-01-08 23:50:38

标签: vim

我正在使用vim进行编程。在一天开始时,我将打开一个文件并继续进行几个窗口拆分并将一些文件打开到缓冲区中,以便它们随时可用。直到最近,这才起作用。

在过去一周左右,情况发生了变化;我的一个可写缓冲区正在切换到只读,我不明白为什么。这是命令序列:

  1. 打开fileA.h
  2. vsplit ./
  3. open fileA.cpp
  4. C-w C-w切换到包含fileA.h的窗口
  5. sp ./
  6. 对于步骤1-4,所有窗口都是可编辑的。当我执行步骤5时,新文件浏览窗口是只读的(如预期的那样),但现在持有fileA.cpp的窗口也被标记为只读。 fileA.h仍然可以编辑。为什么会这样?

    为了让我更加困惑,如果我不做第4步就没有问题(即我将窗口分开,而不是fileA.h)。另外,如果我在步骤5中执行'sp fileB.h'而不是先拆分到文件浏览器,那么就没有问题。

1 个答案:

答案 0 :(得分:34)

看起来这可能是netrw插件中的一个错误。我测试了几个版本的netrw和两个版本的Vim 7.3(MacPorts vim 7.3-353和MacPorts MacVim“snapshot64”7.3-390):

  • v140(包含在MacPorts vim中:7.3-353)
    仅使用MacPorts vim版本进行测试。
  • v141(来自vim.org/scripts netrw page
  • v142(来自vim.org/scripts netrw页面)
  • v143(包含在MacPorts MacVim中:7.3-390)
    仅使用MacPorts MacVim版本进行测试。
  • v144b(从netrw author’s Vim page预发布)

您可以使用:let g:loaded_netrwPlugin检查有效的netrw版本。

v140到v142在复制你的场景时都有合理的行为:

  • 只有netrw缓冲区(来自sp .;右侧,上方窗口)是只读的 左侧窗口中的fileA.cpp缓冲区仍为非只读。

使用v143和v144b,我能够重现您的行为:

  • netrw缓冲区(右侧,上部窗口)和fileA.cpp缓冲区(左侧)都变为只读。
  • 此外(即未通过OP报告,但看似相关),左侧的fileA.cpp窗口成为活动窗口。
    通常,右侧上窗口(sp .中的一个)应该是活动的。

fileA.cpp窗口最初是一个netrw窗口(来自vsp .)。我的猜测是v143和v144b中的某些内容由于某种原因重置旧窗口有点过于热心(它可能根本不应该触及那个窗口)。 sp fileB.h通过不调用netrw来避免这个问题(即问题不在于拆分窗口,而是在创建目录列表缓冲区时netrw所做的事情。)


如果你的问题来自netrw(即你的行为符合我的描述,你的目录列表缓冲区在第二行有Netrw Directory Listing和(例如)(netrw v143) - 假设你没有禁用netrw banner),然后你可以通过安装旧的(?)版本的netrw(即v142)来修复它。

netrw被打包为“vimball档案”。 vimball插件附带Vim 7.0及更高版本。您只需获取一个vimball文件,将其安装到runtimepath的第一个目录(通常为~/.vim)。

:e /path/to/netrw.vba.gz
:so %
:q

如果您使用pathogen来隔离您的Vim插件(强烈推荐!),您可以将其安装到捆绑目录中:

:e /path/to/netrw.vba.gz
:UseVimball ~/.vim/bundle/netrw
:q