1. ホーム
  2. bash

[解決済み] バッシュ Vim.NET」が表示されたらVimを終了させる Warning: 出力先が端末でない"

2022-01-30 09:38:21

質問

たまにコマンドラインを間違えて、サブシェルでvimを使うことがあります。

もちろん、これはそのターミナルウィンドウをロックして、たくさんのエラーを出力します。

Vim: Warning: Output not to a terminal

この現象が発生したときに自動的に終了し、ターミナルがハングアップしないようにvimを設定する方法はありますか?

私はおそらくこのvimインスタンスのプロセスIDを見つけ出し、それを殺すことができることを知っていますが、私は異なるtmuxペイン/ウィンドウで多くの異なるvimインスタンスを実行する傾向があるので、可能であればより良い解決策が欲しいと思っています。ありがとうございます。

解決方法は?

そもそも起動しないようにすることは簡単にできます。次のような関数定義を .bashrc :

vim() {
  [ -t 1 ] || { echo "Not starting vim without stdout to TTY!" >&2; return 1; }
  command vim "$@"
}

command この組み込み関数は、(単に関数を再度呼び出すのではなく)外部コマンドを呼び出すようにすることで、再帰を防止します。

同様に、スクリプトを作成することができます $HOME/bin/vim :

#!/bin/sh
if [ -t 1 ]; then
  exec /usr/bin/vim "$@"
else
  echo "Not starting vim without stdout to TTY!" >&2
  exit 1
fi

...する $HOME/bin の中で、最初に PATH そして、シェルの関数に頼ることなく、そのシムに仕事をさせるのです。