2010-04-28 62 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是你需要的...