Hay una serie de comandos en Emacs que se aplican a las "palabras". Los ejemplos incluyen forward-word, kill-word, upcase-word, mark-word, transpose-words, etc. La definición de "palabra" parece variar un poco entre los comandos. Por ejemplo, forward-wordse detendrá en un guión bajo dentro de una palabra (p foo_bar. Ej. ) Pero mark-wordno se detendrá en el guión bajo.
¿Es posible cambiar la definición de "palabra" cuando estoy en modo programado para que Emacs use los límites de palabras apropiados para la sintaxis del idioma actual?
Cuando estoy adentro c-mode, quiero forward-wordsaltar los guiones bajos, y cuando estoy adentro lisp-mode, quiero forward-wordsaltar tanto los guiones como los guiones bajos, etc.
fuente

C-M-festá obligadoforward-sexpy no se comporta en nada como lo que usted describe. Tienes razón en que lo que quiero es navegar por símbolos, pero no veo esa opción.forward sexpes esencialmenteforward-symbolla mayor parte del tiempo, con la versatilidad añadida de también va sobre tirantes a juego. Deberías darle una oportunidad.forward-sexpes una aproximación cercana aforward-symbol. Para empezar, puede saltar de manera confusa sobre funciones completas, aterrizando cientos de líneas desde donde comenzó. También salta sobre listas de argumentos, etc. E intente esto: dado el siguiente código lisp,(global-set-key [remap list-buffers] 'ibuffer)coloque el cursor en el medio de la palabraremapy ejecúteloforward-sexpvarias veces. Se genera un error cuando se alcanza el cierre]. No, gracias.superword-modepodría ser tu chico.C-M-fyC-M-tactuar sobre símbolos (actúan sobre sexps). Lo editaré para corregir esa impresión. Pero ciertamente puede vincularforward-symbola cualquier clave que desee, si lo encuentra particularmente útil. No existetranspose-symbols, pero puede escribir uno, nuevamente, si cree que es útil.Echa un vistazo a
superword-modeysubword-mode. Superword trata los guiones bajos como parte de una palabra en lugar de un límite, porfoo_barlo que se trataría como una sola palabra .Subword hace lo contrario pero para camelCase, por lo que
fooBarse trata como dos palabras en lugar de una.Parece que el comportamiento que desea es para
cc-modeusarsuperword-mode.Recomendaría leer sobre la fuente
subword-mode, ya que incluso si esos dos modos no están haciendo exactamente lo que desea, deberían mostrarle cómo cambiar el comportamiento de detección de palabras.Discusión más larga sobre emacsredux y ergomacs .
fuente
superword-modejugar sea agradableparedit? Por ejemplo,paredit-forward-kill-wordno elimina la palabra completa (que contiene guiones bajos) cuandosuperword-modeestá habilitada.pareditestá respetando eso, así que creo que está haciendo lo que se le pide.paredit-forward-kill-wordno mata la misma palabra definida porsuperword-mode.paredit-forward-kill-wordy parece que está haciendo su propio análisis. Por lo tanto, podría ser capaz de cambiar eso, pero probablemente no.Si entendí su pregunta, podría modificar la tabla de sintaxis del idioma, por ejemplo, para c ++:
(modify-syntax-entry ?_ "w" c++-mode-syntax-table)M-x aproposluego buscar la tabla de sintaxis también debería ayudarte.fuente