Staram się, aby funkcję Zło evil-jump-to-tag
, C-]zachowują się jak powiązanie Emacs M-..
Normalne zachowanie jest odpowiednie do przeglądania plików slime-edit-definition
Tagów , ale chcę, aby działało również w przypadku Slime , Elisps elisp-slime-nav-find-elisp-thing-at-point
, Clojures cider-jump-to-var
itp.
Te główne tryby i wiele innych wiązały jakiś odpowiednik przeskakiwania do definicji z klawiszami M-..
Aby uzyskać takie samo zachowanie w trybie Zła, czy muszę powiązać przyporządkowanie klawiszy lokalnie dla każdego z tych trybów, czy też możliwe jest przypisanie skrótu klawiaturowego i poinformowanie Emacsa, że za każdym razem, gdy ten klawisz zostanie naciśnięty, użyj funkcji powiązanej z tym klawiszem w trybie Emacsa?
Odpowiedzi:
Działa teraz dzięki twoim odpowiedziom:
Spowoduje to ustawienie stanu zła na „Emacs”, wywołanie funkcji powiązanej z M- i powrót do poprzedniego stanu emacs w drugim buforze. Próbowałem z elisp, śluzem i idź i działa na nich wszystkich.
źródło
(define-key evil-normal-state-map (kbd "C-]") (kbd "\\ M-.")
(gdzie „\” jest związaneevil-execute-in-emacs-state
).Spróbuj czegoś takiego
lub, jeśli
evil
już używasz tego skrótu klawiszowego, być może będziesz musiał zrobić coś takiego.To całkowicie zastąpi zachowanie
C-]
, jeśli chcesz zachować zachowanie zła w zależności od bieżącego trybu głównego, rozwiązanie @ Tylera jest bardziej odpowiednie, ponieważ możesz mieć funkcję, która decyduje, czy zadzwonić,M-.
czy zrobić coś esle.czy to pomaga?
źródło
Nie rozumiem
evil
map klawiszy, ale następująca funkcja robi wszystko, co M-.jest obecnie wymagane:Powiązanie tego z odpowiednią
evil
mapą klawiszy powinno robić, co chcesz. Może to być bardziejevil
specyficzny sposób.evil
wiąże się C-]wevil-motion-state-map
, więc spróbuj:źródło
M-.
naevil-repeat-pop-next
. Jeśli zmienisz swoją funkcję na: (defun my-tag-jump () (Interactive) (evil-emacs-state) (call-Interactive (bindowanie klawiszy (kbd „M-.”))) (Evil-normal- state))evil-jump-to-tag
jest zdefiniowana, i ponowne powiązanie jej z moją funkcją.Zasadniczo nie jest to możliwe.
Powodem jest to, że może istnieć kilka map, które definiują to samo wiązanie, i nie ma sposobu, aby automatycznie ustalić, który z nich chcesz. (w twoim przykładzie
elisp-slime-nav-mode
jest to taki niewielki tryb). Tak więc jedyne naprawdę niezawodne podejście polega na tym, aby dokładnie ustalić, jakiej definicji chcesz.To powiedziawszy ... istnieje możliwość włamania (nie zawsze tam jest ...) Częścią tego, co sprawia, że jest to trudne, jest to, że wiązanie, które chcesz odwzorować, jest potencjalnie już maskowane przez złą aktywną mapę klawiszy, więc uzyskanie bieżącego wiązania
M-.
jest bezużyteczny.Zwykle w ogóle nie używam zła, więc mogą być potrzebne poprawki (patrz osadzone komentarze)
Bardziej czystym podejściem byłoby też sprawdzenie powiązań jeden raz (na przykład w trybie haka), zamiast dynamicznego wyszukiwania za każdym razem, gdy naciśnie się klawisz. Ale nie jestem pewien, jakiego złego haka użyć, więc pozostało to jako ćwiczenie;) (i w zależności od kolejności, w której używasz swoich mniejszych trybów lub jeśli przełączasz je dynamicznie, może to być niepoprawne)
źródło
Akceptowane przez @severin rozwiązanie prawie działa dla mnie, ale gdy tag nie zostanie znaleziony, bufor nie wraca do normalnego trybu. Ta alternatywa działa dla mnie we wszystkich przypadkach:
źródło
Myślę, że to najczystszy sposób
(a także dodaj każdą inną mapę, którą jesteś zainteresowany)
xref-find-definitions
jest funkcją powiązaną zM-.
emacsem, jak widać za pomocą poleceniaC-h k
.źródło
Niektóre funkcje klawiszy w stylu Vima.
Oto niektóre funkcje, które zdefiniowałem, aby umożliwić wiązanie w stylu vima na mapie globalnej i różnych stanach zła, a także dwie ogólne funkcje, które przyjmują dowolną mapę klucza lub dowolną funkcję wiązania. Umieściłem te funkcje w skrócie .
Zasadniczo lepiej jest używać tych funkcji tylko w przypadku powiązań w stylu makr klawiaturowych (takich jak przypadek użycia w pytaniu) i używania skrótów klawiszowych w stylu emacsa do wszystkiego innego.
notatki
bind-key
Makro zuse-package
pakietu jest doskonałym i wszechstronnym funkcją przycisku wiążące.Powiązanie C-]z M-..
Należy zauważyć, że w normalnym-państwa, będziemy chcieli, aby wiązać się \M-.aby uzyskać dostęp do emacsowi wiążące, ponieważ wiąże normalnego stanu M-.do
'evil-repeat-pop-next
. Wiązanie stanu normalnego można więc zdefiniować za pomocą:lub (ponowne przypisanie dowolnego
evil-jump-to-tag
klawisza w stanie normalnym:źródło