Включить sgml-close-tag в режиме js-jsx

avatar
Heitor Chang
8 августа 2021 в 19:22
73
1
0

Моя версия GNU Emacs 27.2.

У меня есть файл React с активным режимом js-jsx (JavaScript[JSX]).

const App = () => {

return (
  <div className="container">
    My Content
  

Я могу быстро закрыть <div> после "Моего контента" с помощью M-x sgml-close-tag и для этого глобально установить C-/.

Я заметил, что переключение в режим SGML (с M-x sgml-mode), а затем обратное переключение на js-jsx-mode всегда позволит мне выполнить sgml-close-tag.

Иногда при запуске (или при загрузке файла JS) автоматически загружается базовый режим sgml, а иногда я получаю сообщение об ошибке:

Wrong type argument: commandp, sgml-close-tag.

Когда я получаю эту ошибку, я могу переключиться в sgml-режим и обратно, и функция будет работать.

Однако я хотел бы постоянно загружать все, что находится в sgml-mode, что позволит мне запускать sgml-close-tag в то время как в <98077786322210>, без необходимости переключения режимов.

Как лучше всего убедиться, что sgml-close-tag будет доступен в js-jsx-mode? Или есть другая функция с таким же эффектом?

Источник

Ответы (1)

avatar
Heitor Chang
8 августа 2021 в 19:57
0

Я попытался отредактировать js-mode-hook, вызвав sgml-mode, а затем js-jsx-mode, но это привело к бесконечной рекурсии.

Работающий хак заключается в использовании третьего (неиспользуемого) режима в .emacs в качестве механизма для переключения в режим sgml, а затем в режим js-jsx. Третий режим, который я выбрал, это html-mode:

.
(add-to-list 'auto-mode-alist '("\\.js\\'" . html-mode))

(add-hook 'html-mode-hook
      (lambda ()
        (auto-complete-mode 1)
        (sgml-mode)
        (js-jsx-mode)))

Есть много режимов, которые я не использую, и описанная выше процедура сделает этот режим недоступным.