ほぼ毎日、次のことをしている
find -name somefile.txt
)vim
で開きます問題は、find
の結果をコピーしてvim
コマンドに貼り付ける必要があることです。これを回避する方法はありますか?私は少し実験しました(find -name somefile.txt | vim
)ですが、機能するものが見つかりませんでした。
前もって感謝します
コマンド置換を使用できます。
vim $(find -name somefile.txt)
または
find -name somefile.txt -exec vim {} \;
これを試して:
:r!find /<path> -name 'expression'
検索が完了すると、結果がvimに表示されます。
または
試してください:
find /<path> -name > results.txt
vim results.txt
コマンドを再度実行しても構わない場合は、次を押します。 Upxargs
コマンドを追加します。または履歴置換を使用して実行
!! | xargs vim # won't work with file names containing \'" or whitespace
!! | xargs -d \\n vim # GNU only (Linux, Cygwin)
Kshとzshでは機能するがbashでは機能しないコマンドの出力を保存する軽量な方法があります(パイプラインの出力側を親シェルで実行する必要があります)。コマンドを関数K
(下記のzsh定義)にパイプします。これにより、k変数$K
に出力が格納されます。
function K {
K=("${(@f)$(tee /dev/fd/3)}") 3>&1;
}
find … |K
vim $K
各コマンドの出力を自動的に保存することは、シェルだけでは実際には不可能です。エミュレートされたターミナルでコマンドを実行する必要があります。 script
(BSDユーティリティですが、LinuxやSolarisを含むほとんどのunicesで利用できます)を実行することで実行できます。これにより、セッションのすべての出力がファイルに保存されます( TypeScriptの最後のプロンプトを確実に検出するために必要な少しの努力)。
私はここでポイントを逃したに違いありません。
:find **/somefile.txt
(もし私が:echo &path
)または、必要な場合:
:args **/somefile.txt
編集:おっと! OK、それで私はdid要点を逃します-実際に開いたファイルではなく、検索リストが必要ですか? (もう一度、Vim内から)試してください:
!!find . -name somefile.txt
-私の悪い:)
私はバックティックを使いたいです(それは〜と同じキーにあります)
> vim `find . -name somefile.txt`
バックティックはティック内のコマンドを実行し、出力はコマンドで使用できます。上記はすべてのファイルsomefile.txtを見つけるので、:next
すべてのファイルを移動します。
コマンドの調整に数回費やすと非常に便利です。これは、ヒストリ置換を使用してエディターのコマンドを繰り返すことができるためです。
> find . -name somefile.txt
./debug/somefile.txt
./somefile.txt
> vi `!!`
@davidmhがコメントで指摘したように、インタラクティブなアプリケーションを使用する場合は、xargs
をフラグ-o
とともに使用できます。
find . -name somefile.txt | xargs -o vim
-o
を使用しない場合、vimを終了した後のターミナルの状態がめちゃくちゃになる可能性があります。完了している場合は、次のコマンドで端末をリセットできるはずです。
reset
私はあなたが望むことをする関数pvim
を書きました。複数の行がpvim
にパイプされている場合、最初の行以外はすべて無視されますが、vimで複数のファイルを開くように拡張できます。
_stu@sente ~ $ function pvim() { read -r somefile; exec < /dev/fd/1; vim "$somefile"; }
stu@sente ~ $ type pvim
pvim is a function
pvim ()
{
read -r somefile;
exec < /dev/fd/1;
vi "$somefile"
}
_
次のように使用します。
_stu@sente ~ $ find . -name "foo.txt" | pvim
_
次のように入力すると、最初の "foo.txt"がvimに読み込まれます。
vim $(find . -name "foo.txt | head -n1")
Vimでlocate
を使用してファイルを開くと、非常に便利で、find
よりもはるかに高速であることがわかりました。
次のコマンドは、ディレクトリMyPythonProject
を含むパスでapp.py
というファイルを検索します。
:args `locate '*MyPythonProject*app.py'`
以下は、すでに述べたものよりも単純なxargs
ソリューションです。
find -name somefile.txt | xargs vim -p
-p
オプションは、vim
に各ファイルを個別のタブで開くように指示します。これはバッファを使用するよりも便利だと思います。
個々のタブにあるすべてのファイルを開くには、次の方法があります。
vim -p $(find -name somefile.txt)
または
find -name somefile.txt -exec vim -p {} +;