0

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

4

1 回答 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,似乎工作正常。(使用sedsleep作为 do_something 进行测试)

于 2012-05-28T10:17:56.007 回答