当我使用 :%!通过过滤器运行文件的内容,过滤器失败(它返回除 0 之外的另一个代码)并向 stderr 打印一条错误消息,我的文件被此错误消息替换。如果过滤器返回指示错误和/或忽略过滤器程序写入 stderr 的输出的状态代码,是否有办法告诉 vim 跳过过滤?
在某些情况下,您希望将文件替换为过滤器的输出,但大多数情况下这种行为是错误的。当然,我可以通过一键按键撤消过滤,但这并不是最佳选择。
我在编写自定义 vim 脚本来进行过滤时也遇到了类似的问题。我有一个脚本,它使用 system() 调用过滤器程序,并用其输出替换缓冲区中的文件,但似乎没有办法检测 system() 返回的行是否写入 stdout 或 stderr 。有没有办法在 vim 脚本中区分它们?
:!{cmd}
执行{cmd}
带壳及套v:shell_error
.
如果您碰巧设置了映射来调用过滤器,则可以执行如下操作:
function! UndoIfShellError()
if v:shell_error
undo
endif
endfuntion
nmap <leader>filter :%!/path/to/filter<CR>:call UndoIfShellError()<CR>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)