Estoy tratando de hacer que la función del Mal evil-jump-to-tag
, C-]se comportan como los Emacs vinculante M-..
El comportamiento normal está bien para explorar archivos de etiquetas, pero quiero que funcione también para Slime's slime-edit-definition
, Elisps ' elisp-slime-nav-find-elisp-thing-at-point
, Clojures cider-jump-to-var
, etc.
Estos modos principales y muchos más han vinculado algún equivalente de salto a definición a la combinación de teclas M-..
Para obtener el mismo comportamiento para el modo Evil, ¿necesito vincular una combinación de teclas localmente para cada uno de estos modos, o es posible tomar una combinación de teclas y decirle a Emacs que cada vez que se presiona esta tecla, use la función asociada a esa tecla? en modo Emacs?
Respuestas:
Lo tengo funcionando ahora, gracias a tus respuestas:
Esto establecerá el estado maligno en "Emacs", llamará a la función vinculada a M- y volverá al estado anterior de emacs en el otro búfer. Lo probé con elisp, slime and go y funciona para todos ellos.
fuente
(define-key evil-normal-state-map (kbd "C-]") (kbd "\\ M-.")
(donde "\" está obligado aevil-execute-in-emacs-state
).Intenta algo como
o, si
evil
ya usa esta combinación de teclas, es posible que deba hacer algo como esto.Esto anulará por completo el comportamiento de
C-]
, si desea mantener el comportamiento del mal dependiendo del modo principal actual, la solución de @ Tyler es más apropiada porque puede tener una función que decida si llamaM-.
o hace algo mal.¿Esto ayuda?
fuente
No entiendo
evil
los mapas de teclas, pero la siguiente función hace todo lo que M-.está obligado en este momento:Vincular esto al
evil
mapa de teclas apropiado debería hacer lo que desea. Puede haber una forma másevil
específica de hacer esto.evil
Se liga C-]enevil-motion-state-map
, a fin de tratar lo siguiente:fuente
M-.
aevil-repeat-pop-next
. Si cambia su función a esto: (defun my-tag-jump () (interactivo) (evil-emacs-state) (call-interactively (key-binding (kbd "M-."))) (Evil-normal- estado))evil-jump-to-tag
está definido y volver a vincularlo a mi función allí.En general, no es posible.
La razón es que puede haber varios mapas que definen el mismo enlace, y no hay forma de averiguar automáticamente cuál desea. (en su ejemplo,
elisp-slime-nav-mode
es un modo menor). Entonces, el único enfoque realmente confiable es que usted descubra exactamente qué definición desea.Dicho esto ... hay un posible hack (no siempre existe ...) Parte de lo que lo hace difícil es que el enlace que desea reasignar ya está potencialmente enmascarado por un mapa de teclas activo malvado, por lo que obtener el enlace actual de
M-.
es inútilNormalmente no uso el mal en absoluto, por lo que podría ser necesario hacer ajustes (ver comentarios incrustados)
Además, un enfoque más limpio sería buscar los enlaces una vez (en un enlace de modo, por ejemplo), en lugar de buscar dinámicamente cada vez que se presiona el teclado. Pero no estoy seguro de qué gancho malvado usar, así que esto se deja como ejercicio;) (y dependiendo del orden que use para sus modos menores, o si los alterna dinámicamente, puede ser incorrecto)
fuente
La solución aceptada por @severin casi funciona para mí, pero, cuando no se encuentra la etiqueta, el búfer no vuelve al modo normal. Esta alternativa me funciona en todos los casos:
fuente
Creo que la forma más limpia es
(y también agregue cualquier otro mapa que le interese)
xref-find-definitions
es la función enlazadaM-.
en emacs, como puede ver usando el comandoC-h k
.fuente
Algunas funciones de combinación de teclas de estilo vim.
Aquí hay algunas funciones que he definido para permitir el enlace de estilo vim en el mapa global y varios estados malvados, así como dos funciones generales que toman un mapa de teclas arbitrario o una función de enlace arbitrario. He puesto estas funciones en una esencia .
En general, es mejor usar estas funciones solo para enlaces de estilo macro de teclado (como el caso de uso en la pregunta), y usar la combinación de teclas de estilo emacs para todo lo demás.
notas
bind-key
macro deluse-package
paquete es una excelente y versátil función de enlace de teclas.Enlace C-]a M-..
Tenga en cuenta que en estado normal, querrá vincularse \M-.para acceder al enlace emacs, ya que el estado normal se une M-.a
'evil-repeat-pop-next
. Por lo tanto, un enlace de estado normal se puede definir con:o (volver a vincular cualquier
evil-jump-to-tag
clave en estado normal:fuente