如何用文件内容替换当前缓冲区的内容?

时间:2013-05-21 00:31:08

标签: vim

我有一个外部脚本,它接受一个Javascript文件并自动修复一些样式问题,我想在写入之前将其应用到当前缓冲区(BufWritePre,FileWritePre)。

所以我的想法是:

  • w /tmp/foo将当前缓冲区内容写入临时文件
  • silent !fixStyle /tmp/foo在该文件上运行脚本。
  • 使用/tmp/foo
  • 的内容替换当前缓冲区的内容

问题是我不知道如何做第三步。

2 个答案:

答案 0 :(得分:4)

一种方法是删除当前内容(1,$d,即在第1行和最后一行之间删除),并从第0行开始读取目标文件(在第1行之前,以便没有空白行):

:1,$d|0r ~/.hck/input

另一种方法是使用过滤器(在本例中为cat)将所有内容(%)替换为过滤器的输出:

:%!cat /tmp/foo

答案 1 :(得分:0)

您可以使用set autoread。它会检测磁盘上的文件何时更改,并从文件中重新加载当前缓冲区。因此,您可以保存文件,运行脚本,vim将使用更改内容重新加载缓冲区。

Autoread的帮助复制在

下面
                 *'autoread'* *'ar'* *'noautoread'* *'noar'*
'autoread' 'ar'     boolean (default off)
            global or local to buffer |global-local|
            {not in Vi}
    When a file has been detected to have been changed outside of Vim and
    it has not been changed inside of Vim, automatically read it again.
    When the file has been deleted this is not done.  |timestamp|
    If this option has a local value, use this command to switch back to
    using the global value: >
        :set autoread<