Ich löste es mit meiner benutzerdefinierten Funktion my-tab mit etwas Code, der von phil geschrieben wurde. Ich binde den Tab-Key an meinen Tab, er wird im Term-Char-Modus einen unformatierten Tab senden und in anderen Fällen auch zwei Quick-Tabs ausführen yas-expand wird ausgeführt, indem das yas-next-Feld an "Mn" gebunden wird. Die Tab-Vervollständigung funktioniert sogar innerhalb einer Snippet-Erweiterung.
Das Problem ist, wenn company und yasnnipet das gleiche Präfix haben, dann führt die Registerkarte nur den Abschluss aus. Ist es möglich, eine Verzögerungszeit für den Unternehmensabschluss nach dem Drücken der Tabulatortaste festzulegen, so dass der Wert für das Doppelter-Tasten-Timeout überschritten wird, so wird der doppelte Tabulator durch Yas-Erweiterung erweitert. Wenn der Benutzer den Firmenabschluss wünscht, kann er nur einen Tabulator eingeben und warte. (souverän mit sitzen für)
Ich weiß nicht, warum ich die Registerkarte nicht einfach binden kann, um eine reine Registerkarte in der Term-Raw-Map zu senden.
(defvar my-double-key-timeout 0.25 "The number of seconds to wait for a second key press.") (defun my-tab () "Move to the beginning of the current line on the first key stroke, and to the beginning of the buffer if there is a second key stroke within `my-double-key-timeout' seconds." (interactive) (let ((last-called (get this-command 'my-last-call-time)) ) (is-term (string= "term-mode" major-mode))) (if (and is-term (term-in-char-mode)) (term-send-raw-string "\t") (if (and (eq last-command this-command) last-called (<= (time-to-seconds (time-since last-called)) my-double-key-timeout)) (yas-expand) (if (sit-for my-double-key-timeout) (complete-indent-fold))) (put this-command 'my-last-call-time (current-time)))) (defun complete-indent-fold() (interactive) (if (looking-at outline-regexp) (if (equal major-mode 'org-mode) (org-cycle) (my-outline-cycle)) (if (looking-at "\\_>") (company-complete) (indent-for-tab-command))))
Bitte hilf mir, das besser zu machen. Vielen Dank!