Apakah mungkin untuk mengetikkan perintah bash di dalam vi dan mendapatkan stdout?
Saya merasa sering membosankan untuk menutup dan membuka kembali vi hanya karena saya ingin mencari sesuatu di shell.
Ya, mis. Jika Anda ingin melakukannya ls
, coba:
:!ls
Untuk menelurkan shell, gunakan
:shell
:w !sudo tee %
nano
Saya cenderung terbiasa
ctrl+z
dengan vi tidur, menjalankan apa yang saya butuhkan di shell, kemudianfg
untuk melanjutkan vi. Bukan jawaban tepat untuk pertanyaan Anda, tetapi saya merasa ini cara yang sangat cepat untuk bekerja.Jika Anda lupa bahwa Anda memiliki vi terbuka di latar belakang (ini bisa terjadi ketika Anda sedang sibuk), ketika Anda mencoba untuk keluar dari shell menggunakan
ctrl+d
Anda akan diperingatkan bahwa Anda memiliki pekerjaan latar belakang yang sedang berjalan, dan Anda dapat menutupnya, atau tekan ctrl + d lagi untuk keluar. Juga, jika Anda mencoba membuka kembali file yang sama dua kali, Anda mendapat peringatan pemulihan, sehingga Anda dapat menekana
untuk membatalkan, dan menjalankan fg untuk kembali ke vi.sumber
Karena Anda menyebutkan "dapatkan stdout", perhatikan bahwa Anda dapat melakukannya
dan output dari perintah akan ditambahkan ke file, atau
agar konten rentang difilter melalui perintah [misalnya
:1,$!wc
]sumber
:%!command
terlihat cukup berguna:.,+20 !sort
]Idiom pilihan saya adalah
yang merupakan singkatan
yang menyalurkan baris saat ini melalui perintah dan memasukkan output ke dalam file. Kasus paling umum bagi saya adalah mengedit perintah dengan vi dan menjalankan:
Atau
seperti (misalnya)
untuk menjalankan seluruh paragraf saat ini melalui shell.
sumber
!}
Anda harus diposisikan di awal paragraf, coba!ap
. (Saya tidak tahu apakah ini ada di setiap vi atau hanya vim)Dengan menggunakan titik dua dan tanda seru, Anda dapat menjalankan perintah apa pun di path shell dan skrip shell, perlu diingat bahwa perintah tersebut dijalankan di bawah pengguna yang menjalankan program vi / vim, dan menggunakan lingkungannya.
Karena vi menggunakan lingkungan yang berlaku saat dijalankan, ia menggunakan jalur yang sama dengan yang ada di perintah induk. Ingatlah bahwa beberapa shell menyimpan cache dari program-program di path, dan vi mungkin tidak bekerja dengan cache ini (tergantung pada shell yang digunakan dan versinya), jadi Anda mungkin menjalankan biner yang salah jika Anda memiliki lebih banyak dari satu biner dengan nama yang sama.
sumber
Anda dapat melihat output dari suatu perintah dengan mengetik, misalnya,
:!ls -lh
dalam mode perintah.Jika Anda ingin memasukkan output dari perintah ke file yang sedang Anda edit, tambahkan saja
r
. Sebagai contoh:r!which perl
,.sumber
Menggunakan
!
jelas merupakan jawaban yang benar, tetapi jika Anda sering bolak-balik, sesuatu seperti layar atau tmux mungkin juga membantu.sumber
Saya memiliki ini di .vimrc saya. Ditemukan di Stack Overflow beberapa waktu lalu:
sumber
Saya akan, dan melakukan, menyelesaikan ini dengan mudah di Linux dengan membuka dua jendela baris perintah terminal, menjalankan vi dalam satu dan lainnya tersedia untuk pekerjaan lain pada saat yang sama.
sumber