Cuando estoy en medio de una cadena muuuy larga, como la siguiente
(setq Emacs-beta "Which keyboard shortcut to use for navigating out of a string")
¿Puedo omitirlo, justo antes del primero "
(después de Emacs-beta) con un atajo?
key-bindings
string
Dieter.Wilhelm
fuente
fuente
C-r " C-b
.Respuestas:
Emacs 25 o más reciente
Quieres
C-M-u
que ejecute el comandobackward-up-list
.fuente
Emacs-24.5 -Q
una cadena, pero estoy con CMuup-list: Scan error: "Unbalanced parentheses"
:?Es factible así:
En el modo lispy , presionar [lo llevará al comienzo de la lista que contiene, saliendo de cualquier cadena. Una vez que esté al principio de la lista, puede llegar fácilmente a otras partes, por ejemplo, para llegar al final de la
Emacs-beta
imprenta 2m.fuente
Esta es realmente una pregunta de programación muy interesante de Emacs Lisp. Podemos mantener forward-char o backward-char hasta que encontremos que el carácter debajo del cursor no es parte de la cadena.
Puede usar la fuente para decidir si el carácter está dentro de la cadena. Este es un gran truco que aprendí de flyspell. En teoría no es perfecto, pero en el mundo real funciona con casi todos los modos principales de lenguaje de programación en Emacs23, Emacs24, Emacs25 .
Aquí está el código completo:
Uso:
(goto-edge-by-comparing-font-face 1)
ir al borde derecho,(goto-edge-by-comparing-font-face -1)
ir al borde izquierdobackward-up-list
no es muy confiable desde el punto de vista del usuario porque está diseñado como un comando genérico basado enscan-sexps
. Por ejemplo, para el códigoif (true) { return 'hello world'; }
en modo js2, moverá el foco al{
carácter en lugar del primer carácter de comillas simples. Para el códigoprintf("hello world")
en modo c ++, no funcionará. Probé con Emacs 24.5fuente
backward-char
oforward-char
si mueve el cursor fuera del borde.)
. Entonces, dependiendo de los modos, su código tiene comportamientos diferentes.Aquí hay una forma más (que tiendo a usar más) solo por variedad. La solución no es específica para las cadenas, pero también funciona para este caso de uso.
iy-go-to-char
(también disponible en Melpa).iy-go-to-char-backward
yiy-go-to-char
a sus enlaces preferidos. Por el bien de esta explicación, digamos que está obligadoiy-go-to-char-backward
aC-c C-,
yiy-go-to-char
aC-c C-.
.Ahora, si está dentro de la cadena, debería llamar
iy-go-to-char-backward
y escribir"
.Eso se vería así
C-c C-, "
. Si lo haiy-go-to-char-continue-when-repeating
configurado ent
(predeterminado), presionar"
una vez más lo llevará a una"
aparición de caracteres antes de eso, y así sucesivamente.Si está dentro de la cadena y ahora desea ir al final de la cadena, debe llamar
iy-go-to-char
y escribir"
.Eso se vería así
C-c C-. "
. Si loiy-go-to-char-continue-when-repeating
configuró ent
(predeterminado), presionar"
una vez más lo llevará a la siguiente"
aparición de caracteres.fuente