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-word
se detendrá en un guión bajo dentro de una palabra (p foo_bar
. Ej. ) Pero mark-word
no 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-word
saltar los guiones bajos, y cuando estoy adentro lisp-mode
, quiero forward-word
saltar tanto los guiones como los guiones bajos, etc.
fuente
C-M-f
está obligadoforward-sexp
y 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 sexp
es esencialmenteforward-symbol
la mayor parte del tiempo, con la versatilidad añadida de también va sobre tirantes a juego. Deberías darle una oportunidad.forward-sexp
es 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 palabraremap
y ejecúteloforward-sexp
varias veces. Se genera un error cuando se alcanza el cierre]
. No, gracias.superword-mode
podría ser tu chico.C-M-f
yC-M-t
actuar sobre símbolos (actúan sobre sexps). Lo editaré para corregir esa impresión. Pero ciertamente puede vincularforward-symbol
a 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-mode
ysubword-mode
. Superword trata los guiones bajos como parte de una palabra en lugar de un límite, porfoo_bar
lo que se trataría como una sola palabra .Subword hace lo contrario pero para camelCase, por lo que
fooBar
se trata como dos palabras en lugar de una.Parece que el comportamiento que desea es para
cc-mode
usarsuperword-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-mode
jugar sea agradableparedit
? Por ejemplo,paredit-forward-kill-word
no elimina la palabra completa (que contiene guiones bajos) cuandosuperword-mode
está habilitada.paredit
está respetando eso, así que creo que está haciendo lo que se le pide.paredit-forward-kill-word
no mata la misma palabra definida porsuperword-mode
.paredit-forward-kill-word
y 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 apropos
luego buscar la tabla de sintaxis también debería ayudarte.fuente