2010-08-06 17 views
20

Zainstalowałem haskel-mode w emacs. Potem piszę w moim .emacs:Autouzupełnianie Haskell w Emacs przy użyciu trybu haskell

(load "~/.emacs.d/haskell-mode/haskell-site-file") 
(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode) 
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation) 
(add-hook 'haskell-mode-hook 'haskell-font-lock-symbols t) 
(put 'downcase-region 'disabled nil) 

Co muszę dodać w moim pliku conf że Emacs mógłby autouzupełniania dla Haskell? Lub tryb Haskell nie ma takiej możliwości?

Odpowiedz

18

Gdy nie ma obsługi konkretnego języka, można użyć znaczników . Jest to ogólny mechanizm zakończenia.

  1. wygenerować plik TAGS, który zawiera listę identyfikatorów i gdzie są one zdefiniowane. Emacs jest dostarczany z programem etags, który robi to w wielu językach, ale nie Haskell; ghc pochodzi z hasktags.

  2. Załaduj plik TAGS za pomocą .

Tagi nie są zależne od kontekstu, więc będą bezkrytycznie sugerować rodzaju, wartości, konstruktorów itp wszędzie. Nie będą również udostępniać zaawansowanych funkcji, takich jak łatwe pokazywanie typu wartości. Najważniejsze polecenia Tagi są:

  • M-TAB (complete-symbol) uzupełnia identyfikator zgodnie z załadowanym listy tagów.

  • M-. (find-tag) przechodzi do miejsca, w którym zdefiniowano identyfikator w punkcie, w razie potrzeby otwierając plik zawierający.

  • M-* (pop-tag-mark) wraca tam, gdzie byłeś przed M-..

  • M-x tags-apropos wyświetla listę identyfikatorów pasujących do wyrażenia regularnego.

Aby uzyskać więcej informacji, zapoznaj się z częścią "Tagi" w podręczniku Emacs.


Dla jeszcze cruder, ale w pełni automatyczny mechanizm istnieje dynamiczny skrót cecha. C-M-/ (dabbrev-completion) wygląda w najbardziej otwartych buforach zakończenia; jest to całkowicie niezależne od języka, więc znajdzie nawet słowa w napisach, komentarzach, cokolwiek. M-/ (dabbrev-expand) jest podobna, ale bezpośrednio kończy się do najbliższego meczu przed punktem.

8

haskell-mode obecnie nie zapewnia takiej możliwości. Jest trochę pracy nad implementacją parsera haskell dla CEDET - w tym przypadku użytkownicy automatycznie otrzymają funkcje autouzupełniania. Ale ta praca zaczęła się nie tak dawno temu ...

+0

Czy wiesz, jak postępy prac nad CEDET dla Haskella? –

10

ghc-mod zapewnia pewne uzupełnienie dla Haskella w Emacs, a także sprawdzenie za pomocą hlint i ghc. W połączeniu z M- /, jest to wystarczająco dobre dla mnie.

+0

Downvoter: Chcesz wyjaśnić? – danlei

7

Moje setup jest nieco bardziej skomplikowane.Używa infrastruktury auto-complete, którą pokazuje listę rozwijalną kandydatów, która jest automatycznie podobna do tradycyjnych IDE. Pobrałem this script, który kodyfikuje wszystkie słowa kluczowe. Oprócz tego używam ghc-mod do generowania nazw modułów.

5

Jako "tanie i wesołe" narzędzie do autouzupełniania, nie należy przeoczyć M-/. Jest całkowicie heurystyczny i niezależny od języka, ale zaskakująco skuteczny.

2

Oprócz autouzupełniania dla własnego kodu, można również uzyskać autouzupełnianie (z apidocs nawet) dla biblioteki standardowej, nazwy importu i nazwy pragma przy użyciu company-ghc. Zauważyłem, że this guide jest bardzo pomocny. Zauważ, że nie udało mi się jeszcze w pełni go dla siebie, ale czuję, że jestem blisko :-)