從編輯器取得輸入(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 可以在其緩衝區之一中運行 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在區域上使用,輸出將取代目前緩衝區中標記的命令。

相關內容