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

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

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

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

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

  • vim spell checker?
  • Что создает файлы подкачки?
  • Лучший способ обновить vim / gvim до 7.3 в Ubuntu 10.04?
  • Vim потеряет способность копировать клиенту клип через SSH
  • Настройте bash и / или vim для запуска source ~ / .bashrc каждый раз, когда я закончу его редактирование
  • Vim NERDTree re-size vsplit
  • скрипт bash - программа супервизора
  • mutt: как правильно отображать символы emoji?
  • 2 Solutions collect form web for “В vi / vim, как добавить в файл вместо его записи?”

    От :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 ( :'<,'> будет автоматически добавляться). Если вы пропустите V > , Vim будет жаловаться:

     E494: Use w or w>> 

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

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

    Вызвать функцию:

     call App('/foo/samples') 
    Linux и Unix - лучшая ОС в мире.