Text-Processing

在 vi/vim 中,如何附加到文件而不是覆蓋它?

  • April 5, 2016

我知道我可以通過簡單地寫入文件:w <file>。我想知道如何通過附加而不是覆蓋它來寫入文件。

範例案例:我想將一些樣本從日誌文件中提取到另一個文件中。為了實現這一目標,我可以做到:

  1. 打開日誌文件
  2. 選擇一些行Shift+v
  3. 寫入文件::w /tmp/samples
  4. 選擇更多的行Shift+v
  5. 附加/tmp/samples:w !cat - >> /foo/samples

不幸的是,第 5 步很長、很難看且容易出錯(缺少 a>會使您失去數據)。我希望 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(:'<,'>將自動添加)。如果你錯過了 a >,Vim 會抱怨:

E494: Use w or w>>

定義一個函式:

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

呼叫一個函式:

call App('/foo/samples')

引用自:https://unix.stackexchange.com/questions/274229