2012-07-05 1 views
3

Я пытаюсь автоматизировать файл .lisp из командной строки, используя vim + slimv для выполнения отступов.Автоиндентификация файла .lisp из командной строки и использование slimv для выполнения отступа

Я попытался сценариев его:

vi -c 'call SlimvConnectSwank()' -c 'normal gg=G' -c 'wq' -c 'q!' temp.lisp 

Но сервер Суонк не запрашивается, чтобы сделать отступы, так что это просто сдвигает файл .lisp VIM по умолчанию (если slimv и сервер не работает) ,

Должен ли я установить какую-то команду задержки/wait -c после вызова для подключения к шикарному серверу? Похоже, что весь процесс vi закрывается слишком быстро, и это не дает шансов соединиться. Если случайное соединение происходит в отдельном потоке, я полагаю, что это может быть так.

Мысли/комментарии/предложения приветствуются.

Спасибо!

Tamas получил его. Это было (и я проверил это, оба на самом деле нужны, действительно :)) команда сна и команда swank, которая заставила его работать.

Я добавил это в моем .bashrc и совмещенным его «ай», так что я могу легко отступ .lisp файл из командной строки:

alias ai="vi \ 
     -c 'call SlimvConnectSwank()' \ 
     -c 'sleep 1' \ 
     -c 'call SlimvEval(['0'])' \ 
     -c 'normal gg=G' \ 
     -c 'wq' \ 
     -c 'q!'" 

Теперь «ай temp.lisp» Темп авто отступы .lisp для slimv + vim + swank и т. д. стандартов.

Всевозможные способы создания сценария для автоматического отступов репо Lisp-файлов, как только у вас есть команда bash, чтобы сделать это для одного файла.

ответ

2

Весь процесс однопоточный, поэтому нет необходимости добавлять задержки, каждая команда должна заканчиваться до следующего выполнения. Вы можете убедиться в том, что отступы Slimv является ответственным по этой команде:

vi -c "call SlimvConnectSwank()" -c "setlocal indentexpr?" temp.lisp

Он должен печатать indentexpr=SlimvIndent(v:lnum).

Я подозреваю, что у вас есть некоторые определения в вашем temp.lisp, которые влияют на отступ. Сначала эти определения должны сообщаться на swank-сервере, иначе swank-сервер не знает, например. аргументы функции и т. д. Помните: весь процесс является динамическим, информация о времени выполнения используется для отступов.

Так что, я думаю, сначала вам нужно просчитать весь буфер и сделать отступ только после этого. Вы можете использовать эту команду:

vi -c "call SlimvConnectSwank()" -c "call SlimvEvalBuffer()" -c "normal gg=G" -c "wq" -c "q!" temp.lisp

+0

Эй Тамас; Весь код, необходимый для правильной отстройки формы, уже загружен на сервер; также ясно, сервер уже запущен; просто выполните соединение с вызовом функции. Я проведу немного больше этого вечера –

+0

А, так что это что-то еще. Затем вы можете исследовать порядок и время выполнения команд swank, добавив 'let g: swank_log = 1' в ваш' .vimrc'. Ищите ': indentation-update', возможно, Slimv получает его слишком поздно, после выполнения фактического отступа. В этом случае вставка любой команды, которая связывается с swank, может быть достаточной для принудительного получения ': indentation-update'. Например. 'vi -c" вызов SlimvConnectSwank() "-c" вызов SlimvEval (['0']) "-c" normal gg = G "-c" wq "-c" q! " temp.lisp', который оценивает «0» после подключения, но до отступов. –

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