2010-08-23 69 views
2

我刚开始围绕vim + python脚本(没有使用本地vim脚本的经验)打包头。在Vim-embedded python脚本中打开一个新窗口

如何打开一个新窗口来包含来自后台进程的stdout?

目前,阅读一些经过:帮助蟒蛇,我看到的唯一的选择是一样的东西:

cmd = ":bel new" 
vim.command(cmd) 
+0

确定你的意思是窗口?一个窗口只是一个到缓冲区的视口。例如,你是否想将当前窗口分成两部分,并将某些命令的stdout加载到此窗口中的新缓冲区中? – Sarah 2010-11-03 10:43:44

+0

@Sarah:我也注意到了,但不知道如何更好地表达它。你说的后者是有道理的。 – 2010-11-03 11:01:18

+0

在这种情况下,不需要使用脚本。所有你需要做的是:新的+读\!升...记得要逃避所有的空间。 :新的窗口分裂,创建一个空的缓冲区并运行读取。用有用的东西替换ls。 – Sarah 2010-11-03 11:10:49

回答

3

由于vim.command可以执行大部分(如果不是全部?)ex命令,你可以简单地从内调用:new +read!ls它。

:new拆分当前窗口并将新的(空的,无名称)缓冲区放入上部窗口。它需要一个参数,我们用这个参数来执行read!cmd,这个参数读取缓冲区中爆炸后的cmd的stdout。要知道,你需要逃避你的命令空间与\

总而言之,你得到vim.command("new +read!cmd")

:python vim.command("new +read!ls") 

在当前目录的内容读入一个新的缓冲区中的cichew,水平分割窗口。

如果你要处理的特殊字符转义,可以考虑使用python的re.escape():

:py import re;vim.command("new +read!"+re.escape("ls Dire*")) 

这应该足以满足大多数情况下。如果有疑问,请检查其文档并将其与您的shell进行比较。

+0

不处理转义,但确实回答了大部分问题。这个问题看起来不太可能得到更多的关注,所以我奖励了奖金。 – 2010-11-05 14:08:35