Подтвердить что ты не робот

Как подключить вход к sublimetext на linux?

Как получить текст из stdin в редактор sublimetext? С помощью vim он работает следующим образом:

echo "potato potato potato" | vim -

То же самое работает с gedit, создавая новый документ с содержимым.

Sublimetext, похоже, только начинает редактирование файла с именем "-" на новой вкладке, есть ли другой трюк оболочки, который может работать?

4b9b3361

Ответ 1

Самое простое решение, если ваша возвышенная установка не поддерживает открытие STDIN (например, текущая версия в Linux), заключается в том, чтобы выгрузить вывод во временный файл, открыть файл в возвышенном виде и затем удалить файл. Я создал script под названием 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

Затем вы можете использовать его, выполнив что-то вроде этого:

$ ifconfig | tosubl

Ответ 2

Я не знаю Sublime Text, но ваша проблема должна быть общей, поскольку она применима к любой программе, которая принимает имя файла как аргумент, но отказывается читать из stdin.

К счастью, Bash позволяет вам вывести stdout из одного процесса в какой-то временный файл, а затем передать имя этого файла другому процессу.

От man bash:

Подстановка процесса поддерживается в системах, которые поддерживают именованные каналы (FIFO) или метод /dev/fd для именования открытых файлов. Он принимает форму < (list) или > (list). Список процессов запускается с его вводом или выводом, подключенным к FIFO или некоторому файлу в /dev/fd. Имя этого файла передается в качестве аргумента текущей команде в результате расширения. Если используется формa > (список), запись в файл будет содержать вход для списка. Если используется форма < (list), файл, переданный как аргумент, должен быть прочитан для получения вывода списка.

Предполагая, что SomeProcess создает выходные данные, которые вы хотите записать в своем редакторе:

sublimetext <(SomeProcess)

или

SomeProcess | sublimetext <(cat)

Если вы думаете, что будете печатать вручную вручную, тогда вы можете поместить sublimetext <(cat) в оболочку script или псевдоним.

На всякий случай, если ваша ОС не поддерживает замещение процесса, вы всегда можете указать временный файл самостоятельно:

SomeProcess > /tmp/myoutput
sublimetext /tmp/myoutput

Ответ 4

Спекуляция на fooobar.com/questions/250126/... немного, так как для меня это делает 90%, но не все:

Использование временного файла - это способ, который можно использовать практически с любым редактором. Еще лучше, если редактор поддерживает ожидание, пока файл не будет закрыт (Sublime sublime -w для Sublime Text), вы можете редактировать его на лету, что делает его более универсальным. Для этого вам нужно изменить предоставленный скрипт @tylerl - скрипт с именем tosubl в вашем PATH:

#!/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 -w $F # waits until the file is closed
cat $F # prints out the contents of the file to stdout
rm -f $F # clean up the file

Сейчас работает echo "hello" | tosubl > local.file echo "hello" | tosubl > local.file откроет вывод первого скрипта в Sublime и, как только вы local.file его, сохраните его в local.file.

Ответ 5

Если вы хотите отобразить цветной текст с escape-последовательностями ANSI (например, терминальным буфером), вы можете установить пакет ANSIescape и использовать следующую команду:

F=$(mktemp); cat > $F; subl $F; subl --command ansi; sleep.5; rm -f $F