Вопрос или проблема
Я пытаюсь настроить автозаполнение для файлов terraform в emacs, как это делает vscode.
Вот соответствующая часть конфигурации:
(use-package company
:ensure t
:config
(setq company-idle-delay 0.3
company-minimum-prefix-length 1)
:hook ((terraform-mode . company-mode)
(lsp-mode . company-mode)))
(use-package lsp-mode
:ensure t
:hook ((terraform-mode . lsp-deferred)))
(setq lsp-disabled-clients '(tfls))
(setq lsp-terraform-ls-prefill-required-fields t)
(company-quickhelp-mode)
;; Добавить поддержку Terraform в lsp-mode
(add-hook 'terraform-mode-hook #'lsp)
(use-package terraform-mode
:hook (terraform-mode . lsp-deferred))
С этими настройками emacs не выполняет автозаполнение для ресурсов, связанных с terraform, таких как aws_instance и т.д.
Я больше пользователь emacs, чем администратор, и не могу понять, в чем может быть проблема.
Спасибо за вашу помощь.
Я думаю, вам нужно выполнить (company-terraform-init)
в буфере с вашим кодом terraform. Без этого будет выполнено только автозаполнение ключевых слов “resource”, “data” и т.д. После выполнения этой команды я получаю нужное вам автозаполнение.
Мне не удалось настроить его автоматический запуск из хука, такого как terraform-mode-hook
. Но если я запускаю его вручную, он работает.
Ответ или решение
Для того чтобы обеспечить автозаполнение конфигурационных файлов Terraform в Emacs аналогично тому, как это делается в Visual Studio Code, необходимо убедиться, что все соответствующие пакеты и настройки правильно конфигурированы. Ваш текущий конфигурационный файл уже содержит большинство необходимых компонентов, но, как вы заметили, автозаполнение, похоже, не работает корректно. Позвольте предложить вам несколько шагов, которые помогут устранить проблему.
-
Убедитесь, что необходимые компоненты установлены:
Убедитесь, что вы установили пакетыcompany
,lsp-mode
иterraform-mode
. Проверьте, что они все успешно загружены и функционируют без ошибок. -
Настройка автозаполнения с использованием
company-terraform
:
По всей видимости, вы можете использовать функцию(company-terraform-init)
для инициализации автозаполнения в текущем буфере. Это необходимо делать, так как стандартные настройки не всегда активируют автозаполнение автоматически. Вы можете добавить вызов этой функции в вашterraform-mode-hook
, чтобы сделать его автоматическим.Пример:
(use-package terraform-mode :ensure t :hook ((terraform-mode . lsp-deferred) (terraform-mode . company-terraform-init)))
-
Проверьте конфигурации
lsp-mode
:
Убедитесь, что вы правильно настроилиlsp-terraform-ls
. У вас в конфигурации отсутствует необходимый клиент для Terraform Language Server (если он установлен). Если вы хотите использоватьterraform-ls
, то уберите строку:(setq lsp-disabled-clients '(tfls))
Это позволит
lsp-mode
активировать язык-сервер для Terraform. -
Настройка
company-mode
:
Убедитесь, что вы правильно настраиваетеcompany-mode
. Ваш текущийcompany-mode
выглядит неплохо, но попробуйте добавитьcompany-terraform
вcompany-backends
:(add-to-list 'company-backends 'company-terraform)
-
Проверка достижений:
После внесения всех изменений, проверьте, работает ли автозаполнение в новых файлах Terraform. Откройте файл с расширением.tf
и начните вводить ресурс, напримерaws_instance
.
В итоге, ваша окончательная конфигурация может выглядеть следующим образом:
(use-package company
:ensure t
:config
(setq company-idle-delay 0.3
company-minimum-prefix-length 1)
:hook ((terraform-mode . company-mode)
(lsp-mode . company-mode)))
(use-package lsp-mode
:ensure t
:hook (terraform-mode . lsp-deferred))
(setq lsp-terraform-ls-prefill-required-fields t)
(company-quickhelp-mode)
(use-package terraform-mode
:ensure t
:hook ((terraform-mode . lsp-deferred)
(terraform-mode . company-terraform-init)))
(add-to-list 'company-backends 'company-terraform)
Теперь, после перезапуска Emacs, вы должны увидеть автозаполнение для ресурсов Terraform. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь обращаться за помощью.