というファイルがあるとしましょう。filename123.txt
このファイルには名前が付けられているため、locate
コマンドを使用できますlocate filename123
。このファイルが返されます。
vi
今/で開きたいですvim
。ただし、その場所に移動してvi
コマンドとファイル名を入力したくありません。ここではlocate filename123
viコマンドに結果を追加したいと思います。どうすればいいですか?私は努力しました:
locate filename123 | vi
しかし、これはうまくいきません。このエラーは端末に表示されます。
santosh@santosh:~$ locate filename123 | vi
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: Finished.
答え1
あなたはそれを使用することができますxargs
:
locate filename123 | xargs vi
デフォルトでは、指定さxargs
れたコマンドのインスタンスをできるだけ少なく実行し、システムに適切な引数を渡します。ARG_MAX。インスタンスに渡される引数の数を制限するには、「オプション」をvi
使用します。xargs
-n
スペースを含むファイル名を処理するには、xargs
'-d
オプションを使用します。
locate filename123 | xargs -d '\n' vi
改行文字を含むファイル名を処理するには、xargs
'-0
オプションとlocate
's-0
オプションを使用します。
locate -0 filename123 | xargs -0 vi
(また、-0
これらのうち使用できないものを--null
確認するか、別の方法で文字を区切り\000
文字として指定してください。)
答え2
コマンド拡張を使用できます。
vi "$(locate filename123 | head -n1)"
標準入力を読み取るには、vim
次のことができますが、これはファイル名パス出力のみを提供しますvim -
。通常のコマンドを使用すると、カーソルがあるパスが開いて動作することがlocate
あります。vim
gf
編集する
xargs
ファイル名にスペースが含まれている場合は、上記のオプションまたは上記の回避vim
策を使用することをお勧めします。これがgf
機能するにはスペースを追加する必要がありますisfname
。
set isfname+=32
この技術と代替案が説明されています。ここ。
編集2
引用符を追加し、head
PeterOの提案に従いました。コメント。
答え3
最も簡単な方法は、次のようlocate
に渡すことです。シェルの交換、よい:
vim $(locate filename123)
編集のためにファイル名を渡すfind
代わりに使用を検討することもできます。たとえば、次のようになります。locate
find . -name 'filename123' -exec vim {} +
xargs
Unix/OSX では、次のパラメータを使用できます-o
。
locate filename123 | xargs -o vim
-o
コマンドを実行する前に、サブプロセスで/ dev / ttyでstdinを再度開きます。これは、xargsに対話型アプリケーションを実行させる場合に便利です。
または、Linuxで次の回避策を試してください。
locate filename123 | xargs -J% sh -c 'vim < /dev/tty $@'
別のコマンドを使用している場合は、次を使用します。コマンドの置き換えこれを達成するには、例えば次のようにします。
vim $(locate filename123)
vim `locate filename123`
あるいは、tty割り当てを強制するparallel
代わりにGNUを使用してください。たとえば、次のようになります。xargs
locate filename123 | parallel -X --tty vi
注:parallel
Unix / OSXではパラメータが異なり、ttyをサポートしていないため機能しません。
他の多くの一般的なコマンドも疑似tty割り当て(例-t
:)を提供していますので、ssh
ヘルプを確認してください。
他の提案は次のとおりです。vipe
(Vimコマンドパイプライン)または次の簡単なスクリプトを使用してください。
#!/bin/sh
# usage: locate filename123 | vip
exec vim < /dev/tty "$@"
関連: