我在vim中使用过滤器命令来调用有时需要中断的bash脚本。我通过在vim窗口中按Ctrl + C来完成此操作。 bash脚本然后终止(至少vim停止过滤器命令)但是我传递给过滤器命令的文本(通常是视觉选择)将丢失。我希望vim返回到filter命令之前的状态,如果我通过Ctrl + C中断执行或bash脚本完成除0以外的退出状态。注意我知道我可以按你撤消,但我想修改filter命令来执行此操作,因为我可能忘记按u并松开文本而不会注意到。
答案 0 :(得分:1)
您可以在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,似乎正在工作。 (使用sed
和sleep
作为do_something测试)