Dans vi / vim, comment ajouter un fichier au lieu de l'écraser?

10

Je sais que je peux écrire dans un fichier en faisant simplement :w <file>. Je voudrais savoir cependant comment puis-je écrire dans un fichier en y ajoutant au lieu de l'écraser.

Exemple de cas d'utilisation: je souhaite prélever des échantillons d'un fichier journal dans un autre fichier. Pour y parvenir aujourd'hui, je peux faire:

  1. Ouvrez le fichier journal
  2. Sélectionnez quelques lignes avec Shift+v
  3. Écrire dans un fichier: :w /tmp/samples
  4. Sélectionnez quelques lignes supplémentaires avec Shift+v
  5. Ajouter à /tmp/samplesavec:w !cat - >> /foo/samples

Malheureusement, l'étape 5 est longue, moche et sujette aux erreurs (manquer un >fait perdre des données). J'espère que Vim a quelque chose de mieux ici.

Bruno Polaco
la source
3
Si vous êtes intéressé à mieux utiliser Vim, consultez le site frère Vi et Vim .
muru

Réponses:

25

De :h :w:

                                                :w_a :write_a E494
:[range]w[rite][!] [++opt] >>
                        Append the specified lines to the current file.

:[range]w[rite][!] [++opt] >> {file}
                        Append the specified lines to {file}.  '!' forces the
                        write even if file does not exist.

Donc, si vous avez sélectionné le texte en mode visuel, faites-le :w >> /foo/samples( :'<,'>sera automatiquement ajouté). Si vous manquez un >, Vim se plaindra:

E494: Use w or w>>
muru
la source
C'est parfait :) Rien de tel que de lire les documents. Je n'en savais rien :h. Je
m'en servirai
1
@BrunoPolaco :hest juste un raccourci pour :help. Commencez par :help helphelp? : D
muru
0

Définissez une fonction:

fun! App(filename)
    exec "w !cat - >> " . shellescape(a:filename)
endfunc

Appeler une fonction:

call App('/foo/samples')
techraf
la source