Buka output dari perintah shell di panel split

23

Pertimbangkan bahasa pemrograman yang ditafsirkan.

Saya dapat menjalankan skrip yang saat ini dibuka menggunakan ! interpreter %, dan menggunakan tombol kembali untuk kembali ke vim setelah eksekusi selesai.

Apakah mungkin untuk tidak mengganti jendela saat ini dengan output dari perintah shell yang dieksekusi, tetapi buka output dalam panel split baru? Saya ingin tetap melihat kode sumber saya selama pelaksanaan skrip saya.

Saya mencoba :split ! interpreter %, tetapi tidak berhasil.

Apakah ada cara? Saya menggunakan vim 7.3.

muffel
sumber

Jawaban:

29

Dengan :!, perintah eksternal dieksekusi di shell, dan output yang sekilas tidak ditangkap di dalam Vim; Anda baru saja melihat apa yang akan dicetak ke terminal, kemudian kontrol kembali ke Vim setelah perintah eksternal selesai.

Untuk menjaga output, Anda harus membacanya ke dalam buffer Vim . Untuk itu, ada :read!perintahnya. Untuk membuka buffer awal yang baru , gabungkan ini dengan :new:

:new | 0read ! <command>

Jika Anda ingin meneruskan nama file buffer saat ini ( %) ke perintah eksternal, Anda harus menggunakan :execute, sehingga sudah dievaluasi dalam buffer saat ini:

:execute 'new | 0read ! interpreter' expand('%')

Atau, Anda menggunakan fakta bahwa dengan buffer baru, yang sebelumnya menjadi yang alternatif , dan menggunakan #alih-alih %:

:new | 0read ! interpreter #

Singkirkan penyangga awal dengan :bdelete!.

Jika Anda ingin melihat output tidak sinkron saat dijalankan, Anda memerlukan multiplexer eksternal, atau sebuah plugin, seperti yang disebutkan dalam jawaban @chaos.

Ingo Karkat
sumber
Perintah ": execute ..." di atas berfungsi untuk saya, tetapi ketika saya mencoba mengikatnya ke F9 keystroke, menggunakan entri .vimrc ini [nnoremap <buffer> <F9>: jalankan 'new | 0baca! / Usr / bin / env python3 'expand ('% ')], saya mendapatkan error berikut: [/ bin / bash: -c: line 0: EOF yang tak terduga sambil mencari pencocokan `' 'expand ('% ' )]. Saya mencoba beberapa urutan melarikan diri, tetapi saya kira bukan yang benar. = :). Ada ide? Terima kasih.
NYCeyes
2

Sejauh yang saya tahu, Anda tidak bisa melakukan itu vim. Tapi gunakan multiplexer terminal seperti screenuntuk itu. Sebelum membuka vim, mulailah multiplexer:

screen

Kemudian tekan ctrl- a Suntuk horitzontal dan ctrl- a |untuk layar tumpah vertikal.

Sekarang buka file vimdi salah satu layar terbagi. Dan lompat ke layar lain menggunakan ctrl- a tab. Perhatikan bahwa, pada layar kedua Anda harus membuka layar baru ( ctrl- a c) terlebih dahulu sebelum Anda dapat menggunakannya.

Di layar dengan vim Anda dapat mengedit file dan di layar lain Anda dapat menjalankannya dan melihat pesan dan kode secara permanen.

Di sini referensi cepat untuk screen.

kekacauan
sumber
Atau, Anda dapat menggunakan tmuxmultiplexer dan vim-dispatchplugin untuk mengotomatiskan pemisahan dan lompatan antar panel.
Taketwo