从编辑器获取输入(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在区域上使用,输出将替换当前缓冲区中标记的命令。

相关内容