Je peux penser à deux façons de le faire.
La première façon suppose que vous possédez le fichier, mais le fichier est READONLY.
Utilisez simplement le suffixe du point d'exclamation de vi pour la commande write (: w!) Pour forcer le remplacement de votre propre fichier READONLY. Bien entendu, cela suppose que vous ayez l'autorisation d'écrire et de vous exécuter dans le dossier en cours.
:w!
vi écrasera le fichier READONLY original.
La deuxième méthode suppose que le fichier est détenu par une autre personne et que vous souhaitez enregistrer vos modifications dans ce fichier.
Un moyen d'y parvenir consiste à enregistrer les modifications apportées au fichier d'origine en tant que script ed à partir de vi. Ce script ed peut être appliqué au fichier d'origine (ou à d'autres fichiers similaires) ultérieurement en dehors de vi avec l'éditeur de lignes ed.
Une façon de sauvegarder la session d'édition en cours en tant que script ed consiste à transmettre le nom de fichier d'origine et le tampon vi édité comme entrée standard à l'utilitaire diff avec le commutateur de ligne de commande --ed, c'est-à-dire d'afficher les différences sous forme de script ed.
Donc, en supposant un tampon vi édité, procédez comme suit
:.,$!diff --ed [original_file] -
Ceci remplace toutes les lignes du tampon courant (., $!) Par le script éd généré par diff (diff --ed [fichier_original] -) nécessaire pour convertir le fichier original en contenu du tampon courant. Nous souhaitons ensuite enregistrer ce script ed dans un endroit sûr et l'appliquer à une version du fichier d'origine vers lequel nous pouvons écrire. Enregistrez donc le script dans un emplacement accessible en écriture, par exemple votre dossier de connexion:
:w ~/my_ed_script
Maintenant quittez vi et utilisez ce script ed pour obtenir le fichier édité qui n’a pas pu être sauvegardé. Voici comment accomplir cela à partir de l'invite de la ligne de commande bash, '$':
$ (cat ~/my_ed_script && echo 'w') | ed - writable_copy_of_original_file
Ce que cette séquence de commande fait en mots, c’est caténer le script que nous avons généré avec diff et faire écho à la commande d’écriture ed, 'w', sur l’entrée standard de ed. Ed applique ensuite ce script à la copie inscriptible du fichier d'origine et enregistre les modifications de tampon modifiées dans le fichier.
C’est donc une façon de sauvegarder le travail effectué dans vi dans un fichier qui appartenait à l’origine à une autre personne et utilisant vi, diff et ed.