Bagaimana cara menggunakan vim dalam pipa Unix?
Saya dapat menggunakan vim / ex untuk grep file menggunakan doa berikut:
ex -c'g/foo/p' -cq -s afile.txt
Saya sangat ingin menggunakan perintah serupa untuk grep beberapa teks dari stdin. Saya pikir perintah berikut harus berfungsi, tetapi tidak menghasilkan output:
cat afile.txt | ex -c'g/foo/p' -cq -s -
Hal yang sama terjadi jika saya menggunakan vim -e
alih-alih ex
:
cat test.md | vim -e -c'g/foo/p' -cq -s -
Apakah ada cara agar saya dapat memaksa ex untuk membaca buffer awal dari stdin dan mencetak keluaran ke stdout, sehingga dapat digunakan dalam pipa saluran Unix?
Jawaban
Pindahkan nama file khusus -
sebelumnya -e
:
cat test.md | vim -e -c'g/foo/p' -cq -s -
^
✘
cat test.md | vim - -e -c'g/foo/p' -cq -s
^
✔
Sebelumnya -e
, -
dibaca sebagai teks literal. Setelah -e
, -
dibaca sebagai perintah Ex.
Untuk menekan Vim: Reading from stdin...
peringatan, teruskan --not-a-term
argumen ke vim(1)
perintah:
cat test.md | vim - -e -c'g/foo/p' -cq -s --not-a-term
^----------^
Untuk membuat Vim berhenti, jalankan :qa!
alih-alih hanya :q
:
cat test.md | vim - -e -c'g/foo/p' +'qa!' -s --not-a-term
^-^
Anda dapat bergabung -e
dan -s
, dan Anda dapat mengganti -c
dengan +
:
cat test.md | vim - -es +'g/foo/p' +'qa!' --not-a-term
^ ^
Sekarang Anda seharusnya bisa meneruskan keluaran Vim ke utilitas shell lain; misal wc(1)
:
cat test.md | vim - -es +'g/foo/p' +'qa!' --not-a-term | wc -l
^-----^
Lihat juga:
- vims
- Vim untuk pemfilteran pipa
- Kehidupan sosial Vim
- catatan Saya