Автоиндентировать файл.lisp из командной строки и использовать slimv, чтобы сделать отступ

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

Я попытался написать это:

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

Но сервер swank не запрашивает выполнение отступа, так что это просто делает отступ для файла.lisp vim по умолчанию (если SlimV и сервер не были запущены).

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

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

Спасибо!

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

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

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

Теперь 'ai temp.lisp' автоматически устанавливает отступ temp.lisp для стандартов slimv + vim + swank и т. Д.

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

1 ответ

Решение

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

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

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

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

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

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

Другие вопросы по тегам