2012-05-19 12 views
12

Próbuję utworzyć znaki podkreślenia traktowane jako część słowa dla funkcji forward/backward-word zgodnie z opisem here i here. Dokładam starań, aby to działało w trybie nxhtml, ale naprawdę chciałbym, aby działało tak w przypadku wszystkich trybów.Podkreślenie jako część wyrazu dla nieprzeczytanego wyrazu

Zmodyfikowałem mój plik site-start.el na wiele różnych sposobów, ale bez skutku. Ale jeśli ręcznie wykonam polecenie M-x modify-syntax-table w buforze, działa dobrze. Po prostu nie mogę uznać tego za domyślne zachowanie.

Oto, co starałem oddanie w moim pliku site-start.el:

;; 1 
;; thought this would apply it to all modes - no error, but did not work 
(modify-syntax-entry ?_ "w") 

;; 2 
;; thought this would automatically set it on a mode change - no error, but did not work 
(defun change-major-mode-hook() 
(modify-syntax-entry ?_ "w")) 


;; 3 
;; thought this would apply it to all modes - no error, but did not work 
(modify-syntax-entry ?_ "w") 

;; 4 
;; this produced a symbol's value as variable is void error 
(modify-syntax-entry ?_ "w" nxhtml-mode-syntax-table) 

Czego mi brakuje?

+1

Docstring 'modify-syntax-entry' mówi" Składnia jest zmieniana tylko dla tabeli SYNTAX-TABLE, która domyślnie przyjmuje tabelę składni bieżącego bufora ". Nic nie wskazuje na to, że możesz globalnie zmienić wszystkie tabele składni, pomijając ten parametr. – phils

Odpowiedz

18

Czy próbowałeś bezpośrednio modyfikować nxhtml-mode-hook? Tak jak poniżej:

(add-hook 'nxhtml-mode-hook 
      (lambda() (modify-syntax-entry ?_ "w"))) 
+0

Dzięki - to właśnie to, czego szukałem. I dodałem: (add-hook 'php-mode-hook (lambda() (modyfikacja-wpis-składni? _ "W"))) –

+0

Chciałbym, aby ktoś wyjaśnił: Czy to działa dla wszystkich trybów Emacs , czy tylko dla 'nxhtml-mode'? (Zgaduję, że to drugie, ale proszę wyjaśnij) – Qqwy

6

Trey odpowiedział na twoje bardzo konkretne pytanie.

Ale Emacs już ma poziom organizacji postaci, który robi to, o co prosisz: sexp. Jeśli nauczyłeś się poleceń sekwensalnych zamiast poleceń łamanie słów, możesz usunąć "słowo" lub "symbol", jak sytuacja się zgadza.

+0

Używając nazw zmiennych z podkreśleniami, naprawdę chcę traktować podkreślenie jako część słowa. Ruchy oparte na symbolach są po prostu zbyt drastycznie różne od tego, do czego jestem przyzwyczajony. –

+0

Znalazłem traktując podkreślenie jako osobne słowo bardzo niewygodne.Nie mogłem nawet pamiętać, kiedy naprawdę potrzebowałem przenieść się do połowy słowa 'foo_bar' * (przy okazji, obecnie mam naprawdę wiele takich słów) *. Ale na odwrót: za każdym razem, kiedy się ruszam, lub próbuję coś zrobić z obiektem tekstowym w Zły Emacsa, a mam takie słowo dookoła - to po prostu przeszkadza mi w edycji i spowalnia mnie. –

4

Jako event_jr, polecam nauczyć się korzystać z poleceń opartych na seksu, takich jak C-M-f i C-M-b. Ale jeśli naprawdę chcesz przeskoczyć tylko identyfikatory (i zignorować takie rzeczy jak nawiasy), zamiast próbować zmieniać tabele składni we wszystkich głównych trybach (co może zakończyć się nieprzewidzianymi konsekwencjami), polecam po prostu użyć nowych symboli opartych na symbolach. polecenia ruchu. E.g. (global-set-key [remap forward-word] 'forward-symbol). W przypadku niektórych poleceń (takich jak kill-word) musisz napisać osobiście kill-symbol, ale powinno być to łatwe.

3

Zamiast dodawać zaczepy dla każdego trybu głównego, jak sugeruje Trey Jackson, można zmodyfikować standardową tabelę składni. Różne tryby dziedziczy ze standardowej tabeli składni więc mieć nadzieję, że modyfikacja dotyczy wszystkich trybów:

(modify-syntax-entry ?_ "w" (standard-syntax-table)) 

wpłynie to zwykły tekst, XML, Python i inne.

Niektóre tryby są bardziej uparte, a modyfikowanie standardowej tabeli składni nie ma na nie wpływu, ponieważ zastępują niektóre symbole podczas inicjalizacji. Jednym z przykładów jest cc-mode. Nadal będziesz musiał jawnie modyfikować tabele.

Powiązane problemy