我只是好奇是否有一種方法可以從 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 可以在其緩衝區之一中運行 shell(使用 MX shell)。但是啟動的進程仍然會從標準輸入獲取輸入,它們的標準輸入只是一個偽終端,其另一端是 emacs。
答案4
在 Emacs 中,您可以執行任何命令並將 Emacs 緩衝區之一(準確地說是所選區域)的內容作為標準輸入提供給應用程式。
例如,如果 Emacs 緩衝區的內容是ls
,並且您將其標記為區域(使用C-SPC
),然後執行shell-command-on-region
( M-|
) 並鍵入命令bash
(完整組合:M-| command RET
),則將ls
在其中執行bash
,並且輸出將作為新緩衝區打開。
如果您C-u M-| command RET
在區域上使用,輸出將取代目前緩衝區中標記的命令。