場合によっては、テキストを作成し、そのテキストを別のコマンドでリンクする必要があります。私の一般的なワークフローは次のとおりです。
vim
# I edit and save my file as file.txt
cat file.txt | pandoc -o file.pdf # pandoc is an example
rm file.txt
私はこれが面倒であることを知り、bashスクリプトを学びたいと思います。エディタを開き、エディタが閉じたときにエディタの出力を標準出力にパイプするコマンドを作成して、プロセスをより簡単にしたいと思います。その後、コマンドを実行できますquickedit | pandoc -o file.pdf
。
これがどのように機能するのかよくわかりません。上記の正確なワークフローに従い、いくつかの追加機能を追加してそれを自動化する関数を作成しました。ファイル名でランダムな文字列を生成し、関数を呼び出すとそれをvimに渡します。ユーザーがファイルを保存してvimを終了すると、この関数はファイルをコンソールに印刷してからファイルを削除します。
function quickedit {
filename="$(cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 32)"
vim $filename
cat $filename
rm $filename
}
# The problem:
# => Vim: Warning: Output is not to a terminal
私がすぐに直面した問題は、vimのような作業をするときにすべてのquickedit | command
出力がパイプに制限されているため、vim自体がエディタとして使用できないことです。
関数の出力をパイプするための回避策があるかどうか疑問に思いますquickedit
。次善策は、サブライムテキストのような別のエディタを実行することですが、私は本当に端末に滞在したいと思います。
ベストアンサー1
vipe
パイプを編集するプログラムです。
command1 | vipe | command2
完全な出力を含むエディタが提供され、終了すると、コンテンツはそのエディタにパイプされますcommand1
。command2
この場合、次のようにすることcommand1
ができます。
: | vipe | pandoc -o foo.pdf
または:
vipe <&- | pandoc -o foo.pdf
vipe
Vimを開くために使用できる変数をEDITOR
取得します。VISUAL
まだインストールしていない場合は、パッケージまたはあなたの好みに合ったパッケージにありますvipe
。moreutils
sudo apt-get install moreutils