Saya dapat memikirkan dua cara untuk melakukan ini.
Cara pertama mengasumsikan Anda memiliki file tersebut, tetapi file tersebut SIAP.
Cukup gunakan tanda seru vi's suffix ke perintah write (: w!) Untuk memaksa menimpa file READONLY Anda sendiri. Ini tentu saja mengasumsikan bahwa Anda memiliki izin untuk menulis dan mengeksekusi di folder saat ini.
:w!
akan menyebabkan vi untuk menimpa file READONLY yang asli.
Cara kedua mengasumsikan orang lain memiliki file tersebut, dan Anda ingin menyimpan perubahan Anda ke file itu.
Salah satu cara untuk mencapai ini adalah menyimpan perubahan yang dibuat ke file asli sebagai skrip ed dari dalam vi. Skrip ed ini dapat diterapkan ke file asli (atau file serupa lainnya) di lain waktu di luar vi dengan editor baris ed.
Cara untuk menyimpan sesi pengeditan saat ini sebagai skrip ed adalah dengan meneruskan nama file asli dan buffer vi yang diedit sebagai input standar ke utilitas berbeda dengan saklar baris perintah - yaitu menampilkan perbedaan sebagai skrip ed.
Jadi, dengan asumsi penyangga vi yang diedit, kemudian lakukan hal berikut
:.,$!diff --ed [original_file] -
Ini menggantikan semua baris dalam buffer saat ini (., $!) Dengan skrip ed yang dihasilkan (diff --ed [original_file] -) yang diperlukan untuk mengubah file asli menjadi isi dari buffer saat ini. Kami kemudian ingin menyimpan skrip ed ini ke tempat yang aman, dan menerapkan skrip ke versi file asli yang dapat kami tulis. Jadi, simpan skrip ke lokasi yang dapat ditulisi, misalnya, folder masuk Anda:
:w ~/my_ed_script
Sekarang keluar vi, dan gunakan skrip ed ini untuk mendapatkan file yang diedit yang tidak dapat disimpan. Inilah cara untuk mencapai itu dari prompt baris perintah bash, '$':
$ (cat ~/my_ed_script && echo 'w') | ed - writable_copy_of_original_file
Apa yang dilakukan urutan perintah ini dalam kata-kata adalah untuk menggabungkan skrip yang kita hasilkan dengan diff dan menggemakan perintah tulis ed, 'w', ke input standar ed. Ed kemudian menerapkan skrip ini ke salinan yang dapat ditulisi dari file asli, dan menulis perubahan buffer yang dimodifikasi itu kembali ke file.
Jadi itu adalah cara untuk menyimpan pekerjaan yang dilakukan di vi ke file yang semula dimiliki oleh orang lain menggunakan vi, diff, dan ed.