Saya ingin menulis seluruh buffer ke dalam output standar ( /dev/stdout
) alih-alih file dan perintah berikut berfungsi seperti yang diharapkan saat mengedit file:
:w >> /dev/stdout
Petunjuk: Tekan Control+ Luntuk menyegarkan layar.
Tapi itu tidak berfungsi seperti yang diharapkan ketika saya mencoba melakukan hal yang sama dari baris perintah ( non-interaktif ), misalnya:
$ echo This is example. | vim - '+:w >> /dev/stdout' '+:q!'
Vim: Reading from stdin...
Sama dengan :w !tee
, :x! /dev/stdout
, :%print
dan yang sejenis.
Sebelum berhenti, itu mengatakan: [Device] 1L, 17C appended
.
Apakah ada cara memaksa vim untuk menulis input standar ke output standar di tengah pipa? Mungkin itu entah bagaimana buffered?
command-line
invocation
unix
ex-mode
kenorb
sumber
sumber
vim
untuk parsing file alih-alihsed
(mis., Perubahan kompleks berulang untuk beberapa file besar). Contohnya tidak melakukan apa pun untuk membuatnya tetap sederhana dan tidak membuat duplikat potensial dari posting lain .Jawaban:
Untuk mencetak buffer ke shell keluaran standar,
vim
perlu mulai dalam mode Ex, jika tidak, ia akan membuka cara "normal" dengan jendela sendiri dan menghapus semua buffer output saat berhenti.Berikut ini contoh kerja paling sederhana:
atau bahkan lebih pendek:
Catatan: Perintah
vim -e
ini pada dasarnya setara denganex
perintah.Deskriptor file khusus untuk input standar perlu ditentukan (
/dev/stdin
) untuk mencegah pesan tambahan yang mengganggu (seperti yang dijelaskan di bawah).Dan berikut adalah beberapa contoh dengan string parsing:
Catatan: Contoh terakhir menunjukkan pesan tambahan yang menjengkelkan yang tidak mungkin disembunyikan, itu karena strategi standar membaca seluruh file ke dalam memori dan mengatakan itu dibaca dari input standar. Contoh pertama berfungsi tanpa pesan, karena file menghasilkan data tanpa akhir tanpa sinyal end-of-file ( EOF ), sehingga tidak akan pernah mencapai akhir pembacaan inputnya.
Terkait:
sumber
+q!
bukan+:q!
, kan?vipe
adalah alat yang mudah untuk mengedit saluran pipa, bagian darimoreutils
paket. Ini adalah pembungkus untuk editor (termasukvi
yang memberikan namanya). Ia menggunakanEDITOR
variabel lingkungan untuk mengatur editor, jadi, seperti dengan alat-alat lain yang menggunakanEDITOR
(seperticrontab
,visudo
, dll), Anda bisa tindakan script menggunakan variabel tersebut. Misalnya, Anda dapat mengubahnya untuk melakukan:Tentu saja, tindakan rumit mungkin beralih ke mengutip neraka, sehingga Anda dapat menulis skrip:
Dan gunakan
EDITOR="sh /path/to/script"
.sumber