web-dev-qa-db-ja.com

Bash:「Vim:警告:端末に出力しない」場合にVimを強制終了する

たまにコマンドラインでミスを犯し、サブシェルでvimを使用します。

もちろん、これはそのターミナルウィンドウをロックし、主なエラーを含む多数のエラーを出力します

Vim: Warning: Output not to a terminal

これが発生すると自動的に停止し、端末がハングしないようにvimを設定する方法はありますか?

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

16
Brad Parks

そもそも最初から簡単に起動しないようにすることができます。次の関数定義を.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に置き、Shim関数に依存せずにそのシムに作業を行わせます。

13
Charles Duffy

これを行う構成オプションはありませんが、:q<Enter>、vimを終了します。

また、Ctrl-Cは機能しませんが、Ctrl-Zはvimをバックグラウンドに配置し、kill %1

20
toth

またはvimショートカット
ZQ
大文字。通常モードで使用できます:-)