Bagaimana cara mengarahkan output perintah ke vim di bash?

87

Saya mencoba mengarahkan output dari perintah bash ke file baru.

Jika saya mencoba pipa seperti di bawah ini:

ls -la | vim

Bash menunjukkan kesalahan kepada saya:

Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

Saya tahu bahwa saya bisa membuka Vim dan kemudian menggunakan:

:r !ls -la

Tetapi apakah ada cara untuk melakukan ini di bash itu sendiri, sehingga Vim dibuka dan output disisipkan di sana secara otomatis?

faizal
sumber

Jawaban:

140

Anda dapat menggunakan subtitusi proses (ini juga berfungsi dengan aplikasi yang tidak dapat membaca dari STDIN):

vim <(ls -la)

Atau gunakan vimfungsi untuk membaca dari STDIN:

ls -la | vim -
kekacauan
sumber
2
<(ls -la)sebenarnya proses substitusi daripada substitusi perintah .
Eliah Kagan
1
Saya sangat suka opsi vim, ini memungkinkan saya untuk mencari, menemukan dan menyimpan output dengan mudah dari data dumps.
Josue Alexander Ibarra
38

Anda benar-benar dekat dengan Anda sendiri. Anda hanya kehilangan satu karakter.

ls -la | vim -
Cris Holdorph
sumber
10
Yah secara teknis itu dua karakter. ;)
Cory Klein
19

Inilah pendekatan lain, semoga untuk mengajarkan seseorang sesuatu yang baru.

Jika Anda tahu bahwa perintah itu :r !ls -laberfungsi di dalam vim, Anda bisa melakukan yang berikut untuk membuka vim dan membuatnya menjalankan perintah segera setelah terbuka, langsung dari bash:

vim -c ':r! ls -la'

Ini sama dengan membuka vimlalu menjalankan perintah :r! ls -la. Ini harus bekerja dengan vimperintah apa pun , di mana perintah datang setelah -copsi.

Alaa Ali
sumber
12

Anda dapat memberitahu vim untuk membuka stdin:

ls -la | vim -
rapuh
sumber
1

Jika tujuan Anda hanya untuk mendapatkan output ke file teks maka Anda tidak perlu memanggil vim. Bash bisa melakukannya sendiri

ls -la > outputfile.txt
Jake Stewart
sumber
1

setlocal buftype=nofile

Ini adalah opsi yang baik jika Anda ingin membuat alias untuk menggantikan less:

seq 100 | vim +':setlocal buftype=nofile' -

Sekarang Anda tidak perlu mengetik! berhenti.

Pilihan lain adalah:

seq 100 | vim +'nnoremap q :quit!' -

sehingga Anda bisa keluar hanya dengan q<enter>.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber
Ide bagus. Pasti lebih pendek dari mengetik selama ini! :)
kode