ファイルを見つけて一時ファイルに送信する

ファイルを見つけて一時ファイルに送信する

Vimは、ファイルリストを含むファイルを受け入れてからQuickfixリストからファイルを開く素晴らしいオプションをサポートしています。おおよその例では、〜で1KB未満のすべてのファイルを見つけてVimに渡します。

find ~ -type f -size -1k > /tmp/1 && vim -q /tmp/1

私はこれをzshサフィックスエイリアスとして使用したいと思います。

alias V='> /tmp/1 && vim -q /tmp/1'

したがって、次のことができます。

find ~ -type f -size -1k V

私はいくつかの便利なサフィックスを使用しました。

alias -g H='| head -n'
alias -g X='| xargs -d"\n"'

したがって、次のことができます。

git log H 5

いよいよ近づきますね質問それ自体。

mktemp私を悲しませるのは、一時ファイルを作成するために使用できないことです。愚かな愚かなシェルスクリプトトリックをすべて試しました。

find . | tee QL=$(mktemp) && vim -q $QL

解決策がとても簡単だと思うと恥ずかしいです。

現在私は以下を使用しています:

find ... | xargs -d"\n" vim --

ただし、これはバッファリストのみを埋め込み、位置リストのQuickfixは埋めません。 Vimに-cこれを行うコマンドを渡すことができると思ったにもかかわらず。 「Vim:警告:入力が端末から来ていません」という警告が表示され、Vimを終了した後に印刷する代わりに端末が^D ^M失敗します。この問題はに追加することで解決Ctrl-C Ctrl-Dできますが、Vim自体ではTabキーとBackspaceキーがEx Underperforming状態です。とても迷惑なモードです。ttyctl -f.zshrc

答え1

あなたが投稿した内容がこれまであなたに効果がある限り、

find ~ -type f -size -1k > /tmp/1 && vim -q /tmp/1

インストール中間ファイルを削除し> /tmp/1 &&/tmp/1これがうまくいくかどうかを確認したいだけです。

vim -q <( find ~ -type f -size -1k )

説明する

  • find元のコードで特定の基準を使用して必要なファイルのリストを生成し、それらのリストに保存するようです。これはファイル引数が必要なため、実行できる/tmp/1中間ファイルにすぎません。vim -q filelistvim -q
  • <( commands... )バッシュの一つですプロセスの交換/dev/fd/63、気になる場合は自動的にコマンドを実行し、出力をシステムの一時的に保存します。
  • vim -qその後、ファイルをインポートしていると思い、すべての意図と目的に応じて実際にファイルがあるので動作します。

追加のヒント

vimのクイック修正機能を必ずしも使用する必要はありませんが、複数のファイルをすばやく編集する方法が必要な場合は、vim(vim file1 file2...)に複数のファイル引数を送ることができるので、元のファイルを変更すると次のことがfindできます。

find ~ -type f -size -1k -exec vim {} +

vimから

  • :argsパラメータリストがステータスバーに表示されます。たとえば、 file1 [file2] file3現在編集中の場合file2
  • :nパラメータリストから次のファイルに移動
  • :wn次の書き込みは、ファイルを保存し、自動的に次のファイルを開くことを意味します。
  • :prev前のファイルに移動

答え2

長い時間が経つと、今私は私の質問に答えることができます。

上から下へ:

alias -g V='| tee $(rm fifo.tmp; mkfifo fifo.tmp && echo fifo.tmp) &; vim $(< fifo.tmp ) && rm fifo.tmp'

これは、次を受け入れるzshエイリアスです。

find . -name TODO V

または

ls | grep asciidoc V

そして、Vimですべてのファイルをバッファとして開きます。

とにかくこれはなければ動作しません。たとえば、にtee置き換えると、Vimはバッファを開けません。| tee>

ここで行うことはというパイプを生成しfifo.tmptee前のコマンドの出力をパイプにリダイレクトし、同時にバックグラウンドで送信することです。同時に、サブシェルからそのパイプを読み取り、出力をVimファイルのリストとして開きます。

ただし、スペースを含むファイル名には機能しません。

関連情報