In meinem Emacs verwende ich beispielsweise ein "elisp"
Yasnippet, um einen Lisp-Block im Org-Modus zu erweitern. Aber bevor ich es erweitere, wird zuerst eine Firma ausgelöst, die mir ein Menü wie "1. elisp1, 2. elisp2"
ohne eine Option gibt "elisp"
. Wenn ich tab
nun yasnippet erweitere, ist es immer ärgerlich, dass "elisp1"
immer zuerst der Bildschirm erscheint. Also muss ich "1"
erstens löschen und die Erweiterung von yasnippet snippet machen.
Als Lösung verwende ich immer die linke Pfeiltaste, um zuerst das Firmenabschlussmenü zu deaktivieren, aber der Cursor wechselt jetzt zu "elis|p"
. Wieder verwende ich die rechte Pfeiltaste, um den Cursor zum Ende des "elisp|"
Snippets zu bewegen und das Snippet zu erweitern.
Hier kommt meine Frage: Wie kann ich tab
Schlüssel erstens binden, aber nicht Firma yasnippet auslösen, um mir das Leben zu retten?
quelle
tab
fürcompany
undC-o
füryasnippet
. Ich kann weiter beschreiben, wenn Sie interessiert sind.tab
. Daher möchte ich die Bindung nicht ändern.C-o
, darüber nachzudenken, wie man Abkürzungen und Ausschnitte, offene Zeilen usw. erweitern kann, wenn Sie nicht interessiert sind.Antworten:
Dies ist, was ich für mich selbst geschaffen habe, vor dem gleichen Problem. Es stammt aus der Emacs-Wiki-Seite von company-mode , wurde jedoch stark erweitert:
Grundsätzlich macht <tab>dies die meiste Zeit das Richtige . Drücken Sie die Tabulatortaste
Beachten Sie, dass die Situation zwiespältig ist, wenn die Möglichkeit zur automatischen Vervollständigung besteht und Sie gerade einen Snippet-Platzhalter bearbeiten. Als Kompromiss musste ich C-<tab>direkt zum nächsten Platzhalter springen.
Die Tatsache, dass der Name des Snippets nicht im Firmenmenü angezeigt wird und das Vorhandensein eines Snippets das Verhalten der Tabulatortaste stillschweigend ändert, ist leider nicht besonders schön ... Obwohl es zumindest möglich ist, <return>stattdessen zu tippen , um stattdessen die Vervollständigung zu erhalten des Schnipsel.
quelle
Buffer is read-only: #<buffer *magit: ~/.emacs.d/*>
. Irgendeine Idee, wie ich das beheben kann?magit-section-toggle
gebunden ist, mit der(global-set-key [tab] 'tab-indent-or-complete)
obigen Zeile in Konflikt steht . Eine schnelle und fehlerhafte Lösung wäre, zu Beginn dertab-indent-or-complete
obigen Funktion eine Prüfung hinzuzufügen, um festzustellen, ob wir uns im Magit-Modus befinden, z. B. für eine globale Variable, die aktiviert wirdmagit-mode-hook
.when
ist so ziemlich einif
+progn
tab-indent-or-complete
cond `((abgeleitet-mode-p‚magit-Modus) (magit schnittsKnebel (magit Stromschnitt))) `Hier ist der Code, den ich verwende:
aya-open-line
von auto-yasnippet macht mehr als eine Ebeneopen-line
:open-line
wenn alles andere fehlschlägtquelle
C-o
, schließe ich einfach das Firmenmenü, sodass ich zweimal drücken muss, um yasnippet zu erweitern.C-o
Wenn das Firmenmenü aktiv ist, wird das Menü geschlossen und das Snippet erweitert.