web-dev-qa-db-ja.com

vi / vimでは、ファイルを上書きするのではなく、ファイルに追加するにはどうすればよいですか?

:w <file>を実行するだけでファイルに書き込むことができます。ファイルを上書きする代わりに、ファイルに追加して書き込む方法を教えてください。

使用例:ログファイルから別のファイルにいくつかのサンプルを取りたい。今日それを達成するために私はできる:

  1. ログファイルを開く
  2. Shift+vでいくつかの行を選択します
  3. ファイルに書き込む::w /tmp/samples
  4. Shift+vでさらに行を選択します
  5. /tmp/samples:w !cat - >> /foo/samplesを追加

残念ながら、手順5は長く、見苦しく、エラーが発生しやすくなります(>がないと、データが失われます)。ここにVimがもっと良いものがあるといいのですが。

10
Bruno Polaco

: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>>
25
muru

関数を定義します。

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

関数を呼び出す:

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