我在 vim 中使用过滤器命令来调用有时需要中断的 bash 脚本。我通过在 vim 窗口中按 Ctrl+C 来完成此操作。然后 bash 脚本终止(至少 vim 停止过滤命令),但我传递给过滤命令的文本(通常是视觉选择)将丢失。如果我通过 Ctrl+C 中断执行或 bash 脚本以 0 以外的退出状态结束,我希望 vim 返回到 filter 命令之前的状态。请注意,我知道我可以按 u 撤消,但我想修改过滤器命令以执行此操作,因为我可能忘记按 u 并松开文本而没有注意到。
问问题
212 次
1 回答
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 进行测试)
于 2012-05-28T10:17:56.007 回答