シェルに戻るときにファイル名をVIMにパイピングするとbashがクラッシュするのはなぜですか?

シェルに戻るときにファイル名をVIMにパイピングするとbashがクラッシュするのはなぜですか?

findを使っていくつかのファイルを検索しましたが、Vimのタブですべてを開きたいです。だから私はこれを試しました:

find . | xargs fgrep -l myExpression | xargs vim -p

ls<backspace><backspace>exitVimを終了して終了すると、vimに入力した内容はすべて表示されず、バックスペースキーが機能しないことを除いてうまく機能します。したがって、結果の履歴を入力しても機能しませんls^?^?exitexitまた警告します。私のパイプは次のとおりです。端末ではありません。

しかし、シェルを再起動すると、すべてが正常に戻りました。これは常に再現可能です。

ヒットバージョン:

GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

ビームバージョン:

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Apr 14 2015 05:43:37)
Included patches: 1-699

ベストアンサー1

コマンドラインプログラムは、2つのソース、つまりstdin(配送先)と直接TTYを介してユーザーから入力を取得できます。これらが混ざると悪いことが起こります。 Vimはパイプから入力を読むことを望んでいません。それでは実際の標準入力を返してみましょう。

私たちが利用できるソリューションとしてコマンドの置き換えファイルをVimに引数として直接渡します。

vim -p $(find . | xargs fgrep -l myExpression)

シェルによって実行される拡張のため、これは次のようになります。いいえ名前にスペースが含まれているファイルを正しく処理しますが、Bash-fuが弱すぎて簡単に修正できません。

またはfind options | xargs some commandとして書くこともfind options -exec some command {} +できます。

おすすめ記事