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

最佳答案

您可以在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

我的维姆检查过了,好像在工作。(用sedsleep测试,就像做某事一样)

10-06 01:04