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

rya*_*270 14 vim

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

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

  1. 打开fileA.h
  2. vsplit ./
  3. 打开fileA.cpp
  4. Cw Cw切换到包含fileA.h的窗口
  5. sp ./

对于步骤1-4,所有窗口都是可编辑的.当我执行步骤5时,新文件浏览窗口是只读的(如预期的那样),但现在持有fileA.cpp的窗口也被标记为只读.fileA.h仍然可以编辑.为什么会这样?

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

Chr*_*sen 34

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

  • v140(包含在MacPorts中vim:7.3-353)
    仅使用MacPorts vim版本进行测试.
  • v141(来自vim.org/scriptsnetrw页面)
  • v142(来自vim.org/scriptsnetrw页面)
  • v143(包含在MacPorts中MacVim:7.3-390)
    仅使用MacPorts MacVim版本进行测试.
  • v144b(从netrw作者的Vim页面预先发布)

您可以查看您的活动netrw版本:let g:loaded_netrwPlugin.

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横幅),那么你可以修复它通过安装较旧的(?)版本的netrw(即v142).

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

:e /path/to/netrw.vba.gz
:so %
:q
Run Code Online (Sandbox Code Playgroud)

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

:e /path/to/netrw.vba.gz
:UseVimball ~/.vim/bundle/netrw
:q
Run Code Online (Sandbox Code Playgroud)

  • 这是一些分析工作,+ 1 (2认同)