如何:bufdo只在vim上的可修改缓冲区?

时间:2015-11-12 07:24:04

标签: vim

有时我需要替换多个缓冲区。出于此目的,我使用:bufdo %s/old/new/gec。最近我注意到,当缓冲区列表中存在不可修改的缓冲区时,该命令失败(在我的情况下,它打开了文件浏览器/ netrw)。运行命令后,vim离开了我E21: Cannot make changes, 'modifiable' is off并打开了Netrw窗口。

:bufdo只能在可修改的缓冲区上使用吗?我已经尝试了:bufdo!,但行为是一样的(只是没有显示错误)。

更新

我发现.vimrc行造成了这种有问题的行为:

let g:netrw_liststyle=3

我不知道这里有什么神奇之处,但是当我设置此选项时,建议的解决方案/命令都不适用于我。现在,问题是如何保持这一行并使:bufdo行为跳过由Netrw创建的缓冲区。

1 个答案:

答案 0 :(得分:3)

好吧,如果:bufdo sil! :%s/old/new/gec对您不起作用(这会默默地忽略错误)。您需要将命令包装到if语句中。像这样:

:bufdo if &ma | :%s/old/new/gec | endif

检查每个缓冲区,如果它是可修改的,然后只尝试用new替换旧的。

注意:除'readonly'设置外,您可能还需要检查'modifiable'选项。