Я часто использую корпоративный режим для завершения естественного языка с помощью местного словаря. Мне интересно, есть ли способ автоматически добавить пробел после завершения.
Например, сейчас, когда я набираю abili
и выбираю первого кандидата ability
, моя точка вставки находится сразу после y|
. Есть ли способ, которым режим компании может добавить пробел, чтобы моя точка вставки была после y |
?
Я не смог найти никакой соответствующей информации по этому поводу, но Эта проблема упомянул, что пробел добавляется после завершения в режиме Eshell. Видимо, это именно то, что я хочу.
В выпуске упоминалась функция completion-at-point
. Есть ли способ, которым я могу изменить или иметь функцию, с помощью которой я могу переопределить текущий механизм завершения?
Спасибо! Буду очень признателен за любые предложения.
Вы можете добавить хук в company-after-completion-hook
, который будет вызываться после завершения любого из бэкэндов вашей компании, например.
(defun my-company-after-completion-hook (&rest _ignored)
;; this would be called with the completion candidate, so you could
;; modify it to insert spaces based on the candidate
(just-one-space))
;; or setq-local in a mode hook, eg. for text-mode/org-mode or wherever you are
;; completing with dictionary words
(setq company-after-completion-hook #'my-company-after-completion-hook)
Если вы хотите добавить пространство только после завершения с определенным бэкэндом, вы можете увидеть, реализует ли бэкэнд уже действие post-completion
, в противном случае вы, вероятно, могли бы посоветовать его.
Привет, основываясь на вашей функции, я изменил последнюю строку "(setq" как `(setq company-completion-finished-hook #'my-company-after-completion-hook)`, чтобы пробел добавлялся только тогда, когда завершение выполнено успешно. Еще раз спасибо за ваш ответ.