2010-04-28 2 views
3

Я пишу просто небольшое приложение командной строки Lua, которое построит статический веб-сайт. Я храню свои фрагменты в базе данных sqlite. Получение данных из db является простым, так как оно сохраняется; мой вопрос исходит от редактирования данных.Запуск Vim через Lua

Есть ли элегантный способ передачи данных от Lua до vim? Может ли vim редактировать буфер памяти и возвращать его? Я планировал запустить редактор через os.execute ('vim'), но только после захвата временного дескриптора файла и выгрузки базы данных. Я бы хотел, чтобы это не касалось файловой системы, но это мой план на случай непредвиденных обстоятельств.

ответ

2

Единственный способ, которым я знаю, добиться того, что вы хотите, это выделить временный файл и отредактировать его. На самом деле я бы не стал беспокоиться о касании файловой системы: если ваши данные малы, вы можете надеяться, что операционная система сохранит их в кеше памяти и напишет биты на диск только во время остальных циклов бездействия.

Некоторые системы предлагают части файловой системы, которые гарантированно хранятся в ОЗУ, но это очень неспособен.

+0

+1 Я бы не стал беспокоиться о доступе к файловой системе, если это не станет проблемой, преждевременной оптимизацией и всем этим джазом. – ponzao

1

Вы можете передать текст в vim с помощью stdin (например, 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 - это то, что вам нужно ...

Смежные вопросы