考虑下面的vim代码。
function! s:foo()
if s:bar()
let a = 1
endif
endfunction
function! s:bar()
python << EOF
vim.command('echoerr "blabla"')
EOF
endfunction
command! Foo call s:foo()
map <F7> :Foo<CR>
打开vim会话,然后按F7。然后Vim会抛出错误说E171: Missing :endif
。这怎么可能?如何在python部分内部正确发送错误消息?
在函数内部,:echoerr
类似:throw
并引发异常。正常的控制流被中断,Vim抱怨没有看到:endif
。:echoerr
在函数内部实际上是没有用的,也因为显示了整个多行堆栈跟踪。
我可以通过设置v:errmsg
(或任何其他自定义变量或标志)解决此问题,然后直接在函数结束时检查并报告错误:
function! s:foo()
let v:errmsg = ''
if s:bar()
let a = 1
endif
endfunction
function! s:bar()
python << EOF
vim.command('let v:errmsg = "blabla"')
EOF
endfunction
command! Foo call s:foo() | if ! empty(v:errmsg) | echoerr v:errmsg | endif
map <F7> :Foo<CR>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句