Vim 为什么窗口拆分强制为只读?
我正在使用vim进行编程。在一天的开始,我将打开一个文件,然后进行几个窗口拆分,并将一些文件打开到缓冲区中,以便它们随时可用。直到最近,这才奏效 然而,在过去的一周左右,情况发生了变化;我的一个可写缓冲区被切换为只读,我不知道为什么。以下是命令的顺序:Vim 为什么窗口拆分强制为只读?,vim,Vim,我正在使用vim进行编程。在一天的开始,我将打开一个文件,然后进行几个窗口拆分,并将一些文件打开到缓冲区中,以便它们随时可用。直到最近,这才奏效 然而,在过去的一周左右,情况发生了变化;我的一个可写缓冲区被切换为只读,我不知道为什么。以下是命令的顺序: 打开文件a.h vsplit/ 打开fileA.cpp C-w C-w切换到包含文件a.h的窗口 sp/ 对于步骤1-4,所有窗口都是可编辑的。当我执行步骤5时,新的文件浏览窗口是只读的(正如预期的那样),但是现在保存fileA.cpp的窗口也被
更让我困惑的是,如果我不执行步骤4,就不会有问题(即,我拆分了保存fileA.cpp而不是fileA.h的窗口)。另外,如果我在第5步中使用“sp fileB.h”而不是首先拆分到文件浏览器,则不会出现问题。看起来这可能是netrw插件中的错误。我使用两个版本的Vim 7.3(MacPorts
Vim
7.3-353和MacPortsMacVim
snapshot64”7.3-390)对多个版本的netrw进行了测试:
- v140(包括在MacPorts
:7.3-353中)vim
仅在MacPorts vim版本中测试 - v141(从上到下)
- v142(来自
netrw页面)vim.org/scripts
- v143(包括在MacPorts
:7.3-390中)MacVim
仅使用MacPorts MacVim版本进行测试 - v144b(从中预发布)
:let g:loaded\u netrwPlugin
检查您的活动netrw版本
v140到v142在复制场景时都有合理的行为:
- 只有netrw缓冲区(来自
;右侧,上部窗口)是只读的。sp.
左侧窗口中的
缓冲区保持为非只读fileA.cpp
- netrw缓冲区(右侧,上部窗口)和
buffer(左侧)都变为只读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文件,将其安装到运行时路径中的第一个目录中(通常~/.vim
)
如果您使用隔离Vim插件(强烈推荐!),则可以将其安装到捆绑目录:
:e /path/to/netrw.vba.gz
:UseVimball ~/.vim/bundle/netrw
:q
你使用的插件是什么?一般来说,尽量消除干扰插件。我猜,您使用的是NERDTree之类的东西,它会干扰其他插件的映射。vim-u NONE是否仍会发生这种情况?如果不是的话,@sehe可能是对的。这是一些分析工作,+1是个不错的回答!看来我有netrw的v143。按照你的指示,我降到了142级,现在可以工作了。仅供参考,我确实看到了fileA.cpp抓住焦点的行为。我只是忘了记录那个细节。谢谢你克里斯的精彩回答。诊断帮助和详细的解决方案-非常有用。通过病原体返回到142对我来说非常有用。147是(目前)可用的最新版本,它给我带来了更严重的问题。@PaulBrannan:我找到了v144b的旧版本,并在vim 7.4-258上重现了这个问题。使用相同的vim安装,我无法在v147、v149、v150或v153j(当前的beta版)中重现此问题。所以,是的,看起来v150也解决了这个问题。
:e /path/to/netrw.vba.gz
:UseVimball ~/.vim/bundle/netrw
:q