vim filter命令中断时执行命令

时间:2012-05-28 10:16:06

标签: linux vim

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

1 个答案:

答案 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,似乎正在工作。 (使用sedsleep作为do_something测试)