Автоматическая перезагрузка ghci & running hlint для обновления файлов
Я думал о своем идеальном рабочем процессе редактирования haskell:
- Я открываю три терминала (разделяю их с помощью iterm2).
- Терминал 1 запускает vim для редактирования исходных файлов haskell.
- Терминал 2 автоматически запускает hlint на измененных файлах, если в текущем каталоге или подкаталоге обновляется или создается файл
- Терминал 3 запускает ghci, автоматически загружая/перезагружая измененные файлы.
Кто-нибудь настроил что-нибудь подобное? Цель состоит в том, чтобы hlint постоянно наблюдал за моим кодом для проблем с дизайном, а ghci был доступен для быстрых изменений, не делая ничего, кроме сохранения файла в vim.
Я думал использовать что-то вроде watchr для автоматизации.
Ответы
Ответ 1
Вы можете запускать произвольные команды оболочки в vim с помощью autocommand BufWrite
:
Например, поместите это в свой ~/.vimrc
:
au BufWrite *.hs !echo % >> ~/saves.txt
Это будет выполняться echo <CURRENT FILENAME> >> ~/saves.txt
при каждом сохранении файла haskell.
Таким образом, это простой способ запуска внешних скриптов.
Теперь вы можете написать iterm scripts для передачи команд другим терминалам. Что-то вроде:
tell my_ghci_terminal
write text ":r\n"
end tell
tell my_hlint_terminal
write text "<RUN HLINT ON WHATEVER>"
end tell
Итак, вы можете использовать autocommand vim для запуска соответствующего iterm script (передавая текущее имя файла, чтобы script мог указать ghci и hlint, какой файл обрабатывать).
Вы, вероятно, захотите включить и выключить это (вы можете не делать этого для КАЖДОГО файла haskell), поэтому подумайте об обертывании функциональности в функции vim, которая позволяет вам переключать ее (а также задавать аргументы для как iterm должен найти ваши терминалы ghci и hlint).
Ответ 2
Не уверен, что вы все еще ищете, но решение вашей проблемы с авто-hlint Syntastic, которое автоматически запускает hlint или ghc-mod в вашем файле и выделяет строки/помещает в локации список предупреждений об ошибках/предупреждениях/стилях.
Кроме того, когда вы перемещаете курсор на эту строку, он отображает сообщение/комментарий в строке состояния.
Ответ 3
Вы можете попытаться написать script для своего редактора, который подключается к ghci
и присылает ":r\n"
всякий раз, когда вы нажимаете C-s
. Я не знаю, как вы могли это сделать, но я очень оптимистично, что есть способ использовать vim.
Ответ 4
https://github.com/ndmitchell/ghcid поддерживает автоматическую перезагрузку GHCi при изменении файла.
Например: ghcid '--command=stack ghci' --test=main