現在のファイルの内容全体をfilenameというファイルに追加します。

現在のファイルの内容全体をfilenameというファイルに追加します。

私は単にファイルに書き込むだけでこれを行うことができることを知っています:w <file>。ファイルを上書きするのではなく、追加してファイルに書き込む方法を知りたいです。

ユースケース例:ログファイルの一部のサンプルを別のファイルにインポートしたいと思います。これを達成するために、今日は次のようにすることができます。

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

残念ながら、ステップ5は長くて見苦しく、エラーが発生しやすい(欠落すると>データが失われる可能性があります)。 Vimにもっと良いことがあったらと思います。

答え1

~から: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>>

答え2

関数を定義します。

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

関数呼び出し:

call App('/foo/samples')

答え3

現在のファイルの内容全体をfilenameというファイルに追加します。

:w >> filename

現在のファイルの1行から13行までの内容をfilenameというファイルに追加します。

:1,13w >> filename

関連情報