2012-05-19 12 views
12

Ich versuche, Unterstriche als Teil des Wortes für die forward/backward-word Funktion wie beschrieben here und here behandelt werden. Ich versuche speziell, dies für nxhtml Modus zu arbeiten, aber würde es wirklich gerne so für alle Modi arbeiten.Underscore als Teil des Wortes für Forward-Word funktioniert nicht

Ich habe meine site-start.el Datei eine Reihe von verschiedenen Möglichkeiten, aber ohne Erfolg geändert. Aber wenn ich manuell den Befehl M-x modify-syntax-table im Puffer ausführen, funktioniert es gut. Ich kann das nicht als Standardverhalten verstehen.

Hier ist, was ich versuchte, in meiner site-start.el Datei setzen:

;; 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) 

Was bin ich?

+1

Der Docstring von 'modify-syntax-entry' sagt" Die Syntax wird nur für die Tabelle SYNTAX-TABLE geändert, die standardmäßig die Syntaxtabelle des aktuellen Puffers verwendet ". Es gibt keinen Hinweis darauf, dass Sie alle Syntaxtabellen global ändern könnten, indem Sie diesen Parameter weglassen. – phils

Antwort

18

Haben Sie versucht, die nxhtml-mode-hook direkt zu ändern? Wie so:

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

Danke - das hat genau das gemacht, wonach ich gesucht habe. Und ich habe hinzugefügt: (add-hook 'php-mode-hook (Lambda() (ändern-Syntax-Eintrag? _ "W"))) –

+0

Ich möchte für jemanden zu klären: Funktioniert dies für alle Emacs-Modi oder nur für den 'nxhtml-Modus'? (Ich rate Letzteres, aber bitte klären) – Qqwy

6

Treys hat Ihre sehr spezifische Frage beantwortet.

Aber Emacs hat bereits eine Ebene der Charakterorganisation, die tut, was Sie fragen: sexp. Wenn Sie statt statt Wortbefehle sexp -Befehle gelernt haben, dann können Sie durch "Wort" oder durch "Symbol" löschen, wie die Situation passt.

+0

Wenn ich Variablennamen mit Unterstrichen verwende, möchte ich den Unterstrich wirklich als Teil des Wortes behandeln. Die symbolbasierten Bewegungen unterscheiden sich einfach zu sehr von dem, was ich gewohnt bin. –

+0

Ich behandelte einen Unterstrich als ein separates Wort sehr unbequem.Ich konnte mich nicht einmal daran erinnern, wann ich eigentlich gebraucht wurde, um auf ein halbes Wort 'foo_bar' * zu kommen (übrigens habe ich zur Zeit wirklich so viele Wörter) *. Aber im Gegenteil: Jedes Mal, wenn ich mich bewege oder versuche, etwas mit einem Textobjekt in Emacs 'Evil zu tun, und ich habe so ein Wort herum - dieses Ding stört mich einfach in meiner Bearbeitung und verlangsamt mich. –

4

Als event_jr empfehle ich, dass Sie lernen, die sexp-basierten Befehle wie C-M-f und C-M-b zu verwenden. Aber wenn Sie wirklich nur über Identifikatoren springen wollen (und Dinge wie Klammern ignorieren), dann sollten Sie nicht alle Syntaxtabellen in allen Hauptmodi ändern (was zu unvorhergesehenen Konsequenzen führen kann). Daher empfehle ich Ihnen, einfach neue zeichenbasierte zu verwenden Bewegungsbefehle. Zum Beispiel (global-set-key [remap forward-word] 'forward-symbol). Für einige Befehle (wie kill-word) müssen Sie kill-symbol selbst schreiben, aber es sollte einfach sein.

3

Anstatt Hoys für jeden Hauptmodus hinzuzufügen, wie von Trey Jackson vorgeschlagen, können Sie die Standardsyntaxtabelle ändern. Die verschiedenen Modi von der Standard-Syntax-Tabelle erben, damit Ihre Änderung hoffentlich für alle Modi gilt:

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

Dies wirkt normalen Text, XML, Python und andere.

Einige Modi sind sturer, und die Änderung der Standardsyntaxtabelle wirkt sich nicht auf sie aus, da sie einige Symbole während der Initialisierung überschreiben. Ein Beispiel ist cc-mode. Sie müssen ihre Tabellen immer noch explizit ändern.

Verwandte Themen