Bazen metin yazmam ve o metni başka bir komuta aktarmam gerekiyor. Her zamanki iş akışım şuna benzer:
vim
# I edit and save my file as file.txt
cat file.txt | pandoc -o file.pdf # pandoc is an example
rm file.txt
Bu hantal ve bash betiği öğrenmeye çalışıyorum. Bir editöre ateş eden bir komut yazarak ve editörün stdout'a çıktığı için editörün çıkışını kapattığında işlemi çok daha basit hale getirmek istiyorum. O zaman komutu olarak çalıştırabilirim quickedit | pandoc -o file.pdf
.
Bunun nasıl işe yarayacağından emin değilim. Yukarıda tam iş akışını ve bazı eklemeleri takip ederek bunu otomatikleştirmek için bir işlev yazdım. Bir dosya adı olarak işlev görmek için rastgele bir dize oluşturur ve işlev çağrıldığında bunu vim'den geçirir. Kullanıcı dosyayı kaydederek vim'den çıktığında, işlev dosyayı konsola yazdırır ve ardından dosyayı siler.
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
Yakında karşılaştığım sorun, quickedit | command
vim'in kendisi gibi bir şey yaptığım zaman editör olarak kullanılamaması çünkü tüm çıktılar boru ile sınırlı.
quickedit
Fonksiyonumun çıktısını alabilmem için bunun için herhangi bir geçici çözüm olup olmadığını merak ediyorum . En alt alternatif ise ayrı bir editörün ateşlenmesi, yüce metin demek, fakat gerçekten terminalde kalmak istiyorum.
mktemp
.
:w !pandoc -o file.pdf
? (Arasında boşluk Notw
ve!
gereklidir.)