エディタから入力を受け取る(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シェルを使用)。ただし、開始されたプロセスはまだ標準入力から入力を受け取ります。標準入力は反対側にemacsがある疑似端末です。

答え4

Emacsでは、どのコマンドでも実行でき、Emacsバッファの1つ(正確には選択項目)の内容を標準入力としてアプリケーションに提供できます。

たとえば、Emacsバッファの内容があり、lsそれを領域として表示して(を使用してC-SPC)、実行してshell-command-on-regionM-|)コマンドを入力するとbash(完全な組み合わせM-| command RET:)ls、そのバッファで実行され、bash出力は次のようになります。新しいバッファ領域が開きます。

C-u M-| command RETゾーンで使用している場合は、現在バッファに表示されているコマンドが出力に置き換えられます。

関連情報