Bunu yapmanın iki yolunu düşünebilirim.
İlk yöntem, dosyanın size ait olduğunu varsayar, ancak dosya HAZIRDIR.
Kendi READONLY dosyanızın üzerine yazmaya zorlamak için vi'nin ünlem işareti sonekini write komutuna (: w!) Kullanın. Elbette bu, geçerli klasörde yazma ve yürütme izniniz olduğunu varsayar.
:w!
vi'nın orijinal READONLY dosyasının üzerine yazmasına neden olacaktır.
İkinci yol, başkasının dosyaya sahip olduğunu varsayar ve değişikliklerinizi bu dosyaya kaydetmek istersiniz.
Bunu başarmanın bir yolu, orijinal dosyada yapılan değişiklikleri, bir ed betiği olarak vi içinden kaydetmektir. Bu ed betiği, orijinal dosyaya (veya benzeri dosyalara), vi satırı dışında, ed satırı düzenleyicisiyle daha sonra uygulanabilir.
Geçerli düzenleme oturumunu bir ed betiği olarak kaydetmenin bir yolu, orijinal dosya adını ve düzenlenen vi arabelleğini --ed komut satırı anahtarı ile diff yardımcı programına standart girdi olarak iletmektir;
Böylece, düzenlenmiş bir vi tamponu varsayarak, aşağıdakileri yapın
:.,$!diff --ed [original_file] -
Bu, mevcut dosyayı (., $!) İçindeki tüm satırları, orijinal dosyayı mevcut arabellek içeriğine dönüştürmek için gerekli olan diff tarafından oluşturulan ed betiği (diff --ed [original_file] -) ile değiştirir. Daha sonra bu ed betiğini güvenli bir yere kaydetmek ve betiği yazabileceğimiz orijinal dosyanın bir sürümüne uygulamak istiyoruz. Bu yüzden, komut dosyasını yazılabilir bir yere, örneğin giriş klasörünüze kaydedin:
:w ~/my_ed_script
Şimdi vi'den çıkın ve ilk etapta kaydedilemeyen düzenlenmiş dosyayı elde etmek için bu ed betiğini kullanın. Bash komut satırı isteminde '$' komutunun nasıl elde edileceği aşağıda açıklanmıştır:
$ (cat ~/my_ed_script && echo 'w') | ed - writable_copy_of_original_file
Bu komut dizisinin kelimelerle yaptığı şey, diff ile oluşturduğumuz betiği katıştırmak ve ed yazma komutunu 'w', ed'nin standart girişine eko yapmaktır. Ed daha sonra bu betiği orijinal dosyanın yazılabilir kopyasına uygular ve bu değiştirilmiş tampon değişikliklerini dosyaya geri yazar.
Bu, vi'de yapılan çalışmaları, başlangıçta vi, diff ve ed kullanan bir başkasına ait olan bir dosyaya kaydetmenin bir yoludur.