vim、nano、emacs、または非コマンドライン エディター (MacVim/TextMate) からではなく、StdIn
そこから入力を取得する方法があるかどうか知りたいです。オプション/回避策/ベスト プラクティスは何ですか?$EDITOR
基本的には、 - のようなワークフローを希望しますheredoc
が、代わりに $editor から実行します。
$ sort -nr << FOO | uniq -c
pipe heredoc> foo
pipe heredoc> bar
pipe heredoc> baz
pipe heredoc> foo
pipe heredoc> FOO
2 foo
1 baz
1 bar
答え1
vipe
パッケージ内のコマンドもっと見るパイプラインの途中で $EDITOR を起動できます。
次のようにして、希望の動作を実現できます。
$ </dev/null vipe |sort -nr | uniq -c
答え2
あらゆる種類のエディターで動作させる唯一の方法は、一時ファイルを使用することだと思います。
FILE=$(mktemp); $EDITOR "$FILE"; <"$FILE" …command… ; rm "$FILE"
(ただし、完全な入力が提供される前にコマンドを開始することはできません。)
また、echo "# please insert your input bellow" >"$FILE"
呼び出しの前に を使用すると、$EDITOR
エディター内に表示されるコメントを挿入できます。コマンドの動作に影響を与えないことを確認してください (または、ユーザーに明示的に削除するように依頼してください)。
答え3
Emacs には、バッファの 1 つでシェルを実行する機能があります (MX シェルを使用)。ただし、起動されたプロセスは依然として stdin から入力を取得します。stdin は、もう一方の端が emacs である疑似端末になります。
答え4
Emacs では、任意のコマンドを実行し、Emacs バッファの 1 つ (正確には選択した領域) の内容を標準入力としてアプリケーションに提供できます。
たとえば、Emacs バッファの内容が でls
、それを領域としてマークした場合 ( を使用C-SPC
)、shell-command-on-region
( M-|
) を実行し、コマンドとして入力するとbash
(完全な組み合わせ: M-| command RET
) がls
実行されbash
、出力が新しいバッファとして開かれます。
領域で使用するとC-u M-| command RET
、出力は現在のバッファ内のマークされたコマンドを置き換えます。