Автоматическая перезагрузка ghci и запуск подсказок при обновлении файлов - PullRequest
13 голосов
/ 09 октября 2011

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

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

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

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

Ответы [ 4 ]

7 голосов
/ 10 октября 2011

Вы можете запускать произвольные команды оболочки в vim, используя автокоманду BufWrite:

Например, укажите это в вашем ~/.vimrc:

au BufWrite *.hs !echo % >> ~/saves.txt 

Это будет запускаться echo <CURRENT FILENAME> >> ~/saves.txt каждый раз, когда вы сохраняете файл haskell.

Так что это простой способ запуска внешних скриптов.

Теперь вы можете написать несколько iterm скриптов для передачи команд на другие ваши терминалы. Что-то вроде:

tell my_ghci_terminal
  write text ":r\n"
end tell
tell my_hlint_terminal
  write text "<RUN HLINT ON WHATEVER>"
end tell

Таким образом, вы можете использовать автокоманду vim для запуска соответствующего сценария iterm (передавая текущее имя файла, чтобы сценарий мог указать ghci и hlint, какой файл обрабатывать).

Возможно, вы захотите включать и выключать это (вы, возможно, не захотите делать это для КАЖДОГО файла haskell), так что подумайте об обёртывании функциональности в функцию vim, которая позволяет вам ее переключать (а также устанавливать аргументы для как iterm должен найти ваши терминалы ghci и hlint).

2 голосов
/ 28 июля 2013

Не уверен, что вы все еще ищете, но решение вашей проблемы с автоподсказкой - Syntastic , которое автоматически запускает hlint или ghc-mod в вашем файле и выделяет строки / раскладки в списке местоположенийошибка / предупреждения / стиль предупреждений.

Кроме того, когда вы перемещаете курсор на эту строку, он отображает сообщение / комментарий в строке состояния.

1 голос
/ 16 января 2018

https://github.com/ndmitchell/ghcid поддерживает автоматическую перезагрузку GHCi при изменении файла.

Например: ghcid '--command=stack ghci' --test=main

1 голос
/ 09 октября 2011

Вы можете попробовать написать скрипт для вашего редактора, который подключается к ghci и отправляет ":r\n" всякий раз, когда вы нажимаете C-s.Я не знаю, как ты мог это сделать, но я довольно оптимистичен, что есть способ использовать vim.

...