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


11

我知道只要做一下就可以写文件:w <file>。我想知道如何通过附加文件而不是覆盖文件来写入文件。

用例示例:我想从一个日志文件中取出一些样本到另一个文件中。为此,我今天可以做到:

  1. 打开日志文件
  2. 选择一些行 Shift+v
  3. 写入文件: :w /tmp/samples
  4. 选择更多行 Shift+v
  5. 附加到/tmp/samples:w !cat - >> /foo/samples

不幸的是,第5步很长,很丑陋且容易出错(缺少a >会使您丢失数据)。我希望Vim在这里有更好的东西。


3
如果您有兴趣更好地使用Vim,请结帐姊妹站点Vi和Vim
muru 2016年

Answers:


26

来自: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 '16

1
@BrunoPolaco :h只是的简写:help。开始于:help helphelp?:D
muru

0

定义一个函数:

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

调用函数:

call App('/foo/samples')
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.