2010-04-28 57 views
3

我正在编写一个简单的小Lua命令行应用程序,它将构建一个静态网站。我将我的片段存储在一个sqlite数据库中。从数据库中检索数据很简单,就像保存数据一样;我的问题来自编辑数据。通过Lua启动Vim

有没有一种优雅的方式将数据从Lua传输到vim? vim能编辑一个内存缓冲区并返回它吗?我打算通过os.execute('vim')启动编辑器,但只能在获取临时文件句柄并将数据库输出转储到该编辑器之后。我想不得不以这种方式触摸文件系统,但那是我的应急计划。

回答

2

我知道实现你想要的唯一方法就是分配一个临时文件并对其进行编辑。我实际上不会担心触及文件系统:如果数据很小,则可以希望操作系统将其保存在内存高速缓存中,并且只在空闲循环期间将这些位写入磁盘。

某些系统提供的文件系统部分保证保存在RAM中,但它非常不灵活。

+0

+1我不担心访问文件系统,除非它成为一个问题,过早优化和所有的爵士乐。 – ponzao 2010-04-30 06:46:12

1

您可以使用标准输入将文本传输到vim(例如echo 'Hello, world!' | vim -),但我不确定如何将编辑的结果提供给标准输出。因此,在Lua解决方案的第一部分是:

local vim = io.popen('vim -', 'w') 
vim:write('Hello, world!') 

也许你可以实现你想要使用memory-mapped file的结果?

1

io.tmpfile; os.getenv(抢EDITOR,不是每个人都喜欢vi(m));和一个io.popen是你需要的...