我正在使用vim进行编程。在一天开始时,我将打开一个文件并继续进行几个窗口拆分并将一些文件打开到缓冲区中,以便它们随时可用。直到最近,这才起作用。
在过去一周左右,情况发生了变化;我的一个可写缓冲区正在切换到只读,我不明白为什么。这是命令序列:
对于步骤1-4,所有窗口都是可编辑的。当我执行步骤5时,新文件浏览窗口是只读的(如预期的那样),但现在持有fileA.cpp的窗口也被标记为只读。 fileA.h仍然可以编辑。为什么会这样?
为了让我更加困惑,如果我不做第4步就没有问题(即我将窗口分开,而不是fileA.h)。另外,如果我在步骤5中执行'sp fileB.h'而不是先拆分到文件浏览器,那么就没有问题。
答案 0 :(得分:34)
看起来这可能是netrw插件中的一个错误。我测试了几个版本的netrw和两个版本的Vim 7.3(MacPorts vim
7.3-353和MacPorts MacVim
“snapshot64”7.3-390):
vim
中:7.3-353)vim.org/scripts
netrw page)vim.org/scripts
netrw页面)MacVim
中:7.3-390)您可以使用:let g:loaded_netrwPlugin
检查有效的netrw版本。
v140到v142在复制你的场景时都有合理的行为:
sp .
;右侧,上方窗口)是只读的
左侧窗口中的fileA.cpp
缓冲区仍为非只读。使用v143和v144b,我能够重现您的行为:
fileA.cpp
缓冲区(左侧)都变为只读。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