findを使っていくつかのファイルを検索しましたが、Vimのタブですべてを開きたいです。だから私はこれを試しました:
find . | xargs fgrep -l myExpression | xargs vim -p
ls<backspace><backspace>exit
Vimを終了して終了すると、vimに入力した内容はすべて表示されず、バックスペースキーが機能しないことを除いてうまく機能します。したがって、結果の履歴を入力しても機能しませんls^?^?exit
。exit
また警告します。私のパイプは次のとおりです。端末ではありません。
しかし、シェルを再起動すると、すべてが正常に戻りました。これは常に再現可能です。
ヒットバージョン:
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 {} +
できます。