2011-07-28 10 views

Odpowiedz

17

Szanse są, tak naprawdę nie chcesz, aby flyspell-mode włączone dla wszystkich trybów, ale zamiast chcesz flyspell-mode włączone dla trybów, które zajmują się głównie z tekstem (tryb tekstowy, tryb wiadomości, itp.), i flyspell-prog-mode dla trybów programowania (C/C++, Java, Ruby, Lisp itd.). Różnica między tymi dwoma trybami polega na tym, że pierwsza sprawdza wszystkie słowa, podczas gdy flyspell-prog-mode sprawdza tylko słowa w komentarzach i ciągach znaków (unikając w ten sposób sprawdzenia kodu, który generalnie nie jest słowem).

Tak czy inaczej, nie ma jednego miejsca do włączenia Flyspell we wszystkich plikach/buforach, ponieważ zostało napisane, aby zawsze było lokalnym buforem. Dużym przybliżeniem byłaby

(defun turn-on-flyspell() (flyspell-mode 1)) 
(add-hook 'find-file-hooks 'turn-on-flyspell) 

Że nie obejmuje buforów, które nie są związane pliki, a nie radzę go używać, ponieważ nie rozróżnia pomiędzy trybami programowania i trybów programowania non - które uważam za przydatne.

Ponieważ nie ma sposobu, aby wiedzieć, czy niektóre tryby programowania trybów czy nie, trzeba ręcznie dodać dostosowania dla wszystkich trybów programowania Ci zależy, coś jak:

(mapcar (lambda (mode-hook) (add-hook mode-hook 'flyspell-prog-mode)) 
     '(c-mode-common-hook tcl-mode-hook emacs-lisp-mode-hook 
      ruby-mode-hook java-mode-hook)) 

Uwaga: dwa kawałki kodu prawdopodobnie nie grają dobrze razem.

I, dotyczące XML, flyspell już dostosowań dla sgml-mode, html-mode i nxml-mode się nie sprawdzić pisownię tagów (stan Emacs 23,2). Jeśli używasz starszej wersji Emacsa (z powrotem do 21.1), powinieneś móc dodać to do swojego.emacs, aby uzyskać poparcie dla nxml-mode:

(put 'nxml-mode 'flyspell-mode-predicate 'sgml-mode-flyspell-verify) 
+0

Używam trybu nXml. Więc jeśli chcę, na przykład, aby funkcja flyspell była automatycznie włączana dla wszystkich plików z przecenami, czy mogę użyć czegoś takiego? (dodaj hook-mode-hook-mode-flyspell-mode) – mart1n

+0

@ mart1n Dodałem więcej informacji o obsłudze XML, możesz potrzebować ostatniej linii aktualizacji, jeśli używasz starszej wersji Emacsa (21 lub 22). –

+0

W wersji flyspell zawartej z Emacsem 24, włączono poniższy wiersz, aby również wyłączyć sprawdzanie tagów xml w trybie nxml: (wpisz "tryb nxml" tryb predykatu trybu lotu "sgml-mode-flyspell-verify) – zev

3

Można dodać następujące do pliku inicjującego Emacs:

(flyspell-all-tryby)

opisie funkcji stany:

Używaj Flyspell we wszystkich głównych trybach. Obowiązuje zarówno dla istniejących buforów, jak i utworzonych później buforów . Wyłącza "tryb tekstowy-tekst-komendy" , jeśli jest włączony.

EDIT: Najwyraźniej powyższa funkcja jest włączone tylko w wersji flyspell który jest w Emacs 24. Jeśli nie można używać tej wersji, należy użyć zamiast rozwiązanie sugerowane przez Trey do „semi-globalnie” włączyć flyspell. Aby wyłączyć sprawdzanie tag XML z nxml można dodać następującą linię do pliku init Emacs:

(put 'nxml-mode 'flyspell-mode-predicate 'sgml-mode-flyspell-verify) 

Uwaga: Ta linia jest już w flyspell.el zawarte w Emacs 24.

+0

Gdzie to jest zdefiniowane? Nie widzę tego w najnowszym flyspell.el (1.70) http://www-sop.inria.fr/members/Manuel.Serrano/flyspell/flyspell.html ani w przesyłce z Emacs 23.2. –

+0

^Również moje pytanie, nie widzę takich opcji udokumentowanych w dowolnym miejscu. – mart1n

+0

Jest w flyspell.el, który jest zawarty w Emacs 24. – zev

18

Odpowiedź z tym pytaniem pracował dla mnie:

How to enable automatic spell check by default?

Ponadto, wydaje się być bardziej ogólne, w przeciwieństwie do obecnego głosowało odpowiedź. Dodaj następujące linie do swojej .emacs lub init.el.

(add-hook 'text-mode-hook 'flyspell-mode) 
(add-hook 'prog-mode-hook 'flyspell-prog-mode) 
+0

To zadziałało idealnie dla mnie, przetestowane na Text WS, Markdown WS, Tex WS i Python WS. Pracował zgodnie z oczekiwaniami. –

Powiązane problemy