Подтвердить что ты не робот

Автоматическая перезагрузка ghci & running hlint для обновления файлов

Я думал о своем идеальном рабочем процессе редактирования haskell:

  • Я открываю три терминала (разделяю их с помощью iterm2).
  • Терминал 1 запускает vim для редактирования исходных файлов haskell.
  • Терминал 2 автоматически запускает hlint на измененных файлах, если в текущем каталоге или подкаталоге обновляется или создается файл
  • Терминал 3 запускает ghci, автоматически загружая/перезагружая измененные файлы.

Кто-нибудь настроил что-нибудь подобное? Цель состоит в том, чтобы hlint постоянно наблюдал за моим кодом для проблем с дизайном, а ghci был доступен для быстрых изменений, не делая ничего, кроме сохранения файла в vim.

Я думал использовать что-то вроде watchr для автоматизации.

4b9b3361

Ответ 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