Đôi khi tôi cần phải viết văn bản và sau đó chuyển văn bản đó sang một lệnh khác. Quy trình làm việc thông thường của tôi diễn ra như thế này:
vim
# I edit and save my file as file.txt
cat file.txt | pandoc -o file.pdf # pandoc is an example
rm file.txt
Tôi thấy điều này cồng kềnh và tìm cách học bash scripting Tôi muốn làm cho quá trình đơn giản hơn nhiều bằng cách viết một lệnh kích hoạt một trình soạn thảo và khi trình soạn thảo đóng ống đầu ra của trình soạn thảo vào thiết bị xuất chuẩn. Sau đó, tôi có thể chạy lệnh như quickedit | pandoc -o file.pdf
.
Tôi không chắc nó sẽ hoạt động như thế nào. Tôi đã viết một chức năng để tự động hóa điều này bằng cách làm theo quy trình làm việc chính xác ở trên cộng với một số bổ sung. Nó tạo ra một chuỗi ngẫu nhiên để hoạt động như một tên tệp và chuyển chuỗi đó đến vim khi hàm được gọi. Khi người dùng thoát vim bằng cách lưu tệp, hàm sẽ in tệp vào bàn điều khiển và sau đó xóa tệp.
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
Vấn đề tôi sớm gặp phải là khi tôi làm một cái gì đó như quickedit | command
vim, bản thân nó không thể được sử dụng như một trình soạn thảo vì tất cả đầu ra bị hạn chế đối với đường ống.
Tôi tự hỏi nếu có bất kỳ giải pháp cho vấn đề này, để tôi có thể dẫn đầu ra của quickedit
chức năng của mình . Sự thay thế tối ưu là kích hoạt một trình soạn thảo riêng biệt, nói văn bản cao siêu, nhưng tôi thực sự muốn ở lại trong thiết bị đầu cuối.
mktemp
thay vì phát minh lại nó trong thời trang không an toàn.
:w !pandoc -o file.pdf
? (Lưu ý: khoảng cách giữaw
và!
là thiết yếu.)