如何pipeinput到sublimetext在Linux上?

如何从标准input接收文本到sublimetext编辑器? 用vim就可以这样工作:

echo "potato potato potato" | vim - 

同样的事情与gedit一起工作,创build一个新的文件的内容。

Sublimetext似乎刚开始编辑一个名为“ – ”的文件在一个新的选项卡中,是否有一些其他的shell技巧可以工作?

如果您的崇高安装不支持打开STDIN(例如Linux上的当前版本),最简单的解决方案是将输出转储到临时文件,以sublime打开文件,然后删除文件。 我在我的bin目录中创建了一个名为tosubl的脚本,如下所示:

 #!/bin/bash TMPDIR=${TMPDIR:-/tmp} # default to /tmp if TMPDIR isn't set F=$(mktemp $TMPDIR/tosubl-XXXXXXXX) cat >| $F # use >| instead of > if you set noclobber in bash subl $F sleep .3 # give subl a little time to open the file rm -f $F # file will be deleted as soon as subl closes it 

那么你可以通过做这样的事情来使用它:

 $ ifconfig | tosubl 

我不知道崇高的文本,但你的问题应该是通用的,它适用于任何接受文件名作为参数的程序,但拒绝从标准输入读取。

幸运的是,Bash允许您将stdout从一个进程管理到某种临时文件,然后将该文件的名称传递给另一个进程。

man bash

在支持命名管道(FIFOs)的系统或命名打开文件的/ dev / fd方法上支持进程替换。 它采用<(list)或>(list)的形式。 进程列表在其输入或输出连接到FIFO或/ dev / fd中的某个文件时运行。 作为扩展的结果,此文件的名称作为参数传递给当前命令。 如果使用>(列表)表单,写入文件将为列表提供输入。 如果使用<(list)形式,则应读取作为参数传递的文件以获取列表的输出。

假设SomeProcess产生你想在你的编辑器中捕获的输出:

 sublimetext <(SomeProcess) 

要么:

 SomeProcess | sublimetext <(cat) 

如果你认为你会手工输入这个内容,那么你可能需要将sublimetext <(cat)放入shell脚本或别名中。

以防万一你的操作系统不支持进程替换,那么你总是可以自己指定一个临时文件:

 SomeProcess > /tmp/myoutput sublimetext /tmp/myoutput 

你可能会发现从moreutils vipe有用。 如果你已经设置了 EDITOR='subl --wait' ,你可以简单地:

 echo 'potato potato potato' | vipe