2012-05-19 6 views
12

Estoy tratando de hacer que los guiones bajos sean tratados como parte de la palabra para la función forward/backward-word como se describe here y here. Estoy tratando específicamente de hacer que esto funcione para el modo nxhtml, pero realmente me gustaría que funcionara así en todos los modos.Subrayar como parte de la palabra para reenviar palabra no funciona

He modificado mi archivo site-start.el de varias maneras, pero fue en vano. Pero si ejecuto manualmente el comando M-x modify-syntax-table en el búfer, funciona bien. Simplemente no puedo hacer que este sea el comportamiento predeterminado.

Aquí es lo que he intentado poner en mi archivo 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) 

¿Qué me falta?

+1

El docstring de 'modify-sintaxis-entrada' dice" La sintaxis se cambia solo para la tabla SYNTAX-TABLE, que por defecto es la tabla de sintaxis del buffer actual ". No hay nada que sugiera que pueda cambiar globalmente todas las tablas de sintaxis al omitir ese parámetro. – phils

Respuesta

18

¿Has intentado modificar el nxhtml-mode-hook directamente? Como tal:

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

Gracias - esto hizo justo lo que estaba buscando. Y agregué: (add-hook 'php-mode-hook (lambda() (modify-sintaxis-entrada? _ "W"))) –

+0

Me gustaría que alguien aclare: ¿Funciona esto para todos los modos Emacs , o solo para el 'nxhtml-mode'? (Supongo que lo último, pero aclare) – Qqwy

6

Trey's respondió a tu pregunta muy específica.

Pero Emacs ya tiene un nivel de organización de personajes que hace lo que uno pregunta: sexp. Si aprendió comandos sexp en lugar de rompiendo los comandos de palabra, puede eliminarlos por "palabra" o por "símbolo" según corresponda.

+0

Cuando uso nombres de variables con guiones bajos, realmente quiero tratar el guión bajo como parte de la palabra. Los movimientos basados ​​en símbolos son demasiado drásticamente diferentes de lo que estoy acostumbrado. –

+0

Encontré tratar un guión bajo como una palabra separada muy inconveniente.Ni siquiera podía recordar cuando en realidad era necesario moverme a la mitad de una palabra 'foo_bar' * (por cierto, actualmente tengo muchas de esas palabras) *. Pero a la inversa: cada vez que me muevo o trato de hacer algo con un objeto de texto en Emacs's Evil, y tengo una buena palabra, esta cosa solo interfiere en mi edición y me ralentiza. –

4

Como event_jr, le recomiendo que aprenda a utilizar los comandos basados ​​en sexp como C-M-f y C-M-b. Pero si realmente desea saltar sobre identificadores (e ignorar cosas como paréntesis), entonces en lugar de intentar cambiar todas las tablas de sintaxis en todos los modos principales (lo que puede tener consecuencias imprevistas), le recomiendo que simplemente use un nuevo símbolo basado en comandos de movimiento P. ej. (global-set-key [remap forward-word] 'forward-symbol). Para algunos comandos (como kill-word) tendrá que escribir kill-symbol usted mismo, pero debería ser fácil de hacer.

3

En lugar de agregar ganchos para cada modo principal, como sugiere Trey Jackson, puede modificar la tabla de sintaxis estándar. Los diferentes modos heredan de la tabla de sintaxis estándar, por lo que su modificación se espera que se aplican a todos los modos:

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

Esto afectará texto normal, XML, Python y otros.

Algunos modos son más obstinados, y la modificación de la tabla de sintaxis estándar no los afectará ya que anulan algunos símbolos durante la inicialización. Un ejemplo es cc-mode. Aún tendrá que modificar sus tablas de forma explícita.

Cuestiones relacionadas