2011-10-09 10 views
13

Myślałam o moim idealnym edycji Haskell workflow:Automatycznie przeładunku ghci & systemem hlint o aktualizacjach plików

  • otworzyć trzy terminale (Split użyciu iterm2).
  • Terminal 1 uruchamia vima do edycji plików źródłowych haskell.
  • Terminal 2 automatycznie uruchamia hlint na zmienionych plikach, gdy plik w bieżącym katalogu lub aktualizacjach podkatalogów zostanie utworzony lub zostanie utworzony
  • Terminal 3 uruchamia ghci, automatycznie ładując/ponownie ładując zmienione pliki.

Czy ktoś skonfigurował coś takiego? Celem jest, aby hlint stale obserwował mój kod dla problemów z stylizacją, a dla ghci był dostępny dla szybkich zmian, bez konieczności robienia niczego poza zapisaniem pliku w vimie.

Myślałem o zastosowaniu do automatyzacji czegoś w rodzaju watchr.

+1

Dla automatycznie uruchomiony 'hlint' zobacz moją odpowiedź [tutaj] (http: // stackoverflow.com/questions/6323150/sbt-like-features-in-the-haskell-build-ecosystem/6324784 # 6324784). GHCi jest nieco trudniejsze, ponieważ jest interaktywne. – hammar

+3

IMO naprawdę nie chcesz, aby ghci automatycznie przeładowywał zmiany, ponieważ wszystkie powiązania zostały utracone. Ponieważ mam zwyczaj od czasu do czasu uderzać 'C-s' podczas pisania, zawsze byłbym zły na siebie, ponieważ muszę przeładować te tymczasowe wiązania. Mogę również umieścić je w pliku, ale jestem zbyt leniwy, aby to zrobić. Przeładowanie pliku jest tak proste, jak naciśnięcie [:], [r], [enter] w tej sekwencji, więc o co chodzi? – fuz

+1

Czy nie dlatego wynaleziono emacs? :-) – pat

Odpowiedz

7

można uruchomić dowolnych poleceń powłoki w vim pomocą BufWrite autokomendę:

Na przykład, umieścić to w swoim ~/.vimrc:

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

ten będzie działał echo <CURRENT FILENAME> >> ~/saves.txt przy każdym zapisywaniu pliku Haskell.

Jest to łatwy sposób wyzwolenia skryptów zewnętrznych.

Teraz możesz napisać jakiś iterm scripts, aby przekazywać polecenia do innych terminali. Coś jak:

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

Więc można użyć autokomendę vim wywołać odpowiedni skrypt iTerm (przekazując obecną nazwę pliku więc skrypt może powiedzieć ghci i hlint który na przetwarzanie pliku).

Prawdopodobnie będziesz chciał włączyć i wyłączyć tę opcję (możesz nie chcieć tego zrobić dla KAŻDEGO pliku haskell), pomyśl więc o zawijaniu funkcjonalności w funkcji vim, która pozwala ci ją przełączyć (jak również ustawić argumenty jak to powinno znaleźć twoje terminale ghci i hlint).

1

Możesz spróbować napisać skrypt do swojego edytora, który łączy się z ghci i wysyła ":r\n" po każdym trafieniu C-s. Nie wiem, jak mogłeś to zrobić, ale jestem całkiem optymistą, że jest sposób na użycie vima.

2

Nie jesteś pewien, czy wciąż szukasz, ale rozwiązaniem problemu z automatycznym hlintem jest Syntastic, który automatycznie uruchamia plik hlint lub ghc-mod w pliku i podświetla linie/umieszcza w lokalizacji listę błędów/ostrzeżeń/ostrzeżenia w stylu.

Dodatkowo, po przesunięciu kursora na tę linię, wyświetla się komunikat/komentarz na pasku stanu.

Powiązane problemy