検出コマンドユーティリティを使用して、いくつかのディレクトリの場所をgrepでき、含まれているファイルを開く必要があります。 この例find . -name "*.txt" -exec vim {} +
などのexecでfindを使用することはできません。
Grep出力を変更しない場合、xargsは次のように機能します
searchUtilityCommand | grep keyword | xargs vim
しかし、私は実際に必要です
searchUtilityCommand | grep keyword | xargs -I % vim %/extra/path
ただし、これを行うと最初のヒットが開き、閉じると2番目のヒットが開きます。それを閉じて3番目を開きます...私は使ってみました
searchUtilityCommand | grep keyword | xargs -P 0 -I % vim %/extra/path
しかし、それは失敗するだけです。私も試しました
vim `searchUtilityCommand | grep keyword | xargs -P 0 -I % vim %/extra/path`
運がない。
awk
またはsed
を使用できると思いましたが、私はそれらに堪能ではなく、その価値があるかどうかわかりません。それは次のようなものかもしれません
searchUtilityCommand | grep keyword | <awk modify grepped path> | xargs vim
どんな助けでも。
ありがとう!
これをテストしていませんが、機能しない理由はありません。
_searchUtilityCommand | grep keyword | sed -e 's,$,/extra/path' | xargs vim
_
とはいえ、このようにvimを実行すると表示される「警告:入力は端末からではありません」というメッセージを取り除く方法がわかりません。 (私は一般的にその理由でvim $(command pipeline)
を好みます)。
Vimから、次のExコマンドを実行します。
:args `=systemlist('searchUtilityCommand | awk ''/keyword/{print $0 "/extra/path"}''')`
またはこれ:
:args `=map(filter(systemlist('searchUtilityCommand'), {_,v -> v =~# 'keyword'}), {_,v -> v.'/extra/path'})`
これにより、arglistにファイルパスのリストが入力されます。 searchUtilityCommand
によって出力され、keyword
と一致するものと/extra/path
最後に追加。
そこから、次のようなあらゆる種類のことができます。
" open each file in a horizontal split (run `:only` to close all splits except the current one)
:all
" open each file in a vertical split
:vert all
" open each file in a tab page (run `:tabonly` to close all tab pages except the current one)
:tab all
" diff all the files
:vert all | windo diffthis
" replace all occurrences of `pat` with `rep` in each file
:argdo %s/pat/rep/g | update
詳細については、以下を参照してください。
:h `=
:h systemlist(
:h map(
:h filter(
:h :all
:h :argdo