Stdinからsublimetextエディターにテキストを受信するにはどうすればよいですか? vimでは次のように機能します:
echo "potato potato potato" | vim -
同じことがgeditでも機能し、コンテンツを含む新しいドキュメントを作成します。
Sublimetextは、新しいタブで「-」というファイルの編集を開始したようですが、他に機能するシェルトリックはありますか?
崇高なインストールがSTDIN(Linuxの現在のバージョンなど)を開くことをサポートしていない場合の最も簡単な解決策は、出力を一時ファイルにダンプし、崇高なファイルを開いてからファイルを削除することです。次のように、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
Sublime Textはわかりませんが、ファイル名を引数として受け入れるが、stdinからの読み取りを拒否するすべてのプログラムに適用されるという点で、問題は一般的であるはずです。
幸い、Bashを使用すると、stdoutをあるプロセスからある種の一時ファイルにパイプして、そのファイルの名前を別のプロセスに渡すことができます。
_man bash
_から:
プロセス置換は、名前付きパイプ(FIFO)または開いているファイルに名前を付ける/ dev/fdメソッドをサポートするシステムでサポートされています。 <(リスト)または>(リスト)の形式を取ります。プロセスリストは、入力または出力をFIFOまたは/ dev/fd内のファイルに接続して実行されます。このファイルの名前は、次の結果として現在のコマンドに引数として渡されます。 >(list)形式を使用する場合は、ファイルに書き込むとlistの入力が提供されます。<(list)形式を使用する場合は、引数として渡されたファイルを読み取って、listの出力を取得する必要があります。
SomeProcessが、エディターでキャプチャしたい出力を生成すると仮定します。
_sublimetext <(SomeProcess)
_
または:
_SomeProcess | sublimetext <(cat)
_
これを手作業で頻繁に入力すると思われる場合は、sublimetext <(cat)
をシェルスクリプトまたはエイリアスに挿入することをお勧めします。
OSがプロセス置換をサポートしていない場合に備えて、もちろん、いつでも自分で一時ファイルを指定できます。
_SomeProcess > /tmp/myoutput
sublimetext /tmp/myoutput
_
moreutils のvipe
が役立つ場合があります。 setEDITOR='subl --wait'
、次のことができます。
echo 'potato potato potato' | vipe
https://stackoverflow.com/a/31035834/2429912 少しピギーバックします。私にとっては、90%を実行しますが、すべてではありません。
一時ファイルの使用は、事実上すべてのエディターで使用できる方法です。エディターがファイルが閉じられるまで待機することをサポートしている場合(SublimeTextの場合はsublime -w
)、実際にその場で編集できるため、より用途が広くなります。これを行うには、提供されているスクリプト@tylerlを変更する必要があります-PATH内の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 -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
を実行すると、Sublimeで最初のスクリプトの出力が開き、閉じたらlocal.file
に保存します。
ANSIエスケープシーケンス(ターミナルバッファなど)を使用して色付きのテキストを表示する場合は、パッケージ ANSIescape をインストールして、次のコマンドを使用できます。
F=$(mktemp); cat > $F; subl $F; subl --command ansi; sleep .5; rm -f $F