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の標準入力にリダイレクトする必要があります。