2

このコマンドを使用して、コマンドラインからvimで複数のファイルを開こうとしています。以下に示すように、何らかの理由でエラーが発生しています。

 $ find . -name edit.html.erb  \
     | perl -pi -e 's/^..//'   \
     | perl -pi -e 's/\n$/ /'  \
     | vim

このコマンドのように「|vim」なしで実行すると:

 $ find . -name edit.html.erb  \
     | perl -pi -e 's/^..//'   \
     | perl -pi -e 's/\n$/ /'

そして、この出力を取得します。

 addresses/edit.html.erb claims/edit.html.erb emails/edit.html.erb owners/edit.html.erb packages/edit.html.erb users/edit.html.erb vessels/edit.html.erb voyages/edit.html.erb %

出力の最後にある「%」マークと関係があると思われるエラーが表示されます。

出力とエラーは次のとおりです。

 Vim: Warning: Input is not from a terminal
 Vim: Error reading input, exiting...
 Vim: preserving files...
 Vim: Finished.

どうすればこれを修正できますか?私は初心者なので、どの部分がエラーの原因かわかりませんが、助けていただければ幸いです。

4

4 に答える 4

9

ファイルの内容をキーボード入力として渡します。私はあなたがしたいことはvimファイルを開いた状態で起動することだと思います。わかりませんがvim、通常はファイル名を引数として渡すことで実現されます。

bashでは、次を使用します。

vim $( find . -name edit.html.erb | perl -pe's/^..//' | perl -pe's/\n$/ /' )

(のナンセンスな使用を削除しました-i。)

実際には、改行をスペースに変更することは無意味であり、先頭を削除することも意味がないため、./必要なのは次のとおりです。

vim $( find . -name edit.html.erb )
于 2012-10-03T20:12:01.343 に答える
3

vimのドキュメントを見てみましょう:

SYNOPSIS
   vim [options] [file ..]
   vim [options] -
   vim [options] -t tag
   vim [options] -q [errorfile]

これは、コマンドライン引数として多くのファイル名を指定できることを-示しており、「ファイル」がSTDINからロードされることを象徴しています。しかし、これはファイル名ではなく、バッファの内容です!

execPerlスクリプトを正しい引数でvimに入れましょう。

exec "vim", @filenames;

または類似。これにより、ツールチェーンが作成されます

 $ find . -name edit.html.erb  \
   | perl -pi -e 's/^..//'   \
   | perl -ne 'chomp; push @files, $_; }{ exec "vim", @files'

(ファイル名の最初の2文字を本当に削除してもよろしいですか?それが何ですかs/^..//。リテラルと一致するようにドットをエスケープしてください.

于 2012-10-03T20:03:18.773 に答える
3

の標準入力にパイプするvimことは何もしません(とにかく、役立つものは何でも)。入力ではなく、コマンドライン引数を渡したい。ではbash、バッククォートまたはこの$(...)構文を使用します。

vim `find . -name edit.html.erb | perl -pe's/^..//' | perl -pe's/\n$/ /'`
vim $(find . -name edit.html.erb | perl -pe's/^..//' | perl -pe's/\n$/ /')

-iPerlのオプションは、ここでも何もしません。このオプションは、コマンドラインでファイル名を指定するときにファイルを「インプレース」編集するためのものです。)

于 2012-10-03T20:09:19.840 に答える
1

セカンダリOSを忘れないでください:vim

:args `find . -name edit.html.erb`
:argadd `find . -name edit.html.js`

あるいは

:args **/edit.html.erb

(:argdelete、:args、:argdoなども参照してください)

(他の答えは、特定のファイル名引数でvimを呼び出す他のパスをかなり打ち負かします)

于 2012-10-03T22:00:18.550 に答える