2

У меня установлен режим компании. Когда я нажимаю вкладку в режиме термина, она всегда вызывает компанию завершена. Я пытался отключить режим компании с

(global-company-mode '(not (equal major-mode 'term-mode)))

Также следующее не работает

(add-hook 'term-mode-hook (lambda()
(company-mode 0)
(global-unset-key (kbd "<tab>"))))

Я попробовал другой подход с этим

(defun term-send-tab()
(interactive)
(term-send-raw-string "\t"))

(define-key term-raw-map (kbd "TAB") 'term-send-tab)
(define-key term-raw-map (kbd "<tab>") 'term-send-tab)

Все не удалось. Любая помощь будет оценена!

1 ответ1

2

Я решил это с помощью своей настраиваемой функции my-tab с кодом, написанным Филом.Я привязываю клавишу tab к my-tab, она отправит необработанную вкладку в режиме term-char и в других случаях завершит работу, также две быстрые вкладки выполнят yas-expand, связав yas-next-field с "Mn" , завершение табуляции даже работает внутри расширения фрагмента.

Проблема в том, что когда компания и yasnnipet имеют один и тот же префикс, тогда вкладка выполняет только завершение. Можно ли установить время задержки для завершения компании после нажатия клавиши табуляции, сделать его больше, чем тайм-аут my-double-key-timeout, так что двойная вкладка сделает расширение yas, если пользователь хочет завершить компанию, он может просто набрать одну вкладку и ждать. (соврал с сижу за)

Я не знаю, почему я не могу просто связать вкладку, чтобы отправить необработанную вкладку в term-raw-map.

(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))))

Пожалуйста, помогите мне сделать это лучше. Спасибо!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .