0

好的,所以这个问题与我之前的一个问题隐约相关:

我希望 Vim 在缓冲区方面能够像 Photoshop 一样保存和关闭?

基本上我找到的解决方案(或非常接近我想要的)是一个名为 BufOnly 的插件,它基本上关闭了所有尚未修改的缓冲区。所以当我有很多缓冲区打开并且我想关闭时,我只是运行它,然后只关心我还没有的所有内容。它运作良好。

但我很贪心。我希望它在需要时自动执行。基本上我希望这样,如果我运行 qa,如果 qa 遇到 -->

E73: No write since list change (add ! to override)

然后我想跑

:BufOnly<CR>:bd <cr>

有没有办法做到这一点?

4

1 回答 1

1

您可以使用 vim 的 try-catch 机制编写函数。例子:

 function! Funk()
    try
        execute "qa"
        let yes = 1
    catch /^Vim\%((\a\+)\)\=:E37/   
            execute "BufOnly"
            execute "bd"
    endtry
endfunction

这将捕获错误:E37并执行您想要的命令。我没有安装那个插件,因此我没有使用 BufOnly 进行测试。我用“ h gg”测试过,它显示了帮助页面gg

要调用命令, type :call Funk(),当然您可以为该函数调用创建映射。

于 2013-02-04T16:03:39.237 回答