En vi / vim, ¿cómo agrego un archivo en lugar de sobrescribirlo?

10

Sé que puedo escribir en un archivo simplemente haciendo :w <file>. Sin embargo, me gustaría saber cómo puedo escribir en un archivo al agregarlo en lugar de sobrescribirlo.

Ejemplo de uso: quiero tomar algunas muestras de un archivo de registro en otro archivo. Para lograr eso hoy puedo hacer:

  1. Abra el archivo de registro.
  2. Seleccione algunas líneas con Shift+v
  3. Escribe en un archivo: :w /tmp/samples
  4. Seleccione algunas líneas más con Shift+v
  5. Agregar a /tmp/samplescon:w !cat - >> /foo/samples

Lamentablemente, el paso 5 es largo, feo y propenso a errores (la falta de un >hace que pierda datos). Espero que Vim tenga algo mejor aquí.

Bruno Polaco
fuente
3
Si está interesado en usar Vim mejor, consulte el sitio hermano Vi y Vim .
muru

Respuestas:

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.

Entonces, si ha seleccionado el texto usando el modo visual, simplemente haga :w >> /foo/samples( :'<,'>se antepondrá automáticamente). Si te pierdes un >, Vim se quejará:

E494: Use w or w>>
muru
fuente
Esto es perfecto :) Nada como leer los documentos. Sin :hembargo, no sabía nada . Lo usaré más
Bruno Polaco
1
@BrunoPolaco :hes solo una abreviatura de :help. Comience con :help helphelp? : D
muru
0

Definir una función:

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

Llamar a una función:

call App('/foo/samples')
techraf
fuente