vi [m] membaca rentang garis dari file lain

9

Di Linux, mengedit file_Bdalam vim saya ingin menambahkan baris 10-25 dari file_A. Contoh: Seseorang memiliki seluruh set Dokumen-HTML dengan header yang sama dan ya, orang dapat membuat template dan mulai dari sana, tetapi tetap:

Saya mencari cara [dan elegan] sederhana untuk menyisipkan berbagai baris dari satu file dan menambahkannya ke file yang sedang saya edit. Dalam vim.

Solusi yang saya temukan sejauh ini tetapi tidak persis apa yang saya cari, adalah

  • di file_B dalam perintah :read file_Aakan menambahkan * seluruh file_A * ke file_B. Terlalu banyak
  • ada copy & paste di dalam vim - tetapi untuk ini harus dibuka file_A
  • di dalam file_A :10,25w! file_Bakan 'mengirim' rentang garis yang diberikan ke file_B.
    Ini sepertinya cukup dekat dengan salin & tempel
  • seseorang dapat membuka banyak jendela dalam vim
    Tetapi ketika saya bekerja pada layar 8 inci, banyak jendela membuat orientasi menjadi sulit

Karena saya tidak dapat menemukan solusi yang nyaman, saya bertanya-tanya apakah saya hanya salah memahami sesuatu atau cara yang saya temukan sejauh ini biasa digunakan dan diambil sebagai cara standar.

erch
sumber
Lihat pertanyaan SO ini , jawaban @ Bernhard adalah jawaban yang diterima untuk pertanyaan itu juga!
slm
@ msl Saya menyadari jawaban ini, tetapi karena saya tidak memasukkannya ke dalam daftar solusi yang saya temukan, terima kasih atas petunjuknya. Saya masih mencari sesuatu yang dibangun di dalam vim. Tapi ini sepertinya di luar jangkauan. Dan saya benar-benar bertanya-tanya apakah ini hanya dapat dicapai melalui perintah luar, karena sejauh yang saya dapatkan vimsekarang, saya sampai pada batasan kecil di sini.
erch
@ cellar.dweller Anda dapat membuat semacam fungsi darinya, jika Anda benar-benar menginginkan sesuatu yang lebih mudah.
Bernhard

Jawaban:

11

Solusi terbaik yang bisa saya dapatkan, adalah dengan memanggil seddan menggabungkannya secara eksternal:read !

:r !sed -n -e '10,25p' fileB
Bernhard
sumber
Tidak bekerja di sini - tetapi mengapa? Pertama, terima kasih atas bantuan Anda. Apa yang saya dapatkan adalah 'E34: no command before' [diterjemahkan secara kasar] seolah-olah vim mencoba mengulang perintah. Sejauh yang saya pahami, langkah demi langkah: :rkependekan dari readvim. Saya tidak memiliki pengetahuan tentang seddan bagaimana menggunakannya. Tentu saja, saya diganti fileBdengan file yang sebenarnya :)
erch
@ cellar.dweller Jawaban saya dimutakhirkan oleh seseorang, saya mendapatkan kesalahan yang sama dengan kode itu. Aku menggulungnya kembali. Lihat apakah ini cocok untuk Anda.
Bernhard
@Stephane Bagus untuk mempersingkat jawaban, tetapi saran Anda tidak berhasil.
Bernhard
Sekarang berhasil! Untuk menambahkan sedikit kerumitan saya: mulai dengan :10rdll. Akan menempatkan konten dari baris sepuluh di [selama ini ada]. Bekerja seperti jimat sekarang. Bagus. Terima kasih banyak!
erch
2
Ups, maaf. Lupa tentang ekspansi vim untuk! Seharusnya begitu :r!sed 10,25\!d. Perhatikan bahwa Anda tidak memerlukan -eatau kutipannya, sehingga Anda dapat menuliskannya juga :r!sed -n 10,25psecara singkat. :r sed '10,$\!d;25q'untuk menghindari membaca seluruh file.
Stéphane Chazelas