vim-jp » Vimのユーザーと開発者を結ぶコミュニティサイト

シェルのコマンド入出力パイプをvimで編集

Posted on 2015-10-15


reddit のトピック「What’s your best Vim related shell script?」より

#!/bin/bash
TOVIMTMP=~/.tovim_tmp_`date +%Y-%m-%d_%H-%M-%S.txt`
cat > $TOVIMTMP 
vim $TOVIMTMP < /dev/tty > /dev/tty
cat $TOVIMTMP 
rm $TOVIMTMP 

これを tovim というスクリプトファイルで保存し実行権限を付与します。シェルのコマンド入出力パイプに入れる事でストリームを編集出来る様になります。sed や grep でやっても良いのですが、編集中に undo が出来るという点でこちらにもメリットがありそうです。

$ firstcommand | tovim | othercommand

ただし reddit のトピック上に掲載されたスクリプトでは vim を異常終了させた場合、たとえば :cquit させた場合にコマンドパイプを中断出来ない問題があります。set -e を付け、かつ trap によりテンポラリファイルを削除する必要があるでしょう。

#!/bin/bash
set -e

TOVIMTMP=~/.tovim_tmp_`date +%Y-%m-%d_%H-%M-%S.txt`
trap 'rm $TOVIMTMP' ERR

cat > $TOVIMTMP
vim $TOVIMTMP < /dev/tty > /dev/tty
cat $TOVIMTMP
rm $TOVIMTMP

もどる