Я часто хочу перейти на новую строку, пока отображается предложение режима компании. Как настроить режим компании, чтобы только клавиша табуляции вызывала завершение?
13
Я часто хочу перейти на новую строку, пока отображается предложение режима компании. Как настроить режим компании, чтобы только клавиша табуляции вызывала завершение?
Это определено в company-active-map
. Вы можете отменить привязку ключа возврата на этой карте:
(define-key company-active-map (kbd "<return>") nil)
Однако обратите внимание, что return и tab делают разные вещи, когда есть несколько кандидатов. Tab связан с company-complete-common
, а return связан с company-complete-selection
. Если вы открепите ключ возврата, вы не сможете использовать M-n
и M-p
выбрать завершение из списка.
Вы можете выбрать другой ключ для использования company-complete-selection
, например:
(with-eval-after-load 'company
(define-key company-active-map (kbd "<return>") nil)
(define-key company-active-map (kbd "RET") nil)
(define-key company-active-map (kbd "C-SPC") #'company-complete-selection))
Моя полная установка для исправления этого раздражающего поведения по умолчанию:
( ссылка на текущую конфигурацию, которая была дополнительно улучшена, но довольно сложна к этому моменту)
(обновлено согласно этому вопросу )
источник
(define-key company-active-map (kbd "C-RET") #'company-complete-selection)
но это не сработало. Вы знаете, возможно ли это и как этого достичь?TAB
для выбора первого элемента в списке без необходимости «взаимодействовать». Но чтобы ответить на ваш вопрос, могу поспорить, ваш терминал не может отправитьC-RET
(мой не может). ПопробуйтеC-h k C-RET
и посмотрите, действительно ли Emacs получает сигнал,C-RET
а не простоRET
.(define-key company-active-map (kbd "TAB") #'company-complete-common-or-cycle)
но, похоже, вы правы, когда я перешел на что-то другое, чем C-RET, я получил желаемое поведение. Спасибо.M-p
иM-n
, или искать их с помощьюC-s
, или напрямую выбирать кандидата сM-1
помощьюM-0
(цифры отображаются, если вы их установилиcompany-show-numbers
).Просто видел это, когда искал решение той же проблемы (хотя раздражающие ключи для меня были
SPC
и.
).Я считаю, что привязка
nil
ошибочных ключей к тому, что предложили @glucas и @Radon Rosborough, - это нехорошая UX, так как вам нужно вручную прервать выпадающий список компании, что разрушительно влияет на скорость набора текста.То есть, если компания станет активной, и вы введете ключ, связанный с
nil
ничем, не произойдет. Это не то, что вы ожидаете, когда набираете символ. Вы ожидаете, что символ будет вставлен.Скорее, гораздо удобнее автоматически вызывать emacs,
company-abort
а затем вставлять набранный символ. Вот мое решение:Я думаю, что вы можете легко расширить это
RET
, позвонив(newline)
вместо(insert-char)
(хотя я не пробовал это, потому что я используюRET
для выбора).На самом деле я использую,
use-package
так что это то, что у меня есть в моем init:источник