在Vim中读取修改后的缓冲区的内容

时间:2012-11-18 17:00:13

标签: vim buffer

如何在Vim中访问修改后的缓冲区的内容?

例如,如果我想将内容连接到临时文件,例如:

:! cat % > /tmp/modified.txt

但是这给了我最后保存的文件内容(这是正确的吗?)。我确实希望避免之前保存文件,因为此交互意味着允许进行一些分析而不先保存缓冲区。

似乎Vim的Python扩展允许你做类似的事情:

def buffer_contents(buffer=vim.current.buffer):
    contents = buffer[:]

但我找不到任何VimL引用相同的功能。

编辑:似乎我可以做类似的事情:

:let buffer_contents = join(getline(1, '$'), '$')

此时我只是想知道是否有内置方法。

2 个答案:

答案 0 :(得分:2)

如果要将当前内容附加到临时文件,可以使用

:w! >> /tmp/modified.txt

:w! > /tmp/modified.txt

用于覆盖该文件(如在您的cat示例中)。将它传递给某些脚本的stdin

:w !some-script

。想知道你的getline(1, '$')是什么问题?

答案 1 :(得分:1)

虽然您可以使用getline(1, $)检索缓冲区中的所有(修改过的)行,但当您的目标是将它们写入文件时,根据ZyX的答案,:w! > filename仍然是可行的方法。虽然在Vimscript中有一个writefile()函数,你必须自己处理编码,行结尾等等,当内置的:write可以做到这一点时,这太简单了对你而言。