A volte ho bisogno di scrivere del testo e quindi reindirizzarlo in un altro comando. Il mio solito flusso di lavoro va in questo modo:
vim
# I edit and save my file as file.txt
cat file.txt | pandoc -o file.pdf # pandoc is an example
rm file.txt
Lo trovo ingombrante e sto cercando di imparare lo script bash Mi piacerebbe rendere il processo molto più semplice scrivendo un comando che apre un editor e quando l'editor chiude il pipe dell'output dell'editor su stdout. Quindi sarei in grado di eseguire il comando come quickedit | pandoc -o file.pdf
.
Non sono sicuro di come funzionerebbe. Ho già scritto una funzione per automatizzare questo seguendo il flusso di lavoro esatto sopra più alcune aggiunte. Genera una stringa casuale che funge da nome file e la passa a VIM quando viene invocata la funzione. Quando l'utente esce da vim salvando il file, la funzione stampa il file sulla console e quindi elimina il file.
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
Il problema che ho riscontrato presto è che quando faccio qualcosa come quickedit | command
Vim stesso non può essere usato come editor perché tutto l'output è vincolato alla pipe.
Mi chiedo se ci sono soluzioni alternative a questo, in modo da poter convogliare l'output della mia quickedit
funzione. L'alternativa non ottimale è quella di avviare un editor separato, diciamo testo sublime, ma voglio davvero rimanere nel terminale.
mktemp
piuttosto che reinventarlo in modo insicuro.
:w !pandoc -o file.pdf
? (Nota: lo spazio traw
ed!
è essenziale.)