catを実行した後、子プロセスでvimを呼び出します。

catを実行した後、子プロセスでvimを呼び出します。

vim_run以下を実行するbash関数を作成しようとしています。

  • ユーザーはコマンド出力を次に送信します。vim_run
  • ユーザーは出力を編集できます。
  • ユーザーがvimを終了すると、そのバッファの内容が渡されます。source file

このプロセスは、削除するファイルのリストを編集するのに役立ちます。私は現在これを次のように実装しています。

function vrun() {
    local tmpfile=$(mktemp)
    cat > "$tmpfile"
    vim "$tmpfile" --not-a-term
    source "$tmpfile"
    rm "$tmpfile"
}

しかし、stdinと端末の面でvimを正しく実行する方法がわかりません。出力をこの関数にパイプするたびに、たとえば

echo 'echo foo' | vim_run

何かを編集してvimを終了すると、端末がハングして入力したときに文字が表示されません。 visibleを入力した場合にのみstty sane正常に戻ります。私はvimが正しく動作するためにstdinにアクセスする必要があることを漠然と理解しています。しかし、cat > $tmpfileそれが完了したら、残りのstdinをvimで利用できるはずですか?

ベストアンサー1

これは私のために問題を解決しました。

function vrun() {
    local tmpfile=$(mktemp)
    cat > "$tmpfile"
    vim "$tmpfile" < /dev/tty
    source "$tmpfile"
    rm "$tmpfile"
}

セッションの制御TTYをVimの標準入力にリダイレクトする必要があります。

おすすめ記事