J'essaye de faire la fonction Evil evil-jump-to-tag
, C-]se comporter comme la liaison Emacs M-..
Le comportement normal convient pour la navigation dans les fichiers de balises, mais je veux que cela fonctionne également pour Slime slime-edit-definition
, Elisps elisp-slime-nav-find-elisp-thing-at-point
, Clojures cider-jump-to-var
, etc.
Ces modes majeurs et bien d'autres ont lié un équivalent de saut à la définition au raccourci clavier M-..
Pour obtenir le même comportement pour le mode Evil, dois-je lier une liaison de touches localement pour chacun de ces modes, ou est-il possible de prendre une liaison de touches et de dire à Emacs que chaque fois que cette touche est enfoncée, utilisez la fonction liée à cette touche en mode Emacs?
Réponses:
Je le fais fonctionner maintenant, grâce à vos réponses:
Cela définira evil-state sur "Emacs", appellera la fonction liée à M-., Et reviendra à l'état emacs précédent dans l'autre tampon. Je l'ai essayé avec elisp, slime and go et ça marche pour tous.
la source
(define-key evil-normal-state-map (kbd "C-]") (kbd "\\ M-.")
(où "\" est lié àevil-execute-in-emacs-state
).Essayez quelque chose comme
ou, s'il
evil
utilise déjà ce raccourci clavier, vous devrez peut-être faire quelque chose comme.Cela remplacera complètement le comportement de
C-]
, si vous voulez garder le comportement du mal en fonction du mode majeur actuel, la solution de @ Tyler est plus appropriée car vous pouvez avoir une fonction qui décide d'appelerM-.
ou de faire quelque chose d'esle.est-ce que cela aide?
la source
Je ne comprends pas
evil
les keymaps de, mais la fonction suivante fait tout ce qui M-.est lié pour le moment:Le
evil
lier à la table de touches appropriée devrait faire ce que vous voulez. Il peut y avoir un moyen plusevil
spécifique de le faire.evil
se fixe C-]àevil-motion-state-map
, donc les opérations suivantes:la source
M-.
àevil-repeat-pop-next
. Si vous changez votre fonction en ceci: (defun my-tag-jump () (interactive) (evil-emacs-state) (call-interactively (key-binding (kbd "M-.")))) Evil-normal- état))evil-jump-to-tag
est défini et de le lier à ma fonction là-bas.En général, ce n'est pas possible.
La raison en est qu'il peut y avoir plusieurs cartes qui définissent la même liaison, et il n'y a aucun moyen de déterminer automatiquement celle que vous souhaitez. (dans votre exemple,
elisp-slime-nav-mode
c'est un mode si mineur). La seule approche vraiment fiable consiste donc à déterminer exactement quelle définition vous souhaitez.Cela dit ... il y a un piratage possible (n'est-ce pas toujours le cas ...) Une partie de ce qui le rend difficile est que la liaison que vous souhaitez remapper est potentiellement déjà masquée par une mauvaise carte de touches active, donc obtenir la liaison actuelle de
M-.
est inutile.Normalement, je n'utilise pas du tout le mal, donc il pourrait y avoir des ajustements nécessaires (voir les commentaires intégrés)
En outre, une approche plus propre consisterait à rechercher les liaisons une fois (dans un crochet de mode par exemple), au lieu de rechercher dynamiquement chaque fois que la liaison de touches est enfoncée. Mais je ne sais pas quel mauvais crochet utiliser, donc cela reste un exercice;) (et selon l'ordre que vous utilisez pour vos modes mineurs, ou si vous les basculez dynamiquement, cela pourrait être incorrect)
la source
La solution acceptée par @severin fonctionne presque pour moi, mais, lorsque la balise n'est pas trouvée, le tampon ne revient pas en mode normal. Cette alternative fonctionne pour moi dans tous les cas:
la source
Je pense que la façon la plus propre est
(et ajoutez également toutes les autres cartes qui vous intéressent)
xref-find-definitions
est la fonction liée àM-.
emacs, comme vous pouvez le voir à l'aide de la commandeC-h k
.la source
Certaines fonctions de raccourci clavier de style vim.
Voici quelques fonctions que j'ai définies pour permettre la liaison de style vim dans la carte globale et divers états malveillants, ainsi que deux fonctions générales qui prennent soit une carte-clé arbitraire soit une fonction de liaison arbitraire. J'ai mis ces fonctions dans un sens .
En général, il est préférable de n'utiliser ces fonctions que pour les liaisons de style clavier-macro (comme le cas d'utilisation de la question) et d'utiliser le raccourci clavier de type emacs pour tout le reste.
Remarques
bind-key
macro duuse-package
package est une fonction de liaison de touches excellente et polyvalente.Reliure C-]à M-..
Notez qu'en état normal, vous voudrez vous lier à \M-.pour accéder à la liaison emacs, car l'état normal se lie M-.à
'evil-repeat-pop-next
. Ainsi, une liaison à l'état normal peut être définie avec:ou (reliant n'importe quelle
evil-jump-to-tag
clé à l'état normal:la source