当 vim 过滤器命令中断时执行命令



我在 vim 中使用过滤器命令来调用有时需要中断的 bash 脚本。我通过在 vim 窗口中按 Ctrl+C 来做到这一点。bash脚本随后终止(至少vim停止过滤器命令),但我传递给过滤器命令的文本(通常是视觉选择)将丢失。如果我通过 Ctrl+C 中断执行或 bash 脚本以 0 以外的退出状态结束,我希望 vim 返回到过滤器命令之前的状态。请注意,我知道我可以按您撤消,但我想修改过滤器命令来执行此操作,因为我可能会忘记按您并在不注意的情况下丢失文本。

您可以在 bash 中设置信号和/或退出处理程序。 man bash/trap.*sigspec

像这样:

trap "your_commands"  SIGINT
my_program

要使其"保留"文本,您可能需要这样的东西:

TIN=`mktemp`
TOUT=`mktemp`
cat > $TIN
trap "cat $TIN; rm -f $TIN; rm -f $TOUT" EXIT
do_something < $TIN > $TOUT || cp $TIN $TOUT
mv $TOUT $TIN

检查我的 Vim,似乎正在工作。(使用 sedsleep 作为do_something进行测试)

最新更新