Masukkan output dari perintah sistem di lokasi saat ini di vim


33

Dalam vim, ketika saya gunakan

:r !ls somefilename

itu menyisipkan output dari perintah itu pada baris baru di bawah baris saat ini.

Jika aku melakukan

let @a = system("ls")

dan kemudian

"ap

masih menyisipkan output pada baris baru di bawah baris saat ini.

Apakah ada cara untuk membuat keluaran memasukkan vim di lokasi saat ini?


Lihat jawaban yang bermanfaat ini. Eksekusi baris saat ini dalam bash dari vim
Rohan Ghige

Jawaban:


14

Anda dapat menempelkan konten buffer clipboard antara karakter dengan Ctrl-R * dalam mode insert (dan pendekatan serupa untuk buffer lainnya). Jadi jika Anda bisa mendapatkan perintah sistem ke buffer, Anda harus mengaturnya. (Sumber: https://stackoverflow.com/questions/1491135/paste-multi-line-string-into-gvim-at-cursor-position ).

:let @a=system("ls -l")akan memasukkan output ls -lke register a. Anda kemudian dapat menempelkannya (dalam mode sisipan) dengan ^R-a.


Juga, pada sebagian besar platform, clipboard disinkronkan dengan register (biasanya *) jadi jika Anda menyalurkan output perintah Anda ke clipboard Anda, itu akan ada di dalam "*untuk Anda gunakan.
Bruno Bronosky

39
:r !command 

akan membaca output dari perintah dan memasukkannya ke dalam baris di bawah baris saat ini. Ini adalah bagaimana vi diprogram Anda tidak dapat mengubah perilaku.

Tetapi katakan jika Anda berada di nomor baris 3. Jika Anda mencoba :r !date. Ini akan memasukkan nilai tanggal ke dalam nomor baris 4.

Jika Anda ingin nilai tanggal ditampilkan pada nomor baris 3, maka Anda :2r !dateakan mencoba memasukkan nilai tanggal pada nomor baris 3.


4
Itu menyisipkan pada garis yang berbeda, tetapi masih pada garisnya sendiri. Saya ingin memasukkannya di lokasi saat ini!
deshmukh

13

Berikut adalah cara alternatif untuk menempelkan output dari perintah eksternal sebelum kursor:

:exe 'norm i' . system("ls -l")

atau gunakan register ekspresi ( :help @=):

"=system('ls -la')

lalu tekan P. Atau cara yang lebih singkat dengan:

<CTRL-R>=system('ls -la')<CR>

4
Ini jawabannya.
Jacob

1
Sepakat! Ini harus benar-benar jawaban yang benar, karena itu mencakup solusi yang lebih terprogram (dengan :exe) yang dapat dimasukkan dalam perintah.
metasoarous
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.