0

私はvimでfilterコマンドを使用して、時々中断する必要のあるbashスクリプトを呼び出します。これを行うには、vimウィンドウでCtrl+Cを押します。その後、bashスクリプトは終了します(少なくともvimはfilterコマンドを停止します)が、filterコマンドに渡したテキスト(通常は視覚的な選択)が失われます。Ctrl + Cで実行を中断したり、bashスクリプトが0以外の終了状態で終了したりした場合、vimをフィルターコマンドの前の状態に戻したいです。uを押して元に戻すことができることはわかっていますが、やりたいと思います。これを行うようにfilterコマンドを変更します。これは、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にチェックインすると、動作しているようです。sed(およびsleepdo_somethingでテスト済み)

于 2012-05-28T10:17:56.007 に答える