Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在出现错误时运行vim命令?_Vim_Macvim - Fatal编程技术网

在出现错误时运行vim命令?

在出现错误时运行vim命令?,vim,macvim,Vim,Macvim,好的,这个问题和我之前的一个问题有点关系: 基本上,我找到的解决方案(或者非常接近我想要的)是一个名为BufOnly的插件,它基本上关闭了所有未修改的缓冲区。所以当我有很多缓冲区打开,我想关闭时,我只运行这个,然后处理所有我还没有处理的事情。它工作得很好 但我很贪婪。我希望在需要时自动执行。基本上我希望这样,如果我运行qa,如果qa运行--> 那我要跑了 :BufOnly<CR>:bd <cr> :BufOnly:bd 有没有办法做到这一点?您可以使用vim的try

好的,这个问题和我之前的一个问题有点关系:

基本上,我找到的解决方案(或者非常接近我想要的)是一个名为BufOnly的插件,它基本上关闭了所有未修改的缓冲区。所以当我有很多缓冲区打开,我想关闭时,我只运行这个,然后处理所有我还没有处理的事情。它工作得很好

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

那我要跑了

:BufOnly<CR>:bd <cr>
:BufOnly:bd

有没有办法做到这一点?

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

 function! Funk()
    try
        execute "qa"
        let yes = 1
    catch /^Vim\%((\a\+)\)\=:E37/   
            execute "BufOnly"
            execute "bd"
    endtry
endfunction
这将捕获错误
:E37
,并执行所需的命令。我没有安装那个插件,因此我没有用BufOnly进行测试。我用“
hgg
”进行了测试,它显示了
gg

要调用该命令,请键入
:call Funk()
,当然可以为该函数调用创建映射

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