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