如何在linux上管道输入到sublimetext?

wim*_*wim 27 linux bash stdin pipe sublimetext

如何从stdin接收文本到sublimetext编辑器?使用vim它的工作原理如下:

echo "potato potato potato" | vim -
Run Code Online (Sandbox Code Playgroud)

同样适用于gedit,使用内容创建一个新文档.

Sublimetext似乎只是在一个新标签中开始编辑一个名为" - "的文件,还有其他一些shell技巧可以使用吗?

tyl*_*erl 16

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

#!/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
Run Code Online (Sandbox Code Playgroud)

然后您可以通过执行以下操作来使用它:

$ ifconfig | tosubl
Run Code Online (Sandbox Code Playgroud)


Ruu*_*man 13

我不知道Sublime Text,但你的问题应该是通用的,因为它适用于任何接受文件名作为参数的程序,但拒绝从stdin读取.

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

来自man bash:

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

假设SomeProcess生成您想要在编辑器中捕获的输出:

sublimetext <(SomeProcess)
Run Code Online (Sandbox Code Playgroud)

要么:

SomeProcess | sublimetext <(cat)
Run Code Online (Sandbox Code Playgroud)

如果你认为你将手动输入这个,那么你可能想要放入sublimetext <(cat)shell脚本或别名.

如果您的操作系统不支持进程替换,那么您当然可以自己指定一个临时文件:

SomeProcess > /tmp/myoutput
sublimetext /tmp/myoutput
Run Code Online (Sandbox Code Playgroud)


mil*_*man 9

从版本 4 开始,SublimeText 支持从标准输入输入。

从变更日志

构建 4063

命令行:subl -现在可用于从所有平台上的 stdin 读取

更新!只!在 MacOS 上:从 build 4109 开始

subl 现在可用于编辑标准输入,例如:echo test | 子| 猫

  • Sublime Text 4 的稳定分支已经发布,所以现在它支持 stdin 输入。阅读:https://www.sublimetext.com/blog/articles/sublime-text-4 (2认同)

ænd*_*rük 8

您可能会发现vipemoreutils有用.如果你已经设置 EDITOR='subl --wait',你可以简单地:

echo 'potato potato potato' | vipe
Run Code Online (Sandbox Code Playgroud)