В vi / vim как мне добавить файл вместо его перезаписи?

10

Я знаю, что могу записать в файл, просто делая :w <file>. Я хотел бы знать, хотя, как я могу записать в файл, добавив его вместо перезаписи.

Пример использования: я хочу взять несколько образцов из файла журнала в другой файл. Чтобы достичь этого сегодня я могу сделать:

  1. Откройте файл журнала
  2. Выберите несколько строк с Shift+v
  3. Написать в файл: :w /tmp/samples
  4. Выберите еще несколько строк с Shift+v
  5. Добавить к /tmp/samplesс:w !cat - >> /foo/samples

К сожалению, шаг 5 долгий, безобразный и подвержен ошибкам (если >вы потеряете данные, вы потеряете данные). Я надеюсь, что у Вима есть что-то лучше здесь.

Бруно Полако
источник
3
Если вы заинтересованы в более эффективном использовании Vim, сделайте заказ на дочерних сайтах Vi и Vim .
Муру

Ответы:

25

От :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.

Итак, если вы выбрали текст в визуальном режиме, просто сделайте :w >> /foo/samples( :'<,'>будет автоматически добавлено). Если вы пропустите >, Vim будет жаловаться:

E494: Use w or w>>
Мур
источник
Это идеально :) Ничего подобного читать документы. Хотя не знал о :h. Буду больше этим пользоваться
Bruno Polaco
1
@BrunoPolaco :hэто просто сокращение для :help. Начать с :help helphelp? : D
Муру
0

Определить функцию:

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

Вызов функции:

call App('/foo/samples')
techraf
источник