在最后一个星期左右,有些事情发生了变化;我的一个可写缓冲区正在转换为只读,我不知道为什么.这是命令的顺序:
>打开fileA.h
> vsplit ./
>打开fileA.cpp
> C-w C-w切换到包含fileA.h的窗口
> sp ./
对于步骤1-4,所有窗口都是可编辑的.当我执行步骤5时,新文件浏览窗口只读(如预期的那样),但现在保持fileA.cpp的窗口也被标记为只读. fileA.h仍然可以编辑.为什么会发生这种情况?
为了混淆我更多,如果我不做第4步没有问题(即我拆分窗口保存fileA.cpp而不是fileA.h).另外,如果我在步骤5中做“sp fileB.h”,而不是先分割到文件浏览器,那么没有问题.
> 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开始预发行)
您可以通过以下方式检查您的活动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目录列表和(例如)(netrw v143)在第二行 – 假设您没有禁用netrw横幅),那么您可以通过安装较旧的(?)版本的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