エディターから入力を取得します (vim/nano/emacs/textmate?)

エディターから入力を取得します (vim/nano/emacs/textmate?)

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、出力は現在のバッファ内のマークされたコマンドを置き換えます。

関連情報