Saya menggunakan grep -e Peugeot -e PeuGeot carlist.txt
untuk mencari melalui carlist.txt dan mengeluarkan beberapa item dan saya grep -e Peugeot -e PeuGeot carlist.txt | vi
kira itu akan pipa untuk saya tetapi ini adalah apa yang saya dapatkan:
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.
:read !grep -e Peugeot -e PeuGeot carlist.txt
.:read !cmd...
akan memasukkan output cmd ... dalam file (di lokasi kursor)grep ... > /tmp/foo
. Anda dapat menambahkan&& vi /tmp/foo
di bagian akhir jika Anda ingin segera mengedit file itu.vi
beroperasi pada file teks sewenang-wenang; file itu sendiri tidak terkait langsung denganvi
. (Atau, seperti yang baru saja saya pelajari,vi -
akan menyebabkanvi
beroperasi pada isistdin
;vim
apakah ini, tetapi tidak semua versivi
dilakukan.)Jawaban:
Menjalankan vi atau vim dengan '-' sebagai argumen membuatnya membaca file untuk diedit dari input standar. Karenanya:
akan melakukan apa yang Anda butuhkan.
sumber
stdin
. Dalam beberapa kasus, Anda harus mengarahkan daristderr
kestdin
, misalnya:valgrind my_file.out 2>&1 | vi -
grep
pewarnaan pencarian (terdiri dari karakter yang tidak dapat dicetak) di dalam Vim? Anda selalu dapat melakukan pencarian di Vim.Anda harus menggunakan pengalihan output :
Juga, saya pikir Anda
grep
dapat ditingkatkan:sumber
Selain itu
vim -
, Anda juga dapat menggunakan subtitusi proses menggunakan<(command)
sintaksis, misalnya:Lihat juga:
sumber
Pengalihan output juga dapat digunakan seperti ini:
Bahkan beberapa output perintah dapat dialihkan, seolah-olah disimpan dalam file terpisah:
sumber
Di
~/bin/r
:di
~/.vimrc
:Kemudian:
dan saya punya
di saya
~/.bashrc,
begitusumber
Ada banyak cara efektif untuk melakukan apa yang Anda inginkan, baik di dalam vi (m) atau di luar vi (m).
Jalankan perintah Anda, buat file (sementara), lalu edit file ( lihat jawaban Joseph R. )
Jalankan perintah Anda (di latar belakang) untuk menghasilkan file sementara, dan edit file tersebut, menggunakan ": e!" untuk me-refresh file Anda seperti yang dihasilkan (ini berguna untuk file log, dan file lain yang diproduksi oleh proses lain, misalnya cron?),
Jalankan vi (m), dan jalankan proses anak untuk membuat file sementara, dan kemudian membacanya,
Atau, cukup pindah ke file,
Jalankan vi (m), dan gunakan double-bang "!!" untuk memiliki vi menjalankan perintah anak, mengambil hasil dan memasukkannya ke lokasi saat ini (menimpa garis saat ini, jadi pastikan Anda memiliki baris kosong),
Dan sekarang Anda dapat menulis file (jika Anda mau) ke nama file apa saja,
Dan jawaban Petr Uzel juga bagus,
Yang berbunyi dari stdin
sumber