shell – Vim:使用外部命令并处理错误
发布时间:2020-12-15 22:55:46 所属栏目:安全 来源:网络整理
导读:我试图使用外部命令来处理Vim中一系列行的某些格式,但似乎无法找到处理外部命令错误的方法. 这些错误通常是在shell返回0以外的内容时,它会提示Vim显示以下内容: shell returned 1 除此之外,它还将我想要格式化的行替换为错误的实际消息.如果我这样做,也会发
我试图使用外部命令来处理Vim中一系列行的某些格式,但似乎无法找到处理外部命令错误的方法.
这些错误通常是在shell返回0以外的内容时,它会提示Vim显示以下内容: shell returned 1 除此之外,它还将我想要格式化的行替换为错误的实际消息.如果我这样做,也会发生这种情况: :set equalprg=myformatter --format-flag 如何安全地捕获外部命令的错误并显示错误消息是什么? 注意:这不是关于如何使用外部命令格式化Vim中的某些文本的问题,而是如何捕获错误并显示消息. 解决方法
可能有更好的方法来做到这一点,但我得到了这个粗略的草案(请参阅下面的equprg).它基本上重新映射gq,覆盖它以打印错误然后撤消它.
set formatprg=~/test.sh nnoremap gq :setl opfunc=FormatPrg<cr>g@ fun! FormatPrg(...) silent exe "'[,']!".&formatprg if v:shell_error == 1 let format_error = join(getline(line("'["),line("']")),"n") undo echo format_error end endfun 这是?/ test.sh中的内容: echo "error!! alskdjf alskdf alskdj flaskdjf" 1>&2 exit 1 编辑: 我刚刚意识到我根本没有回答你的问题哈哈.我对equalprg的解决方案更不优雅,但它可能适合您的需求.要使用它,您必须设置equalprg.如果要在外部工具和内部缩进格式化器之间来回切换,请注释掉nnoremap行或设置indentexpr = EqualPrg(). set equalprg=~/test.sh nnoremap = :setl opfunc=EqualPrg<cr>g@ fun! EqualPrg(...) if &equalprg != "" silent exe "'[,']!".&equalprg else set indentexpr= exe "norm! `[=`]" set indentexpr=EqualPrg() endif if v:shell_error == 1 let format_error = join(getline(line("'["),"n") undo echo format_error endif endfun (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |